MacOSX+SDLでの配布物作成法
MacOSX における SDL アプリケーションのコンパイル・配布法
概要
MacOSX & SDL で配布物を作成方法を示す。 Xcode を使用して GUI 開発をするような人では無く、 CUI で開発をするような人を対象とする。
事前条件
SDL や必要なサブライブラリを ./configure; make; make install でインストールする。
SDL.framework を作る
SDL.framework の実体はディレクトリであり、 その中にはただ libSDL.dynlib が入っているだけである。 だが、 SDL.framework に挿入するための libSDL.dynlib の作成法についてはまだ調べられていない。 (当りはついてますけどまだ確認できていません。 誰か補って頂ければ幸い)
ディレクトリ構成は以下のようなものがあれば恐らく十分である。 SDL というファイルが libSDL.dynlib である。
lrwxrwxrwx 1 s31552 student 20 15 4 10:00 SDL -> Versions/Current/SDL drwx------ 3 s31552 student 28 15 4 10:00 Versions SDL.framework/Versions: total 8 drwx------ 3 s31552 student 32 29 4 18:18 A lrwxrwxrwx 1 s31552 student 1 15 4 10:00 Current -> A SDL.framework/Versions/A: total 512 -rwx------ 1 s31552 student 254772 15 4 10:00 SDL
実際上は、既に配布されている SDL.framework を もらってきてコピーすれば十分なことが多い。
もしくは Xcode で作ってしまっても問題無いと思う。
アプリケーションのコンパイル
通常通り行う。
アプリケーションのリンク
`sdl-config --libs` は使用せず、
-F$HOME/Frameworks -framework SDL -framework Cocoa -framework OpenGL
などのオプションを使用する。 $HOME/Frameworks は環境に応じて、 SDL.framework を作成した場所を指定すること。
アプリケーションの配置
MacOSX で .app をアプリケーション名の後に付けた名前の ディレクトリが実行ファイルとなっている。 カレントディレクトリにアプリケーション foo と SDL.framework があるとすると、以下のように配置する。
mkdir foo.app mkdir foo.app/Contents mkdir foo.app/Contents/MacOS foo.app/Contents/Resources foo.app/Contents/Frameworks cp foo foo.app/Contents/MacOS vi foo.app/Contents/PkgInfo # 説明を書く cp -r SDL.framework foo.app/Contents/Frameworks
アイコンを付ける
イメージビューアで適当に Command+C で画像をコピーしておき、 foo.app のプロパティ画面を出し、 アイコンをクリックしてから Command+V でペーストする。 (さすがに GUI でやった方が良いと思われる)
アプリケーションが使用するファイルがある場合
foo.app をダブルクリックした場合、 それを実行するディレクトリは foo.app のある階層となる。 つまり、 foo.app と同階層に使用するファイルを置いても良いが、 MacOSX ではバイナリを実行するために必要なファイルは 全て .app ディレクトリ内に入れる慣習があり、 その流儀に従うのであれば foo.app/Contents/Resources に そういったファイルを入れることになる。
その場合、 main の最初に chdir("foo.app/Contents/Resources"); しておけば実際上問題は無い。 (もっと流儀に適った方法があるかもしれません)
パッケージの作成
これまでで作成した foo.app を適当に圧縮するだけでも 十分に配布ファイルとして機能するが、 MacOSX ではディスクイメージファイルとして配布することが推奨されている。
この作業を CUI で行う場合 hdiutil というコマンドを使用する。 このコマンドの詳しい説明は参考のセクションをあたって頂きたい。 ここでは zlib で圧縮されたディスクイメージを 作成するスクリプトを紹介する。
#!/bin/sh -x size=$((`du | tail -1 | cut -f 1`*11/10)) pwd=`pwd` name=`basename $pwd` cd .. rm -f $name.dmg hdiutil create $name.dmg -fs HFS+ -size ${size}k -volname $name -format UDZO -imagekey zlib-level=9 -srcfolder $name hdiutil internet-enable -yes $name.dmg
このスクリプトを例えば以下のようなディレクトリ構成で、
foo_0_1 foo.app README.txt
foo_0_1 の下で実行すると、 foo_0_1.dmg ができる。
この方法で作成したファイルはダウンロードすると即マウントされる。 実行する場合は foo.app を HDD 上のどこか適当な位置に コピーしてからダブルクリックすれば良い。
参考
MacOSX での .app ディレクトリの作成について参考にした。 ただこちらの方法ではユーザに SDL のインストールを要求するか、 SDL をスタティックリンクして LGPL や GPL での配布となる。
hdiutil の使い方は以下を参考にしました。
詳説? hdiutil (コマンドラインからのディスクイメージ操作)
--- shinichiro.h ---
Keyword(s):
References:[FrontPage]