[C++] 267 実行ファイルからappファイルを作成 シェルスクリプトをバイナリ化

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

前回の続きです。

シェルスクリプトの内容を見られたくない場合はshcコマンドでバイナリ化します。

shcコマンドはshファイルをC言語に変換しコンパイルしてくれます。C言語のコードも同時に生成しますので、内容を解析するのも一興です。

chmodコマンドによるアクセス権限付与はいらなくなります。

# shcをインストール
homebrew install shc

# shファイルをバイナリ化(.xが末尾に付く)
shc -f shファイル
# 実行ファイル
TARGETDIR = ./bin
TARGET = TetrisDX

# oファイルから実行ファイル作成(makeApp.sh.xはmakeAppにリネーム)
$(TARGET):$(OBJS)
	$(COMPILER) -o $(TARGETDIR)/$@ $(OBJS) $(LIBRARY0) $(LIBRARY) $(LDFLAGS)
	cp $(TARGETDIR)/$(TARGET) $(TARGET)
	./sh/makeApp $(TARGET)
#!/bin/sh

mkdir $1.app
mkdir $1.app/Contents
mkdir $1.app/Contents/MacOS
mv $1 $1.app/Contents/MacOS
mkdir $1.app/Contents/Resources
cp ./images/$1.icns $1.app/Contents/Resources
plutil -create xml1 $1.app/Contents/Info.plist
plutil -insert 'CFBundleInfoDictionaryVersion' -string "6.0" $1.app/Contents/Info.plist
plutil -insert 'CFBundleExecutable' -string $1 $1.app/Contents/Info.plist
plutil -insert 'CFBundleIdentifier' -string "" $1.app/Contents/Info.plist
plutil -insert 'CFBundleName' -string $1 $1.app/Contents/Info.plist
plutil -insert 'CFBundlePackageType' -string "APPL" $1.app/Contents/Info.plist
plutil -insert 'CFBundleIconFile' -string $1.icns $1.app/Contents/Info.plist
plutil -insert 'NSHighResolutionCapable' -bool true $1.app/Contents/Info.plist