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

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

Makefileのアプリファイル作成するところを1行減らすためにmakeAppコマンドの引数を2つに増やしました。

実行ファイル作成とappファイル作成がそれぞれ1行にまとまり、すっきりしました。

# 実行ファイル
TARGETDIR = ./bin
TARGET = TetrisDX

# oファイルから実行ファイル・appファイル作成
$(TARGET):$(OBJS)
	$(COMPILER) -o $(TARGETDIR)/$@ $(OBJS) $(LIBRARY0) $(LIBRARY) $(LDFLAGS)
	./sh/makeApp $(TARGETDIR) $(TARGET)
#!/bin/sh

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

[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

[C++] 266 実行ファイルからappファイルを作成 シェルスクリプト(引数あり)

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

前回記事でMakefileで実行ファイルからappファイルを作成できるようにしましたが、そこだけ長ったらしくなるので引数ありシェルスクリプトにしてすっきりさせました。

chmodコマンドでアクセス権限を付与する必要があります。

# シバンは不要

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
# oファイルから実行ファイル作成
$(TARGET):$(OBJS)
	$(COMPILER) -o $(TARGETDIR)/$@ $(OBJS) $(LIBRARY0) $(LIBRARY) $(LDFLAGS)
	cp $(TARGETDIR)/$(TARGET) $(TARGET)
	chmod 777 ./sh/makeApp.sh
	./sh/makeApp.sh $(TARGET)
# oファイルから実行ファイル作成
$(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