iPhone 3G と iPhone 5 の両方で動作するアプリを開発

iPhone 3G と iPhone 5 の両方で動作するアプリを開発する方法を記事にまとめました。

開発環境としては、下記を想定しています。

  • Mac OS X Lion
  • Xcode 4.4.1

また、各 iPhone の iOS バージョンは、下記を想定しています。

  • iPhone 3G: iOS 4.2.1
  • iPhone 5: iOS 6.0.1

iPhone 3G と iPhone 5 の両方で動作するアプリを開発するにあたり、まず始めに3つの重要な要素について考える必要があります。

  1. アーキテクチャ
  2. iOS バージョン
  3. 画面アスペクト比

1つ目のアーキテクチャについては、iPhone 3G が ARMv6 アーキテクチャで、iPhone 5 が ARMv7 互換の ARMv7s アーキテクチャです。そのため、ARMv6 アーキテクチャのサポートが外れた Xcode 4.5 以降では開発することが出来ません。Xcode 4.4.1 では、ARMv6 アーキテクチャをサポートしています。逆に、ARMv7s アーキテクチャのサポートがなくても、ARMv7 アーキテクチャのサポートがあれば、iPhone 5 で動作するアプリを開発できます。

2つ目の iOS バージョンについては、iPhone 3G の最新バージョンが iOS 4.2.1 で、iPhone 5 の初期バージョンが iOS 6 です。そのため、Storyboard は iOS 4 でサポートされないため使用できません。また、ARC は iOS 4 で使用することが出来ますが、弱い参照 (Weak Reference) を示す __weak 修飾子は使用できないため、代わりに __unsafe_unretained 修飾子を使用する必要があります。(__weak と __unsafe_unretained の違いは、記事末尾の参考文献を参照してください。)

3つ目の画面アスペクト比については、iPhone 3G が 3:2 (480×320) で、iPhone 5 が 16:9 (1136×640) です。iPhone 3G から iPhone 4S までの画面アスペクト比である 3:2 に合わせてアプリを作成した場合、iPhone 5 の自動レターボックス処理によって、アプリの上下に黒帯が追加された状態で動作します。iPhone 5 の画面アスペクト比対応については、検証中のためこの記事では扱いません。

ここまでの3つの重要な要素を踏まえた上で、Xcode 4.4.1 で iPhone 3G と iPhone 5 の両方で動作するアプリの新規プロジェクトを作成します。そのときは、次の5つのことに気をつけてください。

  1. iOS 4 でサポートされているアプリのテンプレートを選択すること
  2. Storyboard を使用しないこと
  3. Deployment Target を 4.2 にすること
  4. Required device capabilities の要素を armv6 にすること
  5. Architectures を armv6 と armv7 にすること
Xcode: Choose a template for your new project

Xcode: Choose a template for your new project

1つ目は、新規プロジェクトを作成するウィザードのアプリのテンプレートを選択する画面で、iOS 4 で動作するテンプレートを選択するということです。例えば、Page-Based Application は、iOS 5 以降でないと動作しません。

Xcode: Choose options for your new project

Xcode: Choose options for your new project

2つ目は、新規プロジェクトを作成するウィザードのプロジェクトのオプションを設定する画面で、Use Storyboards のチェックを外し、Storyboard を使用しないということです。Storyboard は、iOS 5 以降でないと使用できません。

Xcode: Target > Summary

Xcode: Target > Summary

3つ目は、 Target の Summary で Deployment Target を4.2にするということです。動作対象とする iPhone 3G の iOS バージョン以下のバージョンを設定する必要があります。

Xcode: Target > Info

Xcode: Target > Info

4つ目は、 Target の Info で Required device capabilities の要素を armv6 にするということです。ARMv6 デバイスである iPhone 3G を動作対象とするためです。armv6 のみを設定すれば、ARMv7 デバイスも動作対象になります。

Xcode: Target > Build Settings

Xcode: Target > Build Settings

5つ目は、 Target の Build Settings で Architectures を armv6 と armv7 にするということです。ビルド時に ARMv6 バイナリと ARMv7 バイナリを生成させるためです。

これで、iPhone 3G と iPhone 5 の両方で動作するアプリをビルドできる開発環境ができました。あとは、使用するフレームワークやライブラリのメソッドを注意深く使用し、適宜 iPhone 3G と iPhone 5 の両方でテストしながら開発してください。

補足1

Xcode 4.4.1 の Organizer では iPhone 5 を開発用として使用するように設定できません。そのため、Xcode 4.5 の Organizer で iPhone 5 を開発用として使用するように設定したあと、Xcode 4.4.1 で iPhone 5 を開発用として使用するようにしてください。

補足2

Mac OS X Mountain Lion では、iOS 4.3 Simulator を使用できません。そのため、Mac OS X Lion での開発を推奨します。

参考文献

About TSUCHIDA Takuya

生まれ変わったら黒猫になりたいシステムアーキテクトです。僕への連絡は右下の MessageLeaf からお願いします。
This entry was posted in Xcode and tagged , , . Bookmark the permalink.