[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];
}