« 盆灯篭アプリ公開 | トップページ | HyperTalk的Swiftの解釈 »

Xcode、シミュレーター、実機、メモリリーク

 なんかSEOのタグ付けみたいな題名になってしまいました。
 要は、「シミュレータでは動くのに、実機で試したらメモリリークが起きて起動できなかった。実機テストが重要なのはわかってるけど、さりとていくつも実機を用意するわけにもいかず」という話です。

 このアプリはシミュレーターでは主にiPhone XRで、実機は自前のiPhone SEでテスト、iPadはシミュレーターのみで行っていました。
 ただiPadは、もし安いのがあれば、今回設定iOSの一番古いバージョンである9.3が動く古いのを手に入れてもいいかな、とも。
 ネットで調べると、iOS9.3の3rd gen.が一万円ほど。 え?高くない? と思いつつ、ポイントを使い倒して支払い5千円ほどにしました。 ちょっと勿体無い買い物だったなぁと思いつつ、Xcodeに登録して実機で走らせると...
 スタートアップが一瞬垣間見えた後、画面が真っ白になって異常終了。

 おりょ?

 なんどやっても同じで、あ〜、もう完成したと思ってたのにぃ。 所詮私の人生こんなもん。 としばし絶望。
 が、ここまで来て諦めるのも悔しい。
 と、今度はiPad実機を接続したXcodeを眺めながら何度もトラブルを再現することに。 すると使用メモリが一時1GBを超えることに気づきました。 そのあとは数百MBに落ち着くので、もしやと思い、ネットで今度はiPadの搭載メモリを検索。
 すると3rd.gen.は1GBだと判明。 
 アプリ自体のサイズは二十数MBだし、考えられる原因といえばこれか、と考えを巡らすことに。

Memory

 一旦1GBを超えたあとは一気に落ち着くことを考えると、立ち上がり時の問題、例えば読み込みに問題がある可能性が高く、デフォルトでbackgroundに銀河の写真を設定したことに気づきます。 まぁ、その方が見栄えもいいし。
 SceneKitの仕様で、立体を取り巻く周囲の画像は、仮に視覚固定で一方向しか要らないときでも正六面体で包む仕様となっています。 ただ、少しでも画像容量少なくするために背景以外の5面は真っ黒にして圧縮が効くようにしてありますし、せめてもの対策としてPNG24からPNG8にしてみるも改善せず。

 ん〜、とさらに検索すると、
scene.background.contents = UIImage(named:"xxx.xxx")
 という命令を発見。

 あ、ならば、とGUIの方でデフォルトはblackにし、ボタンを押すことで銀河の画像に切り替えるよう変更。
 するとこれが功を奏して、無事実機iPadでも立ち上がるようになりました。

 でこのbackground、さらに面倒なことに、iOS9.3では表示されないこともこの実機で判明。
 おかげでアプリの紹介文にはその旨書き加えることができて、めでたしめでたし。

 ではないのである。
 確かに今回はたまたま助かったものの、全対象デバイスを実機で試すのは不可能。 が、非常に重要。
 もちろん世の中にそういうテストをする業者があるのは知ってるものの、そもそもそんな大掛かりなものじゃないし、さりとて例え120円でも買ったわ立ち上がらんわ、となったら批判爆発でしょうから、それも避けたいし、いや、そもそも余ったiOSデバイスで仏壇のお飾りをと思ったから仕方ないとはいえ、古いiOS、イコール古い端末を相手にするのはほどほどに、ということでしょうかね。

|

« 盆灯篭アプリ公開 | トップページ | HyperTalk的Swiftの解釈 »

iOS と Xcode」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 盆灯篭アプリ公開 | トップページ | HyperTalk的Swiftの解釈 »