2010年6月27日日曜日

iOS4対応: 下位互換にする方法

iOS4SDKを入れてXcodeを使うと選択可能なOSが、3.2 と 4.0 だけしか無い!
これでは、これまで培ってきた 3.0以上(未満の方には申し訳ない)を放置することになる。

アップデートを控えていたため、翌日には 3.2SDKに戻した。

その後、ドキュメントを正しく見ると、互換性確保の方法があったのでメモしておく。
  • Xcodeプロジェクト設置にて
  • ビルド>Deployment>iPhone OS Deployment Target が下位OSになる
  • ビルド>アーキテクチャ>ベースSDK が上位OSになる
これだけなら簡単。しかし、ここからが肝心、

下位OSの指定は、単に「このOS以上で動くハズです」と言うだけのようだ。
つまり、下位OS上で動いても問題が生じないようにするのは作者の役目。

例えば、下位OSに備わった機能だけを使っていれば問題はない。
しかし、下位OSより後に追加された新機能を使った場合に問題が生じる。

これを回避するためには、コンパイル時の「条件付きコンパイル」ではダメ
どのOSで実行されても大丈夫なように「実行時チェック」が必要。

ただ、実行時リンク(参照)される機能だけならば良いのだが、
現在、困っているのは iAd 対応。

if (NSClassFromString(@"ADBannerView")) {

ADBannerView *ad = [[ADBannerView alloc] initWithFrame:CGRectZero];

[self.view addSubview:ad];

[ad release];

}


NSClassFromStringを使って実行時にADBannerViewクラスの存在をチェクしている。
これを、iOS4で実行すれば正常。
iOS4未満で実行すると実行(起動)時に、iAd.Frameworkが無いとのエラーが表示中断される。
この回避方法が解らない。
解れば追ってメモする。

0 件のコメント:

コメントを投稿