Xcode 4.2 で iOS 4 用のアプリをビルドする : Objective-C プログラミング

PROGRAM


Xcode 4.2 で iOS 4 用のアプリをビルドする

iOS 5 SDK が搭載された Xcode 4.2 で作成したプロジェクトを、iOS 4.0 対応にしてビルドしたところ、次のような警告メッセージが表示されました。

warning: iPhone apps with a deployment target lower than 4.3 should include an armv6 architecture (current IPHONEOS_DEPLOYMENT_TARGET = "4.0", ARCHS = "armv7").

ちなみに、プロジェクトの対応 OS を変更するには、プロジェクトの "TARGETS" の設定画面を開いて、"Summary" のところで "Deployment Target" の値を調整します。

Xcode 4.2 で作成したプロジェクトを、以前のバージョンに対応させるために、これを "4.0" に変更してビルドした感じですけど、Xcode 4.2 ではこれだけではまだ不十分な様子です。

ビルドされたアプリが実際に iOS 4.3 以前で使用できないかまでは試していないので、確かなところまでは分からないですけど、もし iOS 4 用としてリリースしたアプリが iOS 4 でダウンロードできないようなときには、ここに記した内容を参考にしてみると、何かの助けになるかもしれません。

アーキテクチャを "armv6" に対応させる

警告メッセージに出ている通り、iOS 4.3 以前のアプリを iOS 5 SDK でビルドする場合には、アーキテクチャとして "armv6" を追加する必要があるようでした。

この設定は "PROJECT" の "Build Settings" にある "Architectures" から行います。

ここで、アーキテクチャとして標準設定されている "${ARCHS_STANDARD_32_BIT}" に加えて、"armv6" を追加します。

 

注意したいのが、iOS 5 SDK に限らず、以前の iOS 4 SDK などでも、この "Architectures" の値として "${ARCHS_STANDARD_32_BIT}" が標準設定されているところです。

この "${ARCHS_STANDARD_32_BIT}" そのものが指すアーキテクチャが、iOS 4 SDK の頃は "armv6 armv7" だったのが、iOS 5 SDK からは "armv7" だけに変更されています。

つまり、以前に iOS 4 SDK で作成して問題なかったプロジェクトが、Xcode 4.2 (iOS 5 SDK) にアップグレードすることにより、プロジェクトの設定を変更していなくても、対応アーキテクチャが "armv7" だけになってしまう様子です。

"armv6" というアーキテクチャは iPhone 3G で採用されているアーキテクチャで、iPhone 3GS からは "armv7" になるそうなので、iPhone 3G も視野に入れたアプリの場合には特にこのあたりに注意する必要がありそうです。

動作環境の必須条件から "armv7" を外す

Xcode 4.2 (iOS 5 SDK) で作成したプロジェクトでは、アプリの動作環境の必要要件として "armv7" が設定されているようです。

アプリ動作環境の必要要件は、アプリケーションプロジェクトの Info.plist 内にある "Required device capabilities" で設定することができるのですけど、ここで "armv7" が指定されていると、このアプリは "armv7" 環境が必須と扱われてしまうことになるようです。

armv6 環境でも動作することにしたい場合には、この "armv7" の設定を削除しておく必要があるようでした。

 

これらの設定を調整してビルドを行うことで、冒頭に挙げた警告メッセージは表示されなくなりました。

アップロードされたバイナリも、"armv6" と "armv7" をサポートしたバイナリとなった様子で、これでどちらのアーキテクチャにも対応した iOS 4.0 用のアプリをリリースすることができた感じでした。

[ もどる ]