[M1 Mac, Big Sur 11.6.5, no Xcode]
Objective-CでのmacOSアプリ製作に着手しました。知識ゼロなので一から学んでいきます。GUIのXcodeは極力使わないようにします。
まずはコンソールアプリのMakefileを作成してみました。C++のテンプレを流用しています。今のところソースコードの内容についてはあまり理解していません。
次はWindowのあるアプリを作成します。
# コンパイラ
COMPILER = clang
DEBUG = -g
# オプション
CFLAGS =
LDFLAGS = -framework Cocoa
# includeパス(-I)
INCLUDE = -I.
# ソースファイル
SRCDIR = .
SRCS = $(SRCDIR)/test.m
# オブジェクトファイル
OBJDIR = .
OBJS = $(OBJDIR)/test.o
# 実行ファイル
TARGETDIR = .
TARGET = test
# コンパイル
$(OBJDIR)/test.o: $(SRCDIR)/test.m
$(COMPILER) $(INCLUDE) $(DEBUG) -o $@ -c $<
# ビルド
$(TARGET):$(OBJS)
$(COMPILER) -o $(TARGETDIR)/$@ $(OBJS) $(LDFLAGS)
# ファイル削除&ビルド
.PHONY:all
all: clean $(TARGET)
# ファイル削除
.PHONY:clean
clean:
rm -rf $(OBJS) $(TARGETDIR)/$(TARGET)
#import "test.h"
@implementation AppDelegate
- (id) init {
[super init];
return self;
}
- (void) applicationDidFinishLaunching:(NSNotification *)aNotification{
// アクティブ化
[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];
// setActivationPolicy
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
// メニュー設定
id main_menu = [[AppMenu new] autorelease];
[NSApp setMainMenu:main_menu];
// Delegate
id delegate = [[AppDelegate new] autorelease];
[NSApp setDelegate:delegate];
// メインループ
[NSApp run];
return 0;
}
#import <Cocoa/Cocoa.h>
@interface AppMenu : NSMenu
@end
@interface AppDelegate : NSObject<NSApplicationDelegate>
@end