iOSでCocos2dx

macでの実行ファイルの作成、実行にもなんとか成功したこともあって、ついでにiOSでの実行ファイルの作成と転送にチャレンジしてみる。既にSimulatorでの動作は確認しているので、実機さえ認識してもらえればうまくいきそうではある。
ただ、シミュレータ上で正しく動いていなかったところ(mac版とSpriteBatchの挙動が異なる?)のプログラムの見直しは必要になりそう。

あと、そういえばXCode7からiPhoneへの転送が無料になったらしいんだけど本当かな?

実機に転送、しかし「busy processing symbol files」

iPhoneをmacにつないでみる。xCodeでもデバイスを認識しているので早速実行してみるも、あれ?転送に失敗した。よく見ると「Processing symbol files」という表示でプログレスバーが少しづつ伸びている。なんかの作業中かな?

もしかして、お金払ってないから転送してくれないの?できればプロビジョニングファイルとかとの格闘は今は避けたい。

無料じゃないの?

いいえ無料でした。ごめん。プログレスバーが最後まで伸びるのを確認して、再度実行すると、appleIDとの関連を確認されたけど、適当に「OK、OK、fix issue」とかやってたら転送はうまくいった。appleIDが更新されて(fix issueボタンを押す)ちゃんと転送されました。iPhone側でも「設定>一般>プロファイルとデバイス管理」から自作アプリを認証してあげる必要がある。

うまく動かない

しかし、実行するも起動直後にヌルポ参照で落ちた。どうもHelloWorld.pngの読み込みで失敗している。
いろいろ考えられるが、まずはファイル名、大文字小文字の違い、Resourceの当該プロジェクトから除外されてる可能性?などいろいろ探ったが該当なし。
ファイル名についてはBundleフォルダ以下に修正されたパス名で正しく読み込みに行っているのにPNGの解釈で失敗してる。HelloWorld.pngはCocos純正のPNGなので間違いはないはず。申し訳ない気持ちで拙作のPNGに差し替えてみた。

PNG差し替えたら動いた

HelloWorld.pngに問題があった。シミュレーターではうまく読み込めていたのに、実機だと画像ファイルの読み込みでNULLが返されてしまう。

auto sprite = Sprite::create("HelloWorld.png");

ここでNULLが帰ってきちゃう。しかもこの画像ファイルはCocos2Dxの「HelloWorld.png」でmacではうまく動いていたし、iOSシミュレーターでもうまく動いていた。しかし、PNGファイルの解釈のプログラムでASSERTに引っかかってしまう。で、とりあえずの解決方法としては別のpngファイルを読み込ませるとうまく動いた、え!?

macでもiOSシミュレーターでもうまく動いていたのに、iPhone実機だと通らない理由が謎。pngの圧縮率を変えたら動いたという情報もあるが、これと一致しているのかはわからない。とりあえず理由は気になるが先を急ぐ。

どうにか動いた!が・・・

やっぱりシミュレータでの動作と同じく、スプライトがおかしい、macの動作と異なる。マルチプラットフォームのCocos2dxの一番良いところの恩恵が受けられないのが辛い。だいたい理由は想像できるがSpriteBatchの使い方が好ましくない使い方をしているんだろうと思う。

その他はmacでマウスの対応でタッチの代用をしていたが、iPhoneでは当然何も起こらなかった。タッチの取得とかわかりやすそうなところからやってみる。