iOS 7が登場し、スマートフォンのCPUも64ビット化されようかという今、そう、いまだから、いまさら役に立たない第1世代 iPod touch(iOS 3.1.3) 対応アプリ開発法を忘れないうちにメモ。 ひとことでまとめると、
OS X Mountain Lion 10.8.5 + Xcode 4.4.1を使えば開発可能
である(※古い iPhone SDK と Device Support を追加しておくこと)。
ただし、Xcode 4.4.1標準のプロジェクトテンプレートから生成されるプロジェクトを、そのままビルドしただけでは iPhone 3G/iPod touch 1st generation のような旧式デバイスで動くアプリは作れない。注意すべきポイントがいくつかある。
- プロジェクトの iOS Deployment Target を 3.1 にする。
- プロジェクトの Build Settings > Architectures > Architectures に armv6 を追加する。
- プロジェクトの Build Settings > Build Options > Comiler for C/C++/Objective-C を LLVM GCC 4.2 にする。
- ARCやBlocks(ブロック構文)はもちろん、iOS 3でサポートされない機能(iOS 4以降で拡張されたような)を使わないようにする。
Xcodeのいくつかのバージョンと、それに対応するiOS Deployment Targetの範囲(Deployment Targetの選択肢としてプルダウンメニューに表示されるiOSバージョン)を調べてみると次のようになっている。
Xcode 3.2.2 | iPhone OS 2.0 〜 3.2 |
Xcode 3.2.3 | iPhone OS 2.0 〜 4.0 |
Xcode 4.1 | iOS 3.0 〜 4.3 |
Xcode 4.2.1 | iOS 3.0 〜 5.0 |
Xcode 4.3.3 | iOS 3.0 〜 5.1 |
Xcode 4.4.1 | iOS 3.0 〜 5.1 |
Xcode 4.5.2 | iOS 4.3 〜 6.0 |
Xcode 4.6.3 | iOS 4.3 〜 6.1 |
Xcode 5.0 | iOS 4.3 〜 7.0 |
Xcodeを動作させるOS Xの条件は次の通り。
- Xcode 3系はLion 10.7と互換性がない。Snow Leopard 10.6.8対応
- Xcode 4.1からLion対応
- Xcode 4.4からMountain Lion 10.8対応
- Xcode 5.0はMountain Lion用
- アーキテクチャー
-
いまどきのXcodeではarmv6のような古いCPUは、デフォルトでは相手にされていないので、
Xcode cannot run using the selected device. Choose a destination with a supported architecture in order to run on this device.
と言われ、実行できない。
- コンパイラ
-
デフォルトの Apple LLVM compiler 4.0 のままだとlibSystem.B.dylibがRequired(strong link)になっているため、実行すると、
dyld: Symbol not found: __NSConcreteGlobalBlock Referenced from: /var/mobile/Applications/3DC90EC5-264E-44A5-93A0-87201A3EC9A9/Hoge.app/Hoge Expected in: /usr/lib/libSystem.B.dylib in /var/mobile/Applications/3DC90EC5-264E-44A5-93A0-87201A3EC9A9/Hoge.app/Hoge
のようにクラッシュする。GCCにすればデフォルトでOptional(weak link)となる。
- サポートされない機能
-
Xcode 4.4.1標準のプロジェクトテンプレートから生成されるプロジェクトには、UIWindowのrootViewControllerプロパティに代入を行うコードがあるが、このプロパティはiOS 4で追加されたものなのでiOS 3ではエラーとなる。
Objective-C言語・ランタイムのバージョンが異なるので注意が必要である。
- ARCやBlocksは使えない。
- プロパティに対応するインスタンス変数の宣言は省略できない(自動的に合成されない)。
Xcode 3.2.2(& iPhone SDK 3.2)があれば、レガシーなiOS,Objective-C向けのプロジェクトを作成できるので、そいつを流用するとあまり悩まなくて済む。
0 件のコメント:
コメントを投稿