11

Apple Developer フォーラムで、この質問に対する正確な回答を見つけることができませんでした。

他の Apple 開発者と同様に、iOS6 デバイスをサポートするようにアプリをアップグレードします。iOS6 SDK をサポートする XCode 4.5 をダウンロードしました。

ただし、この XCode ビルドを使用してアプリのバージョンをアプリ ストアに送信できないことは理解しています。

  1. 6.0 のデプロイメント ターゲットを使用してアプリを再コンパイルおよびビルドし、Apple が iOS6 用の GM をリリースしたときに非推奨のメソッドなどの既知の問題をすべて修正した場合、どのビルドもコンパイルして iOS5 デバイスでも動作しますか?

  2. 展開ターゲットが 5.0 のアプリを提出するだけでよいですか、それとも iOS6 で実行できませんか?

  3. 新しい iOS6 機能を使用している場合、展開ターゲットは iOS6 のみにする必要がありますか?

(混乱している)。

4

2 に答える 2

14

これは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でのみ使用可能であると言います。あなたができることは:

  1. 機能が実行時に利用可能かどうかを確認します(たとえば、クラスrespondsToSelectorなど)。

  2. #ifdef可能な場合にのみコンパイルされるように、コードを内部で保護します。

  3. 1.のチェックが失敗する場合は、古いiOSバージョンの解決策を定義します。

複数のiOSバージョンのサポートに関するこの投稿をご覧ください。

于 2012-09-04T09:02:21.943 に答える
4

"Base SDK" を最新の iOSに設定し、"iOS Deployment Target" をサポートする予定の古いバージョン (たとえばiOS 5.0 ) に設定します。

サポートされている古い iOS でクラッシュすることなく、最新の iOS で利用可能な機能を使用するための条件付きコードを追加します。

この Apple ガイドの「条件付きコーディング」セクションが役立ちます。SOの件名に関する他の質問も確認してください。

于 2012-09-04T09:11:52.800 に答える