36

最新のリリース ノートでは、4.2.1 以前はサポートされないことが示されています。古いデバイスをサポートする場合、開発には 2 つのバージョンの Xcode を使用する必要があります。iOS6 を開発し、4.2 以下をサポートする場合、これは古いデバイスをサポートするのが難しくなります。

Xcode 4.4 が iOS6 をサポートするとは思わない。これが問題です。開発者は、これらのプラットフォームをそれほど手間をかけずに簡単にサポートするにはどうすればよいでしょうか?

4

6 に答える 6

29

これを行うことはできますが、Xcodeのマイナーなハッキングと犠牲が必要になります。「iOS6をサポートする」の意味によっては、これで十分な場合と不十分な場合があります。アプリをiOS6で実行したいだけの場合は、これでうまくいくはずです。アプリに新しいiOS6機能を組み込む必要がある場合は、必要ありません。

    (Xcodeの複数のバージョンを使用しても問題がない他の人への注意:この同様の質問には、新しいiOS 6 APIを使用して、armv7を直接ターゲットにすることもできる回答があります)

ここでchpwnのブログの基本的な手順を参照してください (ただし、以下の残りの部分も読んでください!)

基本的に、Xcode4.5を使用してiOS4以降用にビルドできますが、新しいiOS6のみの機能を利用することはできません。つまり、実際にはiOS 4と5向けにビルドしており、アプリがiOS 6で正常に動作すると想定しています(これは正しいはずですが、これを自分でテストする必要があります)。

iOS5SDKフォルダーをコピーする必要があります

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.*.sdk

古いXcodeインストールから(簡単に保管するか、非標準の場所に再インストールする必要があります)。次に、ビルド設定のデプロイターゲットをiOS 4.0(または必要な最小OS)に設定します。project.pbxprojこれを手動で設定するには、テキストエディタでファイルを開く必要がある場合があります。

IPHONEOS_DEPLOYMENT_TARGET = 4.0;

armv6また、アーキテクチャをとに設定する必要がありますarmv7。直接ターゲットにすることできませんarmv7s。ただし、それはアプリがiPhone5で実行されないという意味ではありません。実行可能ファイルはiPhone5 armv7で実行され、最適化が追加されていないだけarmv7sです。互換性が他の方向では機能しないというだけです(たとえば、実行可能ファイルはiPhone 3Garmv7で実行されません)。armv6

ここに画像の説明を入力してください

chpwnのブログには記載されていない、必要になる可能性のある手順もあります。次の警告が表示される場合があります(Xcodeは実行可能ファイルを適切に生成しないため、実際にはエラーです)。

警告:アーキテクチャarmv6のタイプsourcecode.c.objcのファイル'$(PROJECT_DIR)/main.m'を処理するルールがありません

これを修正するには、ターゲットのカスタムビルドルールを設定して、XcodeにLLVMGCC4.2を使用してarmv6コードを生成するように指示する必要があります。パターンに一致するファイルのルールを定義します*.[mc]

ここに画像の説明を入力してください

これはXcodeのデフォルトとは異なるコンパイラであり、Objective-Cコードの構文の一部を調整する必要がある場合があります。これを実行したい多くの人はおそらくARCの前にアプリを作成しましたが、LLVMgcc4.2はARCをサポートしていないことに注意することが重要です。

最後に、iOSのデプロイターゲットが4.3未満であり、armv6サポートされていないことについて、Xcodeから警告が表示される可能性があります。私が見つけたそれらは問題ではなく、無視することができました:

ここに画像の説明を入力してください

lipo -infoこの後、アプリの実行可能ファイルで実行すると、目的の結果が表示されます。

lipo -info MyAppName
Architectures in the fat file: MyAppName are: armv6 armv7 
于 2012-10-25T04:29:39.807 に答える
22

Xcode 4.5 により、iOS 4.3 がサポートされている最も初期のオペレーティング システムになり、事実上、元の iPhone と 3G がなくなります。

4.3 より前の iOS バージョンをサポートする場合は、Xcode の 4.4 バージョンを保持する必要があります。

もう少し明確に言うと、4.3 より前のデバイスをサポートし、同じアプリで iOS 6 の機能を使用するのは簡単ではありません (つまり、Xcode はそのままでは使用できません)。これは、iOS 6 の機能には XCode 4.5 が必要であり、iOS 4.3 がサポートされる最小 OS として設定されているためです。

したがって、3 つの選択肢があります。

  1. XCode 4.4 を引き続き使用します。4.3 より前の iOS をターゲットにすることができます。iOS 6 の機能を利用することはできませんが、実際の iOS 6 デバイスで適切なテストを実行すれば、アプリは問題なく動作するはずです。
  2. XCode 4.5 に移行します。4.3 より前の iOS をターゲットにすることはできませんが、iOS 6 の機能を利用することはできます。
  3. 2 つのバージョンのアプリを作成します。1 つのバージョンを XCode 4.4 で (オプション 1 のように) ビルドし、もう 1 つのバージョンを 4.5 で (オプション 2 のように) ビルドします。配布の観点からは、これらは 2 つの別個のアプリになり、それぞれに独自のバンドル ID が割り当てられます。アプリ ストアには 2 つのエントリがあります。

Xcode で直接サポートされているものを超えることに慣れている場合は、Nate の回答を参照してください。

于 2012-09-17T16:34:01.447 に答える
2

iOS 4.2.1 のサポートが終了したことは、中心的な問題ではないと思います。実際、私はこれを回避して次のことを試みました。

  • iOS 6 SDK を使用してアプリをビルドし、デプロイ ターゲットを iOS 4.2.1 (動作) に設定します。
  • アドホック インストール用にアプリをパックし、アプリを iOS 4.2.1 デバイス (iPod touch 2G) にインストールします。
  • アプリをテストします。

ただし、インストールは失敗します。ここでの理由は - 私の知る限り - iOS のバージョンではありません。その理由は建築です。XCode 4.5 では、armv6 用にビルドできなくなりました。armv7 用にのみビルドされます。一方、armv7 以上のデバイスはすべて iOS 5 を実行できます。armv7 をサポートしていないデバイスは、iPhone、iPhone 3G、iPod touch 1G、および iPod touch 2G だけです。

私にとっての質問は、XCode 4.5 と iOS 6 をベース SDK として armv6 用にビルドできますか?

編集: iOS 6 ベース SDK は armv6 では使用できないため、これはできません。右?

于 2012-10-13T13:23:22.043 に答える
2

iOS 5 をサポートしていないデバイスは初代の iPhone と iPhone 3G だけです。iPhone 3G は現在 4 年間使用されています。iOS 4 のサポートを中止することを検討することもできます。そうしたくない場合は、2 つの異なるバージョンの Xcode で開発する必要があると思います。

于 2012-09-17T16:20:00.013 に答える
0

を使用してプロジェクト設定を手動で設定してみてくださいIPHONEOS_DEPLOYMENT_TARGET=4.0。ただし、副作用があるかどうかはわかりません。

于 2012-10-08T10:09:19.063 に答える
0

iOSバージョンの統計によると、4.3をターゲットにするのが最良の選択だと思います

于 2012-09-28T07:07:32.260 に答える