これでは、これまで培ってきた 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 件のコメント:
コメントを投稿