【cocos2d, Objective-C】Cocos2でARCを使う。ハマりましたー!
cocos2dを使って早速iPhone用オリジナルゲームのテストプログラムを作ろうとしたところ、早速ハマってしまいました。
cocos2dを使用するアプリでARCを使用可能にする方法はいくつかあるようですが、
Learn Cocos2d 2: Game Development for Iosの著者がお勧めする方法はスタティックライブラリーを使用する方法。スタティックライブラリーが何かという事はさておき
、早速本に書かれているとおりに実践し、iOS6.1シミュレーターで動かしてみるとばっちり動きます。ちなみにこのやり方は著者のサイトに書かれていますで、興味がのある方は試してみてください。
そして、念のためiOS5.0シミュレーターでも動かしてみると、クラッシュ!
dyld: lazy symbol binding failed: Symbol not found: _objc_setProperty_nonatomic
というエラーログが残っています。
何だこれは!という事で検索してみると、先ほどのサイトにヒット。コメント欄に解決策が載っていました!
If one tries to run it under 5.0 or 5.1 it will crash
and it will show the following fatal error
dyld: lazy symbol binding failed: Symbol not found: _objc_setProperty_nonatomic
To fix this one needs to change 1 setting.
Select the project -> Under Targets Select cocos2d-library -> Under Build Settings find “iOS Deployment Target” by default this is set to iOS 6.0 -> Change it to iOS 5.0
どうやら一つ設定を変えればいいようです。助かったー!
TARGETSからスタティックライブラリとして追加したcocos2d-libraryを選択し、Build Settingsタブの中のiOS Deployment TargetをiOS5.0に修正。
プログラムを実行するとシミュレーター画面にHello Worldの文字が。
こんなにうれしいHello Worldは見た事がありません。
しかし、いざiPhone実機で動かそうとすると今度は別の問題が!
cocos2d-library was rejected as an implicit dependency for ‘libcocos2d-library.a’ because its architectures ‘armv7′ didn’t contain all required architectures ‘armv7 armv7s’
というエラーメッセージが表示され、止まってしまいます。
そして、この問題もコメント欄にヒントが書かれており無事解決しました。
解決方法は次の通りです。
TARGETSからcocos2d-libraryを選択、Build SettingsのBuild Active Architecture Onlyの中のDebugの項目がYesになっていたのでこれをNoに変更。
iPhone上でアプリを実行する事ができました!
これでようやくプログラミングをはじめられます。