先日リリースしたBanner 1.5.2について、iPhone 3Gで三角形みたいに歪んでいる、というメールあり。何それ?と思いながら確認しても、特に異常はなさそう。そもそもサブミット前にiPhone 3Gでもチェックしている…とここまではXcodeでの話。もしや!と思ってiPhone 3GでApp Storeからダウンロードしてインストールして起動すると、しっかり歪んでました。歪むと言うよりグルグル斜めに廻っている感じ。でも、もう一度Xcodeから実行すると正常に表示される。しかも4Sなど他のiPhoneではApp Storeのアプリでも問題がない。謎!
原因はXcodeのオプティマイザでした。オプティマイザは実行速度が速くサイズが小さくなるようにコードを最適化してくれる。ところが、iPhone 3Gに対して(arm6に対して)はオプティマイザがお馬鹿さんらしく、変なコードになる場合があるらしい。そして、開発中に使うDebugビルドはオプティマイザがオフだけど、App Storeへのサブミットに用いるReleaseビルドではオプティマイザがオンになる。つまり、オプティマイザが馬鹿とは言え、Releaseビルドで動作確認をしなかった私が愚か者でした、ってワケ。
ちなみに、DebugビルドかReleaseビルドかは、Schemeポップアップ・メニューから「Edit Scheme…」を選び、Build Configurationで指定する。これをReleaseにしてRunすれば、App Storeからダウンロードするアプリと同じ状態になる(はず)。なので、アプリの最終動作確認はReleaseビルドで行うべし、ですね。ただし、Releaseビルドではデバッグ情報もなくなるので要注意。デバッグが必要であれば、Debugビルドのままターゲットの設定でオプティマイザだけをオンにする。
さて、オプティマイザがiPhone 3G用にどのようなコードを生成しているかまでは分からない(調べるのは大変)。そこで、あれこれソースコードを書き換えて、オプティマイザがオンでも正常動作するよう修正する。半ば手探りだけど、今回は表示なので見当を付けやすい。オプティマイザが間違えようもない(と思われる)馬鹿丁寧な処理にして解決。
と言う訳で、修正版のBannerをサブミットしていますので、iPhone 3Gユーザの方は今しばしお待ちください。ご迷惑をおかけして、申し訳ありませんでした。
【追記】ってことは、AppleはiPhone 3Gで動作確認していない、ってこと?
ピンバック: 初めての自作iPhoneアプリ、2回目のリジェクト | pc-memo