Macのアプリケーションは.appという拡張子のついたフォルダに、決められた構成で必要なファイルを配置する事で、OSからアプリケーションとして実行されます。例えば、最小構成であれば、このようなディレクトリ構造になってます。
・hoge.shをhoge.appにバンドルする場合
1 2 3 4 5 6 7 |
hoge.app/ └── Contents/ ├── Info.plist ├── MacOS/ │ └── hoge.sh └── Resources/ └── icon.icns |
こういう構成にして、各設定ファイルが適切に設定されていた場合、hoge.app/Contents/MacOS/hoge.shは、hoge.appがダブルクリックされた際に実行されるようになります。
そして、この時に重要なのが、「Info.plist」です。ハマったので最初に書いておきますが、このファイルの先頭は大文字です。うまく行かないなぁと思ってたら、Info.plistがinfo.plistになっていました。笑えない。さて、肝心な中身ですが、hoge.appに、hoge.shをバンドルし、アイコンをicon.icnsにしたい場合次のように記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleName</key> <string>hoge ver1.0</string> <key>CFBundleDisplayName</key> <string>hoge ver1.0</string> <key>CFBundleExecutable</key> <string>hoge.sh</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleIconFile</key> <string>icon.icns</string> </dict> </plist> |
CFBundleNameとCFBundleDisplayNameは正直適当で大丈夫です。実行するシェルスクリプトとアイコンを正しく指定してあげてください。また、うまく行かない場合は、.shが単体でダブルクリックしてうまく動くか、シェルスクリプトに実行権限がついているか、Info.plistの頭が小文字になっていないか、フォルダ構成が間違っていないかを再度チェックしてください。また、変更が反映されない場合、一度見えないところに.appを退避させて、改めて表示させると情報がリフレッシュされる事もあるので、変なマークが着いてたりする場合は色々移動させて戻してとかやってみましょう。
はい、ここまでで一応おしまいなのですが、ここから余談。何故こんな事をしたいと思ったかというと、Java 1.7から、Macに標準で付属しているjarバンドラーを用いてapp化が出来なくなってしまったからである。ひょんなことから、Java 1.7を使って書いたコードをapp化しなくてはならなかったのですが、今までの方法ではどうしても出来なかったので、シェルスクリプトで実行可能jarファイルを叩く事によって、javaの起動をするようにして、app化しました。なので、実際は環境によってはappが正常に動作しないと思うので、配布等をするときは自己責任で御願いします。
そこで、javaをコマンドラインから実行する時に、スプラッシュ画面を設定したり、command + tab押したときのアイコンを変えたりしたい。ということで、実際に使ったJavaを起動するシェルスクリプトをここに書いておきます。
シェルスクリプトと同じディレクトリに、hogeというフォルダがあり、その中にhoge.jarが入っていて、スプラッシュ画像が../../Resources/splash.jpgの時のコード。
1 2 3 4 |
#!/bin/sh SCRIPT_DIR=`dirname $0` cd $SCRIPT_DIR/hoge java -Xdock:name="hoge ver1.0" -Xdock:icon=../../Resources/icon.icns -splash:../../Resources/splash.jpg -jar hoge.jar & |
これでアプリケーションっぽい.appを作る事が出来ますね。