M1 Mac の Big Sur を 11.2.1 にアップデート。
やっぱりか、また Command Line Tools が削除されてしまった。
Command Line Tools reinstall | Paepoi Blog
dmg を残しておいて良かった。
多分 Xcode のほうに入っている奴しか見ていないんだろうな。
JXA の NSMakeRect バグについてはもうあきらめているよ。
Clang を再びインストールした所で、前回の続き。
起動すると林檎メニューにもアクセスできないじゃん。
多分 activateIgnoringOtherApps がずっと働いているっぽい。
PyObjC はインタプリタのおかげでメソッドを抜けているのかな。
main 関数内じゃだめだ、デリゲートのハンドラ内に移動する。
#import <Cocoa/Cocoa.h> // clang app.m -framework Cocoa @interface AppMenu : NSMenu @end @interface AppDelegate : NSObject<NSApplicationDelegate> @end @implementation AppDelegate - (id) init { [super init]; return self; } - (void) applicationDidFinishLaunching:(NSNotification *)aNotification{ NSLog(@"applicationDidFinishLaunching"); id window = [[[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 200, 200) styleMask:NSWindowStyleMaskTitled backing:NSBackingStoreBuffered defer:NO] autorelease]; [window cascadeTopLeftFromPoint:NSMakePoint(20,20)]; [window setTitle:@"日本語"]; [window makeKeyAndOrderFront:nil]; // // App Active // [NSApp activateIgnoringOtherApps:YES]; } @end @implementation AppMenu - (id) init { [super init]; id item_app = [[NSMenuItem new] autorelease]; [self addItem:item_app]; id menu_app = [[NSMenu new] autorelease]; [item_app setSubmenu:menu_app]; id item_quit = [[NSMenuItem new] autorelease]; [item_quit initWithTitle:@"Quit App" action:@selector(terminate:) keyEquivalent:@"q"]; [menu_app addItem:item_quit]; return self; } @end int main(int argc, char *argv[]) { // ガベージコレクションではないのでコレを利用 [NSAutoreleasePool new]; // NSApp を作る [NSApplication sharedApplication]; // C ではコレが必須だった [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; // command+Q で終了するメニューを入れる id main_menu = [[AppMenu new] autorelease]; [NSApp setMainMenu:main_menu]; // Delegate に activateIgnoringOtherApps を移動 id delegate = [[AppDelegate new] autorelease]; [NSApp setDelegate:delegate]; // No!!! //[NSApp activateIgnoringOtherApps:YES]; // メインループを回す [NSApp run]; // return 0; }
上手くいったのでウインドウも追加。
前回みたいなコードは世界中で見つかるけど誰もこのこと書いていない。
それにしても。
PyObjC や PyGObject って本当に簡単だなって。