開発環境を凍結退避していたため,時刻表管理アプリのRide on Timeのアップデート作業はもとよりiOS4対応も後手に回っていた。
Xcode3.2.3最終版もダウンロードし,ハードディスクの空きも確保したので,開発環境を再構築。アプリのiOS4対応作業を始めた次第である。
基本的には新しいSDKでコンパイルすることでiOS4向けアプリになる。
ただし,環境引越しのための作業が伴う。
・ライブラリの検索パスを再設定
・ベースSDKなどの再設定
新しいXcodeでは,開発用のプロビジョニングコードを自動取得する機能が追加されているので,従来のようにWebから自分で取得する手間が省けるようだ。
もっとも証明関係は従来通りと思うけれど,これは以前のものを継続使用しているので実際がどうかは試しておらず分からない。
さて,問題はアプリのソースコード側の対応である。
--
■AdMob
Ride on TimeをiOS4対応するにあたって,まず最初に直面した問題はアプリ内広告のAdMob部分であった。
現行配信版をリリースしてから数ヶ月が経過しているが,その間にもAdMob部分自体がアップデートを繰り返しており,メソッドの仕様が変わっていた。
iOS4向けに新しいAdMobライブラリに差替えた上で,変わっている仕様に合わせてソースコードに修正を加えた。具体的な作業はメソッド名の変更や廃止になったメソッドの削除などであり,それほど難しいものではなかった。
ただ,iAdの登場によってAdMobを使い続けることが逆風になるのは心配だなと思う。そもそもiAdはiOS4以降のみ対応なので,iPhone OS3.1系のサポートをどう考えるかも関係する。
--
■UIScrollView Delegate
手作業で時刻表を入力するため,60個の分ボタンが表示される画面を24時間分用意して,スワイプ移動できるインターフェイスを採用している。
これを実現するために参考にしたのは『iPhone SDKアプリケーション開発ガイド』(オライリー)の第13章「ページフリック」だった。
これをアレンジして使用していたが,SDK4でコンパイル後,iOS4上で動かすとデリゲートメソッドのscrollViewDidEndScrollingAnimationが意図しないタイミングに繰り返し呼び出されるようになっていた。必要の無いタイミングに呼ばれれば,動作も意図した通りにはならない。
最初はありがちなdelegate設定の不備かと思ってあれこれ調べたが,改善される気配は無し。デバッガで追いかけてみるとUIScrollViewInternalから飛んできていることは分かるが,勝手に呼ばれても困る...
似たような問題に困っている人もいるようだけれど,どうも根本的解決策は示されていないようだ。(How to determine if UIScrollView crash is in my code or Apple's?)
少なくとも3.1.3上では問題なく動作しているのであるから,OS側の挙動が変わったことだけは確かというわけである。
実のところ,UIScrollView絡みは他にも不明な点がいろいろある。もしかしたらiPhone4解像度の関係で,表示座標系の何か処理が足りないせいかも知れないが,情報が不足している。
--
■CoreDataとTableView
Ride on Timeは時刻表データをCoreDataにストアして管理している。
iPhoneはここから読み出したデータをTableViewに簡単に表示できるようになっていて,その辺は楽ちんしている。
ただ,どうもデータをFetch(取得)しようとするときの挙動が変わってしまっている。
普通は取得する際のソート順を指定できるので,別途ソート・ディスクリプタというもので順番を指定することでTableViewにもその順番が反映できる。セクションも基本的にはその指定に準じている。
ところが,iOS4上だと,セクション名が(時刻の)数字であったためか,セクション部分を勝手にソートして並べ替えてしまうみたいなのだ。
そのため,ソート・ディスクリプタの順とセクションの順に食い違いが起こって,ズレた表示になってしまう。なんだこれは...。
楽ちんしたのが裏目に出た格好。インデックスに使うデータの中身を確かめて,正しく並べ替えるか,それとも全角文字でセクション名を付ければソートされずに済むかも知れないので,後日実験してみることにする。
--
■iOS4.01と4.1
ところで,ここ数日でiOS4がアップデートしたりしている。
何か変化はあるかなと期待して動かしてみたが,上記の問題については変化無し。まだまだ今後のバージョンアップで改善改良を積み重ねなければならないようだ。
iOS4への変化は,2→3と違って,かなり大掛かりな変化だと思うので,細部の挙動についてはこれから調整に入るのではないかと思う。OS開発チームは大変だなぁと,ちょっと心配な気持ちも膨らむ。
--
こうした問題に対処する作業は少しずつしたいとは思うものの,時間がかかりそうなので,とりあえずiOS4のアプリ切り替えに対応するレベルでAppStoreに申請することにした。
細かい問題は残っているとはいえ,アプリ切り替えに対応するだけでも,時刻表アプリはかなり使いやすくなる。まずは大きなメリットの方を享受しよう...。
コメントする