[Obj-C++] 04 非Xib環境にAppDelegate導入 その1

[M1 Mac, Big Sur 11.6.5, clang 13.0.0, no Xcode]

これまで非Xcode非Xib環境で開発を進めていますが、Drag & Dropを実装するに際しライフサイクルの概念を取り入れるためAppDelegateを導入しました。IDEを使わずGUIをコードで書く非Xcode非Xib環境は継続になります。

手順は以下の通りです。最初だけXcodeを使います。

1.XcodeでmacOS – Xib – Objective-Cの空プロジェクトを作成する。
2.main.m, AppDelegate.m, AppDelegate.hを用意しておいたプロジェクトにコピーする。
3.拡張子をmからmmに書き換えて、以下の様にコードを追記する。

#import "AppDelegate.h"

@interface AppDelegate ()

@property (strong) NSWindow *window;

@end

@implementation AppDelegate

- (void)applicationWillFinishLaunching:(NSNotification*)notification {
    self.window = [[[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, 300, 200)
                    styleMask: NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable
                    backing: NSBackingStoreBuffered
                    defer: NO]
                    autorelease];
    auto app_name = [[NSProcessInfo processInfo] processName];
    [self.window setTitle: app_name];
    [self.window makeKeyAndOrderFront: self];
    [self.window orderFront:self];
    [self.window makeMainWindow];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application
}


- (void)applicationWillTerminate:(NSNotification *)aNotification {
    // Insert code here to tear down your application
}


- (BOOL)applicationSupportsSecureRestorableState:(NSApplication *)app {
    return YES;
}

@end
#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate>

@end
#import "AppDelegate.h"

int main(int argc, const char * argv[]) {
    auto app = [NSApplication sharedApplication];
    app.delegate = [AppDelegate new];
    [app run];
}

参考サイト