読者です 読者をやめる 読者になる 読者になる

夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

cocos2d 2.1を2.2にバージョンアップして恐怖の64bit対応 (続編)

cocos2d TravelShooting JP

さて、前回行った、TravelShooting JPの64bitプロセッサへの対応ですが、問題もほとんど出ずに完了したので、本当に64bitで動作しているのか不安になってしまいました。

前回の記事:tf.hateblo.jp

今回は、64bit版のプログラムで動作している事をこの目で確認して安心したいと思います。
検証にちょうど使えそうなのが、桁溢れのバグがある事を知っていながら、恐らく実用上は問題が出ないはずなのであえて直す予定のない累計スコア表示用のプログラム。
累計スコアは、今度リリースされるバージョンで追加実装したコスチューム変更画面で表示されます。tf.hateblo.jp

NSUserDefaultsに入れたり出したりする関係上、累計スコアはNSIntegerの変数に入れています。
NSIntegerは、32bit CPUでは32bitなのに対し、64bit CPUでは64bitに変更されています。
従いまして、32bit CPUでは2147483647が最大値でそれ以上の数はオーバーフローしてマイナスの値になってしまうのに対し、64bit CPUではそれ以上の数値を表現することが可能です。

iPhone 6シミュレーターで、まずは64bit対応前のコードで実験してみます。

まずは、最大値より1000小さいINT32_MAX - 1000を初期値として入れておきます。
f:id:takujidev:20150524204236j:plain

その状態からゲームをプレイし、累計スコアを更新します。
f:id:takujidev:20150524204350j:plain

想定通り、累計スコアがマイナスになり、新コスチュームが選択不可能になってしまいました。

次に、64bit対応後のコードで同じ事を行います。

初期値を入れた状態からプレイして累計スコアを表示してみると...
f:id:takujidev:20150524204721j:plain
NSIntergerがしっかり64bitになっているようで、累計スコアがINT32_MAXを超えています。

実機で確認できない不安要素は残ったままですが、とりあえずiPhone 6シミュレーターでは64bitのコードが正しく動作しているようです。

さて、次に気になるのが、アプリのサイズ。64bit用のコードが追加されるのでアプリのサイズはこれまでより大きくなるはずです。
画像や音声ファイルに比べアプリのサイズ全体に占めるプログラムコードの割合は小さいと思いますが、やっぱり気になります。

AppStoreでの概算のサイズを見るため、アーカイブしてXcodeのOrganizerでサイズを確認します。

64bit対応前のバージョン1.2.0は約21.6MB。
f:id:takujidev:20150524205407p:plain

64bit対応後のバージョン1.2.1は約24.5MB。
f:id:takujidev:20150528201138p:plain

3MB程度の肥大化なので、気にするほどではなさそうです。