Xcode4でビルドしたアプリを、iPhone 3G(iOS 3.x)で実行させる方法を紹介します。
様々調べた結果、以下で詳しく説明されていました。
iOS 3.x support in Xcode 4 - Stack Overflow
前提として、オーガナイザーでiPhone 3Gが認識されているものとします。
Development Targetを変更
最初の状態では、ターゲットにiPhone 3Gを選ぶことすらできません。
選べるようにするために、Development Targetを3.0にします。プロジェクト設定の[Summary]で設定します。
これで、iPhone 3Gを選べるようになるのですが、まだまだ実行できません。そんなに簡単にはいきません…
armv6サポート
iPhone 3Gはarmv6というCPUアーキテクチャが利用されています(iPhone 3GS以降はarmv7)。
これをサポートする設定をしなければなりません。
プロジェクト設定の[Build Settings]で[Architectures]に"armv6"を追加します。
続いて、[Build Settings]で[Linking]→[Other Linker Flags]に"-weak-lSystem"を追加します。
最後にInfo.plistの"Required device capabilities"という項目から"armv7"を削除します。
ソースコードの修正
ソースコードの修正が必要です。
1つ目はUIDeviceのuserInterfaceIdiomを利用しているコードです。
iPhoneとiPadを見分けるのに利用されているのですが、iOS3.2より前だとこのメソッドが定義されていないためアプリが不正終了してしまいます。
以下のように修正します。
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
↓
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
UI_USER_INTERFACE_IDIOMマクロはuserInterfaceIdiomメソッドが利用できるか確認してくれるので安心して使えます。
2つ目はAppDelegateのapplication:didFinishLaunchingWithOptions:内のコードです。
self.window.rootViewController = self.viewController;
↓
[self.window addSubview:self.viewController.view];
以上、これで無事にiPhone 3G/iOS 3でアプリを開発できます。