[iPhone] cocos2dを静的ライブラリ化して使う
[イントロダクション]
cocos2d for iPhoneはiPhoneアプリケーション製作用のフレームワークで、主に2Dゲームを作る際の基盤に用いられているようである。UIKitより使い勝手が良いと思える点は以下の通り。
- オブジェクトの扱い方がFlashの感覚にかなり近い。Cocoa touch特有のframeやboundsを気にしなくてよく、-[Sprite addChild:]などおなじみの操作も行える。
- メモリ管理をほとんど気にしなくてよい。cocos2dオブジェクトに関しては内部で適切に処理されるようになっている(ようである)。
- シーン遷移機能が標準装備されている。エフェクトの種類も豊富。
個人的にはFlash的に操作できるという点が一番の恩恵だと思っており、最近はXcodeのプロジェクト作成時にcocos2d用テンプレートしか使っていない。テンプレートを使うのであれば例えばCocos2d – 2D OpenGL for the iPhone made Easy. Part 1.に簡素なものがある。自分で作るのであれば【Xcode】設定しておくと便利なカスタマイズいろいろが参考になる。
[追記: 2009/09/02]
cocos2d for iPhone v0.8.1-betaよりプロジェクトテンプレートが用意されている。詳しくはrelease_notes:0_8_1_beta [cocos2d for iPhone]のTemplateの項参照。
[本題]
このCocos2d for iPhoneだが、ライブラリの状態で配布されていない。そのまま使用するのであれば大量のcocos2dソースファイルをプロジェクトに追加する形になる。これはコンパイルに結構時間がかかるし、ソースファイルに誤って書き込んでしまう可能性がある。そこでcocos2dを静的ライブラリ化することにする。以下で使用したのはcocos2d for iPhone v0.8。
[手順0. その前に]
実は、単純に静的ライブラリを作ってもiPhoneシミュレータとiPhone実機両方で使用することができない。というのはiPhoneシミュレータとiPhone実機のアーキテクチャ(ハードの構造)が異なるためである。したがって両者で動くようなライブラリを作るのには一工夫必要となる。
[手順1. iPhoneシミュレータ用静的ライブラリを作る]
- とりあえずiPhoneシミュレータ用を作る(iPhone用が先でもかまわない)。cocos2dプロジェクト内に新規Static Libraryを追加(ターゲット追加 > 新規ターゲット > Cocoa touch Static Library)、名前を”cocos2d-simulator”とする(名前はシミュレータ用であると自分でわかればなんでもよい)。
- 必要なファイル(cocos2dだけであればcocos2dフォルダ内のファイル一式)をターゲット配下に追加する。具体的には「ヘッダをコピー」にヘッダファイルを、「ソースをコンパイル」にソースファイルを、「バイナリをライブラリにリンク」に使用フレームワーク(Foundation, UIKit, CoreGraphics, OpenGLES, QuartzCoreの5種類)を追加する。
- ターゲット情報のアーキテクチャの項目のベースSDKを”iPhone Simulator 3.0″にする(バージョンはお好みで)。
- ターゲットを”cocos2d-simulator”にしてビルドするとbuild配下に”libcocos2d-simulator.a”が出来ている(シミュレータ用静的ライブラリ完成)。ReleaseバージョンやDebugバージョンなどはお好みで。


[手順2. iPhoneOS用静的ライブラリを作る]
上記シミュレータ用ライブラリ作成手順とほぼ同じ。
- cocos2dプロジェクト内に新規Static Libraryを追加、名前を”cocos2d-iphoneos”とする(名前は適宜)。
- ターゲット配下に必要なファイルを追加する(内容は上記シミュレータ用のものと同様)。
- ターゲット情報のアーキテクチャの項目のベースSDKを”iPhone Device 3.0″にする(バージョンはお好みで)
- ターゲットをビルドして”libcocos2d-iphoneos.a”を作成(iPhone用静的ライブラリ完成)。
[手順3. 上記二種類の静的ライブラリをマージする]
“lipo”と呼ばれるコマンドラインツールがマージをしてくれる。詳細はiPhone OS用のほぼFrameworkの作り方やHow to (almost) create your own iPhone OS frameworkが詳しい。
- cocos2dプロジェクト内に新規Shell Script Targetを追加する(ターゲット追加 > 新規ターゲット > Other > Shell Script Target)、名前を”cocos2d-0.8″とする(名前は自分で識別できれば何でもかまわない)。
- ターゲット配下の”スクリプトを実行”に以下のコマンドを記述する。コマンドを注意深く見てもらえばわかると思うが、シミュレータ・iPhone用のライブラリ名は自分が作成したものに適宜変更する必要がある。マージ後のライブラリ名はお好みで。
- ターゲットを”cocos2d-0.8″に設定してビルドするとマージされた静的ライブラリが作成される。上記のコマンドの例だと例えば”build/Release-iphoneos/libcocos2d-iphoneos.a”と”build/Release-iphonesimulator/libcocos2d-simulator.a”のファイルをマージして”build/Release-iphoneos/cocos2d-0.8-Release.a”が作成されることになる。マージされたライブラリはシミュレータでもiPhone実機でも使うことができる。

rm -rf build/${BUILD_STYLE}-iphoneos/cocos2d-0.8-${BUILD_STYLE}.a
lipo -create "build/${BUILD_STYLE}-iphoneos/libcocos2d-iphoneos.a" \
"build/${BUILD_STYLE}-iphonesimulator/libcocos2d-simulator.a" \
-output "build/${BUILD_STYLE}-iphoneos/cocos2d-0.8-${BUILD_STYLE}.a"

[実際の使用方法]
上記手順でシミュレータでもiPhone実機でも使える静的ライブラリ”cocos2d-0.8-Release.a”ができているとする。このファイルだけでcocos2dが使えるのかと思いきや、ヘッダーファイルの実態への参照を用意しなくてはいけない。具体的には以下の二点の作業を行えばプロジェクト内でcocos2dが動作する。
- プロジェクトに”cocos2d-0.8-Release.a”を(例えばFrameworksの項目に)追加。
- プロジェクト情報のヘッダ検索パスにcocos2dプロジェクト全体を追加(ファインダーからドラッグでok)。ヘッダーファイルのあるcocos2dフォルダだけでもよい(要はどこにcocos2dに関係したヘッダーファイルがあるかXcodeに教える必要があるというだけである)。ヘッダ検索オプションの”再帰的”にチェックを忘れずに。

Related posts:
Title Link
Trackback URL
Comments
Leave a Reply


