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 って本当に簡単だなって。

