[C++] 265 実行ファイルからappファイルを作成 plutilコマンド

[M1 Mac, Monterey 12.6.3, clang 13.0.0, SDL 2.26.2, ChatGPT Plus, NO IDE]

appファイルの中に格納するInfo.plistをMakefileで作成できるようになりました。

plutilコマンドはたまに使っていましたが、空のplistファイル作成からkey-valueを入力していくのは初めてでした。なおCFBundleExecutableなどのCFはCore Foundationの略です。NSは言わずと知れたNextstep。

これが最も正統な方法でしょう。少なくともFLTKのfltk-configよりも汎用性が高いです。XcodeでしたらInfo.plistは自動的に作成してくれるはず。

TARGETDIR = ./bin
TARGET = TetrisDX

# oファイルから実行ファイル・appファイル作成
$(TARGET):$(OBJS)
	$(COMPILER) -o $(TARGETDIR)/$@ $(OBJS) $(LIBRARY0) $(LIBRARY) $(LDFLAGS)
	cp $(TARGETDIR)/$(TARGET) $(TARGET)
	mkdir $(TARGET).app
	mkdir $(TARGET).app/Contents
	mkdir $(TARGET).app/Contents/MacOS
	mv $(TARGET) $(TARGET).app/Contents/MacOS
	mkdir $(TARGET).app/Contents/Resources
	cp ./images/$(TARGET).icns $(TARGET).app/Contents/Resources
	plutil -create xml1 $(TARGET).app/Contents/Info.plist
	plutil -insert 'CFBundleInfoDictionaryVersion' -string "6.0" $(TARGET).app/Contents/Info.plist
	plutil -insert 'CFBundleExecutable' -string $(TARGET) $(TARGET).app/Contents/Info.plist
	plutil -insert 'CFBundleIdentifier' -string "" $(TARGET).app/Contents/Info.plist
	plutil -insert 'CFBundleName' -string $(TARGET) $(TARGET).app/Contents/Info.plist
	plutil -insert 'CFBundlePackageType' -string "APPL" $(TARGET).app/Contents/Info.plist
	plutil -insert 'CFBundleIconFile' -string $(TARGET).icns $(TARGET).app/Contents/Info.plist
	plutil -insert 'NSHighResolutionCapable' -bool true $(TARGET).app/Contents/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleExecutable</key>
	<string>TetrisDX</string>
	<key>CFBundleIconFile</key>
	<string>TetrisDX.icns</string>
	<key>CFBundleIdentifier</key>
	<string></string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>TetrisDX</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>NSHighResolutionCapable</key>
	<true/>
</dict>
</plist>