2012年3月20日火曜日

Xcode4でiOS3(iPhone 3G)向けアプリをビルドする方法

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でアプリを開発できます。

0 件のコメント:

コメントを投稿