最新のリリース ノートでは、4.2.1 以前はサポートされないことが示されています。古いデバイスをサポートする場合、開発には 2 つのバージョンの Xcode を使用する必要があります。iOS6 を開発し、4.2 以下をサポートする場合、これは古いデバイスをサポートするのが難しくなります。
Xcode 4.4 が iOS6 をサポートするとは思わない。これが問題です。開発者は、これらのプラットフォームをそれほど手間をかけずに簡単にサポートするにはどうすればよいでしょうか?
最新のリリース ノートでは、4.2.1 以前はサポートされないことが示されています。古いデバイスをサポートする場合、開発には 2 つのバージョンの Xcode を使用する必要があります。iOS6 を開発し、4.2 以下をサポートする場合、これは古いデバイスをサポートするのが難しくなります。
Xcode 4.4 が iOS6 をサポートするとは思わない。これが問題です。開発者は、これらのプラットフォームをそれほど手間をかけずに簡単にサポートするにはどうすればよいでしょうか?
これを行うことはできますが、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
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 つの選択肢があります。
Xcode で直接サポートされているものを超えることに慣れている場合は、Nate の回答を参照してください。
iOS 4.2.1 のサポートが終了したことは、中心的な問題ではないと思います。実際、私はこれを回避して次のことを試みました。
ただし、インストールは失敗します。ここでの理由は - 私の知る限り - 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 では使用できないため、これはできません。右?
iOS 5 をサポートしていないデバイスは初代の iPhone と iPhone 3G だけです。iPhone 3G は現在 4 年間使用されています。iOS 4 のサポートを中止することを検討することもできます。そうしたくない場合は、2 つの異なるバージョンの Xcode で開発する必要があると思います。
を使用してプロジェクト設定を手動で設定してみてくださいIPHONEOS_DEPLOYMENT_TARGET=4.0
。ただし、副作用があるかどうかはわかりません。
iOSバージョンの統計によると、4.3をターゲットにするのが最良の選択だと思います