【cocos2d】cocos2dプロジェクトをARC対応にする
追記:Xcode5だとここに書いてある方法ではは上手く行かないみたいなので、もっと簡単なこちらのリンクに書いてある方法をオススメします。
【cocos2d】Xcode5で新規cocos2dプロジェクトを一番簡単にARC対応にする方法 - 夏までにiPhone アプリつくってみっか!
久々に新しいXcodeプロジェクトファイルを作成しました。
今回はcocos2d/Box2Dのテンプレートを使い、スタティックライブラリによるARC対応を行いました。この方法はLearn cocos2d 2: Game Development for iOSに書かれている方法で、ほんの著者のサイトのこのページでも詳しく紹介されています。
1. テンプレートからプロジェクトを作成する
今回は物理演算エンジンを使ってみたかったのでcocos2 iOS with Box2dを使用しました。もちろん他のテンプレートでも大丈夫です。
2. libsフォルダーを削除する
libsフォルダーの上で右クリックメニューからDeleteを実行します。ポップアップウィンドウではRemove Referencesを選び参照だけを削除します。
3.Targetを追加する
Xcode左のナビゲーターペインの一番上の行(下記の例では青いアイコンがあるPhysicsGameの部分)を選択すると出てくるプロジェクト設定画面左下の+Add Targetボタンを押します。
出てくるウィンドウ左側、iOS/Framework&Libraryを選ぶと出てくるCocoa Touch Static Libraryを選択し、Nextを押します。
4. Static Libraryに名前を付ける
cocos2d-libraryと名前を付けFinishボタンを押します。名前は何でもかまいません。
5. 追加したターゲットのビルドセッティングを変更
プロジェクト設定画面左のTargetsにcocos2d-libraryという項目が追加されているのでそれを選択します。Build SettingsタブのSearch Pathsの一番上のAlways Search User PathsがNoになっているのでYesに変更し、User Header Search Pathsの項目に./**と入力します。入力完了後./**/**となっていたら修正する。
6. 元からあったターゲットにライブラリーをリンクする
cocos2d-libraryでない方のターゲット(この例の場合はPhysicsGame)を選択し、Build PhasesのLink Binary With Librariesの項目を開き小さな+ボタンを押します。
ライブラリーの選択画面が出ます。一番上のlibcocos2d-library.aを選択し、Addを押します。
Link Binary WithLibrariesの中に追加されます。赤色で表示される場合もありますが、特に問題はないようです。
7.cocos2dのファイルをcocos2d-libraryターゲットに追加する
XcodeのFileメニューからAdd Files to "プロジェクト名"を実行します。
ファイル選択画面になりますので、プロジェクトフォルダ内のlibsフォルダーを選びます。
Copy items into destination group's folder (if needed)のチェックを外し、Create groups for any added foldersを選択。Add to targetsではcocos2d-libraryだけにチェックを入れ、Addボタンを押します。
これでスタティックライブラリーの設定は完了です。
8. プロジェクトをARC対応にリファクターする
Edit > Refactor > Convert to Objective-C ARC...を実行します。
コンバートするターゲットはスタティックライブラリーでない方を選択します。
説明画面でNextを押します。
数秒待たされます。
変更点が表示されます。多分問題ないはずなのでSaveを押します。
自動的にスナップショットを取るようにするかどうか聞いてきますので、お好きな方を選んでください。Enableにしておけば安心です。
9. トラブルシューティング
その1
iOS 5.0シミュレーターでテンプレートのサンプルプロジェクトを実行してみるとエラーが発生しました。6.0や6.1だと問題ありません。
cocos2d: Using Director Type:CCDirectorDisplayLink dyld: lazy symbol binding failed: Symbol not found: _objc_setProperty_nonatomic Referenced from: /Users/Myname/Library/Application Support/iPhone Simulator/5.0/Applications/86A06456-63A8-4C08-A5EA-7862381344D4/PhysicsGame.app/PhysicsGame Expected in: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Foundation dyld: Symbol not found: _objc_setProperty_nonatomic Referenced from: /Users/Myname/Library/Application Support/iPhone Simulator/5.0/Applications/86A06456-63A8-4C08-A5EA-7862381344D4/PhysicsGame.app/PhysicsGame Expected in: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/Foundation.framework/Foundation
この場合は、iOS Deplyment Targetを確認してください。
プロジェクトのiOS Deployment Targetが5.0になっていても安心できません。
cocos2d-libraryターゲットの方のBuild Settingsの方も5,0にしてあげる必要があります。
その2
実機で実行するとこのエラーが出ることがありました。
cocos2d-library was rejected as an implicit dependency for 'libcocos2d-library.a' because its architectures 'armv7' didn't contain all required architectures 'armv7 armv7s'
この場合は、cocos2d-libraryターゲットのBuild Active Architecture OnlyのDebugの方がデフォールトでYesになっているのでNoにすると解決できました。Yesのままで問題ない場合もあるので少し謎です。
その3
Retina機種でテンプレートプロジェクトを実行を実行すると上から落ちてくるブロックの表示が変になりますがこれは気にしなくても良いようです。
AppDelegete.mmのRetina設定の部分をNOにすると本来の姿が拝めます。
// Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices if( ! [director_ enableRetinaDisplay:NO] ) CCLOG(@"Retina Display Not supported");
BeeClusterをレビューにSubmitしてからまる1週間が経過しましたが、絶賛Waiting For Review状態となっております。結構長く待たされるものなんですね。