Create  Edit  Diff  FrontPage  Index  Search  Changes  Login

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 での配布となる。

Adas's Linux Game Programming

hdiutil の使い方は以下を参考にしました。

詳説? hdiutil (コマンドラインからのディスクイメージ操作)

--- shinichiro.h ---

Last modified:2011/06/22 02:40:33
Keyword(s):
References:[FrontPage]