非推奨のメソッド
これらのメソッドが非推奨になる前にリリースされた iOS バージョンをターゲットにしている場合は、非推奨のメソッドを使用できます。ただし、展開ターゲットが正しく設定されていると仮定すると、対象となるバージョンで非推奨のメソッドが常に非推奨でない限り、コンパイラ エラーは発生しません。つまり、コードに非推奨の警告が表示されている場合は、それらを修正するか、展開ターゲットの設定が正しいことを確認する必要があります。それらを無視しないでください!
Xcode 設定レベル
ターゲット レベルとプロジェクト レベルの両方で展開ターゲット設定を定義できるという事実に言及しています。ターゲット レベルの Xcode ビルド設定は、プロジェクト設定をオーバーライドします。したがって、これらのレベルのいずれかでのみ展開ターゲットを定義してから、他のレベルに移動して削除を押して、値が重複しないようにします。ターゲットが 1 つしかない場合は、それをターゲット レベルで定義するか、プロジェクト レベルで定義するかは問題ではありません。
後方互換性と前方互換性
最後に、後方互換性と前方互換性には多くの要因が関係しています。supportedInterfaceOrientations
古い iOS バージョンでは単に無視されるような新しい iOS 6 メソッドがある場合があります。明示的なチェックを追加する必要がある場合もあります。
オブジェクトのメソッドを呼び出していて、そのメソッドが iOS 6 でのみ導入された場合は、次のrespondsToSelector:
ようなチェックを追加する必要があります。
// only available on iOS 6
if ([locationManager respondsToSelector:@selector(pausesLocationUpdatesAutomatically)]) {
locationManager.pausesLocationUpdatesAutomatically = YES;
}
特定のクラスが現在の iOS バージョンに存在するかどうかを確認したい場合は、次のように +class メソッドの戻り値を確認できます。
// Only available on iOS 6
if ([UICollectionView class]) {
// ...
} else {
// class doesn't exist in this iOS version
}
特定の関数が利用可能かどうかを確認したい場合は、単純な if ステートメントを実行します。
// Only available in iOS 6
if (ABAddressBookCreateWithOptions) {
ABAddressBookCreateWithOptions(...);
} else {
ABAddressBookCreate(...);
}
最後に、定数が利用可能かどうかを確認する場合は、そのアドレスを確認します。
// Only available in iOS 4
if (&UIApplicationProtectedDataDidBecomeAvailable) {
// subscribe to notification
}
Base SDK 設定は常に「最新」に設定する必要があります。
これらすべてのガイドラインに従えば、明示的なバージョン チェックを追加しなくても、ほとんどの問題を解決できます。iOS のバージョンまたはデバイス ID の確認は非常に脆弱であり、将来のバージョンでアプリが機能しなくなる可能性があります。あなたは本当にそれを避けたいです。