Objective-c のコードだけで NSApp を作るソースを作成。
って以前 PyObjC で作ったんだから Objective-c に書き戻すだけだ。
NSApplication – Paepoi
と思ったんだけど動かない、何故だ?
検索しまくって以下のページを見つけた。
Minimalist Cocoa programming
setActivationPolicy を追加したらなんとか動くようになった。
逆に PyObjC は何故いらないんだ?
それとガベージコレクションではないので破棄が必要なんだなこれが。
NSAutoreleasePool という便利なものはこう使うみたい。
#import <Cocoa/Cocoa.h>
// clang app.m -framework Cocoa
@interface AppMenu : NSMenu
//- (id) init; // いらない
@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];
// コレをしないと最前面に出てこない
[NSApp activateIgnoringOtherApps:YES];
// メインループを回す
[NSApp run];
//
return 0;
}

動いたんだけど。。。。。
command+Q は使えるんだけどメニューが選択できない。
一度非アクティブにして再度アクティブ化すればイケるんだけど。
てかリンク元のコードも同じジャン。
PyObjC 版はそんな必要なんて無いのに何故だろう?
どうでもいかもしれないけれど、M1 Mac でビルドしたんだけど。
Silicon Info で確認したらこの a.out は arm64 で動いていた。
ついでに。
SyntaxHighlighter は objective-c ハイライトが無いのね。
BloggerのSyntaxHighlighterでObjective-Cを表示する方法 – menXpon
作っている人がいるってのが有名アプリのいいところ。
筆者の WordPress は自前設置なので scripts に放り込むだけ。
後は Add Code to Head プラグインの設定で以下を追加。
<script type="text/javascript" src="/sh2/scripts/shBrushObjectiveC.js"></script>
プレビュー、よしハイライトできた。
ただ Objective-c なんて今後そんなに使うか疑問なんだけど。