「iPhone OS 2.2.1でも動く3.0アプリ その1」、「iPhone OS 2.2.1でも動く3.0アプリ その2」と書いてきて、今回が最終回の「2)iPhone OS 3.0で新しく追加されたクラス(フレームワーク)を使いたい。」場合のやり方です。
ポイントはフレームワークのウィークリンクです。
例えば、iPod Libraryを使う機能を利用する場合、MediaPlayerフレームワークを追加する必要がありますが、通常追加した場合はRequired(必須)フレームワークと追加され、iPhone OS 2.2.1では動かないアプリになってしまいます。
そこでまずはWeakに設定を変更する必要があります。
プロジェクトのターゲット項目の「バイナリをライブラリにリンク」欄を選びます。
次にiPhone OS 3.0上で実行された時にのみ使用するフレームワークを「Weak」に設定変更します。
これで準備はOKです。
あとは、使いたいクラスがあるかを実行時に判定して、iPhone OS 2.2.1で実行されているか、iPhone OS 3.0上で実行されているかを判断します。
例えば、MPMediaPickerControllerを使いたい場合は、以下のようなコードで判定します。
Class controller = NSClassFromString(@”MPMediaPickerController”);
controllerがnilならiPhone OS 2.2.1、nilで無ければiPhone OS 3.0で実行されていることになります。
あとはそれぞれのOS向けの機能を実行するようにプログラムを組むだけですが、UITableViewCellなど、iPhone OS 3.0でDeprecatedになったメソッドがあるクラスもあるので、iPhone OS 2.2.1と3.0で処理を変えるクラスは、Factoryパターン(※)で作っておくと、将来的にメンテナンスしやすいかも知れません。
ビルドに関する部分(プロジェクト設定など)は、「iPhone OS 2.2.1でも動く3.0アプリ その2」と同じです。
今後もiPhone OSはバージョンアップされてくのは確実で、下位互換が無いようなバージョンアップもあると思うので、以上の方法は覚えておいて損は無いと思います。
※iPhoneアプリ開発に関する投稿を今から始めるiPhoneアプリ開発にまとめました。
最近のコメント