下限から妥協していく
結論から言うと手持ちのデバイスのうち一番古いモデルと、そのデバイスがサポートされている一番古いiOSバージョンに決める
iOS
OSから決めるのがベネ
Xcode/iOS SDKのバージョンによって対象にできるバージョンが違う。
今からiOS3系をサポートしたい強い動機や鋼の意思、巨万の富などがあるならSDK5.1からスタート(iOS3サポートがどの程度現実的かというと試しにあなたの手元のプロジェクトをSDK 5.1で3.0に設定してビルドしてみればいい。俺は実機デバッグすら動かなかった)。
なければ最新のSDKで下限のiOSバージョン以上を対象にはじめる(現在は SDK 6.1 / 4.3)。
Xcode 4.3以前はMountain Lionに入らないから検証できなかった。
過去バージョンは以下からダウンロードできる。
https://developer.apple.com/downloads/index.action?name=Xcode
iOSシミュレータ
iOSシミュレータはXcode4を使用する限りiOS5.0以上しか提供されていない。よってiOS3.0〜4.3のテストをする場合はデバイスが必要。
iOS4.3以下が入ったデバイスがない場合、かつそれがネックになった時点であれこれ判断して「iOS5.0以上をサポート」に上げる。
またiOS5.0以上であっても実機でのみしかテストできない範囲もあるので、手持ちデバイスによって同じルールを適用する。
開発環境機能
最低でも
- ARC
- Storyboard
- 弱い参照
- Objective-Cイディオム
- その他のデフォルトの挙動
あたりが開発環境のバージョンの違いによって差異が出る。最新を使うことをおすすめする。
あと、業務で他人に渡すコードは最新だけで意図どうり動く書き方はなるべくしない。
デバイス
Appleがサポートしてない範囲は除く。
Apple セキュリティアップデートなどで今現在iOSアップデートにどのデバイスがサポートされているのかわかる
iOS 6.1.3でいうとこんなかんじ
対象となるデバイス:iPhone 3GS 以降、iPod touch (4th generation) 以降、iPad 2 以降
iOS 5.1.1時点ではこうだった
対象となるデバイス:iPhone 3GS、iPhone 4、iPhone 4S、iPod touch (3rd generation) 以降、iPad、iPad 2
対象となるバージョン:iPhone 3GS および iPhone 4 (GSM モデル):iOS 3.0 〜 4.3.4、iPod touch (3rd generation) 以降:iOS 3.1 〜 4.3.4、iPad:iOS 3.2 〜 4.3.4
iOS 4.3を下限にした場合、デバイスはiPhone 3GSが妥当だというのがわかる
テスト環境
iPhone 3GSかiPod Touch 3rdにiOS4.3が入ったデバイスをメインで使うのがベスト。
開発マシンではiOS5.0シミュレータでのデバッグを行う。
古い端末をユーザーテストに使う利点としてはパフォーマンス上の問題を早期発見できる。「早すぎる最適化」という話でもなく、別にその時点で修正を行わないとしてもパフォーマンス上の問題が出る方向に向かっているのさえ認識していればOK。次に設計するコンポーネントの時に再考したりもできる。また開発環境というのは往々にしてクリーンな状態から行うものなので古い端末のユーザーでなくても、使い続けてデータが蓄積したらここはどうなるのかというストレステストへの発想にもなる。
現実の問題
- iOSx.x以前のみうまく動かない機能が発生したけど原因がよくわからん
- 時間や金や生命力がなくなってきた
- 途中で変更できなく契約時点でバージョン決めなきゃいけない
などの都合で変わるのでがんばってください。