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つの重要な要素について考える必要があります。
- アーキテクチャ
- iOS バージョン
- 画面アスペクト比
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つのことに気をつけてください。
- iOS 4 でサポートされているアプリのテンプレートを選択すること
- Storyboard を使用しないこと
- Deployment Target を 4.2 にすること
- Required device capabilities の要素を armv6 にすること
- Architectures を armv6 と armv7 にすること
1つ目は、新規プロジェクトを作成するウィザードのアプリのテンプレートを選択する画面で、iOS 4 で動作するテンプレートを選択するということです。例えば、Page-Based Application は、iOS 5 以降でないと動作しません。
2つ目は、新規プロジェクトを作成するウィザードのプロジェクトのオプションを設定する画面で、Use Storyboards のチェックを外し、Storyboard を使用しないということです。Storyboard は、iOS 5 以降でないと使用できません。
3つ目は、 Target の Summary で Deployment Target を4.2にするということです。動作対象とする iPhone 3G の iOS バージョン以下のバージョンを設定する必要があります。
4つ目は、 Target の Info で Required device capabilities の要素を armv6 にするということです。ARMv6 デバイスである iPhone 3G を動作対象とするためです。armv6 のみを設定すれば、ARMv7 デバイスも動作対象になります。
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 での開発を推奨します。
参考文献