これはiOSの複数のバージョンのサポートに関するかなり一般的な質問であり、iOS6固有のもの(NDAでカバーされている)をカバーしていないので、ここに私の答えがあります:
6.0のデプロイメントターゲットを使用してアプリを再コンパイルしてビルドし、AppleがiOS6用のGMをリリースするときに非推奨のメソッドなどの既知の問題をすべて修正した場合、ビルドはコンパイルされてiOS5デバイスでも動作しますか?
原則として、はい、そうです。iOS6のみの機能を使用していないか、適切に使用している場合に限ります(3番目の質問の回答を参照してください)。ただし、iOS5 / 4(またはシミュレーター)を実行している実際のデバイスに対してテストすることは、物事が正しく機能することを確認したい場合はほとんど必須です。
古いiOSバージョンで現在動作しているものがiOS6で壊れてしまう可能性もあります(これは、いくつかのバグが追加された場合に発生する可能性がありますが、いくつかのバグが修正され、コードに前者の影響に対抗する独自のもの)。したがって、テストが王様です。(これに関するrsswtmrのコメントに感謝します)。
デプロイターゲットが5.0のアプリを送信するだけでよいですか、それともiOS6で実行できませんか?
アプリがiOS6のみの機能を使用しない場合は、5.0のデプロイターゲットを指定できます(または、正しく実行する場合は、後で読みます)。言い換えれば、この設定はiOS6との互換性を損なうことはありません。
新しいiOS6機能を使用している場合、展開ターゲットはiOS6のみにする必要がありますか?
それは可能ですが、それが唯一の方法ではありません。
デプロイターゲットをiOS6として指定すると、アプリでiOS6のみの機能を問題なく自由に使用できます。アプリストアの仕組みにより、アプリが古いデバイスにインストールされるのを防ぎ、安全になります。
一方、展開ターゲットをiOS5以前として指定した場合でも、アプリでiOS6のみの機能を使用できますが、iOS6のみの機能の使用を「保護」することで、古いバージョンのiOSを適切にサポートする必要があります。 iOS5のフォールバックを提供します。
これは、次のことを意味しますfeatureA
。iOS6でのみ使用可能であると言います。あなたができることは:
機能が実行時に利用可能かどうかを確認します(たとえば、クラスrespondsToSelectorなど)。
#ifdef
可能な場合にのみコンパイルされるように、コードを内部で保護します。
1.のチェックが失敗する場合は、古いiOSバージョンの解決策を定義します。
複数のiOSバージョンのサポートに関するこの投稿をご覧ください。