.NET(Mono)上のexeをMac向けにする備忘録
実行時のMonoのインストールを不要にする
この記事
を教えてもらったので,やってみました.
少しハマった部分があったのでその辺を参考にしてもらえると。
実行したシェルコマンドは以下です.
export PKG_CONFIG_PATH=/Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig export AS="as -arch i386" export CC="clang -arch i386 -mmacosx-version-min=10.6" mkbundle -o Bar Foo.exe --deps --sdk /Library/Frameworks/Mono.framework/Versions/Current otool -L Bar
元のFoo.exeという実行ファイルを,Mono無しに実行できるBarというファイルに変換できました.
パスに関するエラーが出たので,Mono Frameworkの場所を指定する--sdk以下を加えたらうまくいきました.
元のQiitaの記事ではotoolのエラーに関する記述がありましたが,そこは特に何事もなく通りました.
また,bundle化することで,*.dllが統合されるため、これらは不要になります。
わたしの場合の実際のファイル構成です.
Cannon/ ├── Cannon ├── Cannon.command ├── README.txt ├── Resources.pack └── libAltseed_core.dylib
Cannonが,mkbundleによって作られたMac向けの実行ファイルです.
以下のようなシェルスクリプトに*.commandという名前で実行権限を与えれば,ダブルクリックで実行できます.
Cannon.command
#!/bin/sh cd `dirname $0` ./Cannon
.app形式にする
しかし上記のように複数のファイルがあると,一見してどのファイルを実行すればいいのかわかりません.
また,*.commandを実行する形式だと実行時にターミナルが開いてしまって,見た目も悪いです.
そのため,これらのファイルをまとめてapp形式にします..
こちらの記事
MacOSXでシェルスクリプトを.app形式のアプリケーションにするmkapp.app - maruko2 Note.
ほぼそのままです.
以下のようなディレクトリ構造を作成すれば,あとはMacが勝手にappと認識してくれます.
Cannon.app/ ├── Contents │ ├── Info.plist │ ├── MacOS │ │ └── script.sh │ └── Resources │ ├── Cannon │ ├── Resources.pack │ └── libAltseed_core.dylib └── Icon\r
ライブラリやソースは,Resourcesディレクトリ内に配置しました.
追加したファイルの内容は以下です.
Info.plistは先ほどの記事のそのままです.
script.shは,元のCannon.commandをベースに書き換えました.
Info.plist
<?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>CFBundleExecutable</key> <string>script.sh</string> </dict> </plist>
script.sh
#!/bin/sh cd `dirname $0` cd ../Resources ./Cannon
元の記事にもありますが,シェルスクリプトには実行権限を与えてください.
$ chmod +x script.sh
appを作成したら,ダブルクリックで実行できることを確かめてください.
また,appにアイコンを設定する方法は以下の記事
support.apple.com
あるいは,こちらのサイトを使ってください.