デバイスと対応するOSの対応表
各デバイスの対応OS(2012/05/13現在) ※斜体はサポート終了デバイス | 初期OS | 最終OS |
---|---|---|
iPod touch (第1世代) | iPhone OS 1.1 | iPhone OS 3.1.3 |
iPod touch (第2世代) | iPhone OS 2.2 | iOS 4.2.1 |
iPod touch (第3世代) | iPhone OS 3.1 | iOS 5.1.1(現在) |
iPod touch (第4世代) | iOS 4.1/iOS 5 | iOS 5.1.1(現在) |
iPhone (初代) | iPhone OS 1.0 | iPhone iOS 3.1.3 |
iPhone 3G | iPhone OS 2.0 | iOS 4.2.1 |
iPhone 3GS | iPhone OS 3.0 | iOS 5.1.1(現在) |
iPhone 4 | iOS 4 | iOS 5.1.1(現在) |
iPhone 4S | iOS 5 | iOS 5.1.1(現在) |
iPad | iPhone OS 3.2 | iOS 5.1.1(現在) |
iPad 2 | iOS 4.3 | iOS 5.1.1(現在) |
新しいiPad | iOS 5.1 | iOS 5.1.1(現在) |
OS別に分けた場合の対応デバイス(2012/05/13現在) ※斜体はサポート終了
対応のOS | デバイス |
---|---|
iPhone OS 3.1.3まで 【3.2以降は非対応】 | iPhone (初代) |
iPod touch (第1世代) | |
iOS 4.2.1まで 【4.3以降は非対応】 | iPhone 3G |
iPod touch (第2世代) | |
iOS 5.1.1まで(現在) | iPod touch (第3世代), iPod touch (第4世代) |
iPhone 3G, iPhone 4, iPhone 4S | |
iPad, iPad2, 新しいiPad |
UIRequiredDeviceCapabilitiesの値
iOS 3.0以降では、作成したアプリがどのような機能を使うのかということを「<project_name>-Info.plist」に必ず書かなければなりません。この値は、ユーザがApp Storeから誤ってダウンロードしないようにするためのものでもあります。そのため、条件をきつくすると本来ならば使えるデバイスで使えなくなってしまいますし、緩すぎるとアプリが正常に動作しなくなってしまいます。その機能が無くてもアプリケーションが動作する場合には記入すべきではありません。以下、記入することのできるキーとその説明です。詳細は、以下のドキュメントに書かれています。
- 「iOSアプリケーション プログラミングガイド」の92ページ目、「必要なデバイス機能の宣言」
- 英語版は「iOS App Programming Guide」の「Declaring the Required Device Capabilities」
- 「iTunes Connect デベロッパガイド 7.3」の198ページ目、「付録C:デバイスの互換性一覧」
- 英語版は「Developer Guide 7.4」の181ページ目、「Appendix C: Device Compatibility Matrix」
iPod touch | iPhone | iPad | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
第1世代 | 第2世代 | 第3世代 | 第4世代 | 初代 | 3G | 3GS | 3GS 中国版 | 4 | 4S | Wi-Fi | Wi-Fi+3G | 2 Wi-Fi | 2 Wi-Fi+3G | 新しい Wi-Fi | 新しい Wi-Fi+Cellular | |
armv6 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ARMv6に対応する(iOS 3.1以降)。iOSアプリケーション プログラミングガイド(英)の「浮動小数点演算の留意点(Floating-Point Math Considerations)」も参照。 | ||||||||||||||||
armv7 | - | - | ◯ | ◯ | - | - | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ARMv7に対応する(iOS 3.1以降)。同上。 | ||||||||||||||||
telephony | - | - | - | - | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | - | - | - | - | - | - |
電話アプリを利用する。 | ||||||||||||||||
sms | - | - | - | - | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | - | - | - | - | - | - |
メッセージ(Message,iMessage)アプリを利用する。 | ||||||||||||||||
wifi | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | - | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
Wi-Fiを利用する。 | ||||||||||||||||
peer-peer | - | ◯ | ◯ | ◯ | - | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
Bluetoothを利用する(iOS 3.1以降)。 | ||||||||||||||||
bluetooth-le | - | - | - | - | - | - | - | - | - | ◯ | - | - | - | - | ◯ | ◯ |
Bluetooth low energy(Blutooth v4.0)を利用する(iOS 5.0以降)。 | ||||||||||||||||
still-camera | - | - | - | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | - | - | ◯ | ◯ | ◯ | ◯ |
カメラを利用する。 | ||||||||||||||||
front-facing-camera | - | - | - | ◯ | - | - | - | - | ◯ | ◯ | - | - | ◯ | ◯ | ◯ | ◯ |
フロントカメラを利用する。 | ||||||||||||||||
auto-focus-camera | - | - | - | - | - | - | ◯ | ◯ | ◯ | ◯ | - | - | - | - | ◯ | ◯ |
オートフォーカス(マクロ撮影)を利用する。 | ||||||||||||||||
camera-flash | - | - | - | - | - | - | - | - | ◯ | ◯ | - | - | - | - | - | - |
カメラのLEDフラッシュを利用する。 | ||||||||||||||||
video-camera | - | - | - | ◯ | - | - | ◯ | ◯ | ◯ | ◯ | - | - | ◯ | ◯ | ◯ | ◯ |
ビデオ撮影を利用する。 | ||||||||||||||||
microphone | - | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
内蔵マイクを利用する | ||||||||||||||||
accelerometer | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
加速度センサーを利用する。 | ||||||||||||||||
gyroscope | - | - | - | ◯ | - | - | - | - | ◯ | ◯ | - | - | ◯ | ◯ | ◯ | ◯ |
3軸ジャイロを利用する。 | ||||||||||||||||
magnetometer | - | - | - | - | - | - | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
デジタルコンパスを利用する。 | ||||||||||||||||
gps | - | - | - | - | - | ◯ | ◯ | ◯ | ◯ | ◯ | - | ◯ | - | ◯ | - | ◯ |
GPS(もしくはAssisted GPS)を利用する。同時にlocation-servicesも併記必須。 | ||||||||||||||||
location-services | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
現在地を利用する。GPSを利用しない場合はこれだけで良い。 | ||||||||||||||||
gamekit | - | ◯ | ◯ | ◯ | - | - | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
Game Centerを利用する(iOS 4.1以降)。 | ||||||||||||||||
opengles-1 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
OpenGLES 1.1を利用する。 | ||||||||||||||||
opengles-2 | - | - | ◯ | ◯ | - | - | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
OpenGLES 2.0を利用する。 | ||||||||||||||||
第1世代 | 第2世代 | 第3世代 | 第4世代 | 初代 | 3G | 3GS | 3GS 中国版 | 4 | 4S | Wi-Fi | Wi-Fi+3G | 2 Wi-Fi | 2 Wi-Fi+3G | 新しい Wi-Fi | 新しい Wi-Fi+Cellular | |
iPod touch | iPhone | iPad | ||||||||||||||
Multitasking | - | - | ◯ | ◯ | - | - | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
マルチタスクが可能である。 | ||||||||||||||||
Retina | - | - | - | ◯ | - | - | - | - | ◯ | ◯ | - | - | - | - | ◯ | ◯ |
Retinaディスプレイ搭載機である。 |
画面サイズ
デバイス | 縦 (ピクセル) | 横 (ピクセル) | アスペクト比 |
---|---|---|---|
iPod touch(第1世代) | 480 | 320 | 3:2 |
iPod touch(第2世代) | |||
iPod touch(第3世代) | |||
iPhone (初代) | |||
iPhone 3G | |||
iPhone 3GS | |||
iPod touch(第4世代) | 960 | 640 | |
iPhone 4 | |||
iPhone 4S | |||
iPad (初代) | 1024 | 768 | 4:3 |
iPad 2 | |||
新しいiPad | 2048 | 1536 |
現在のiOSの割り合いについて
そら案内 for iOS のアクセス解析結果に見るiOSの世界 | 関西/大阪のiPhone・iPadアプリ開発 feedtailor Inc. 社長ブログにあるように、アクセスされているiOSの割り合いを公開されているところもあります。非常にありがたいです。どんなOSでも当てはまりますが、公式のサポートが切れても使い続ける方は一定数おり、その割り合いが多い場合は動作検証した方が良い場合もあると思います。例えば、iPhone 3Gの場合重いからという理由でiOS 3.xを使っているかたも多いはずです。
現状、多くのアプリの場合はiOS 4.3以上【iPod touch(第2世代), iPhone 3Gは対象外】としていることが多いように感じています。
なお、以前SoftBankから公式に出された情報では、
この度、ソフトバンクモバイルは、お客さまにより快適なモバイル環境をご提供するにあたり、音声ネットワークの最適化を2011年11月以降に実施いたします。 それに伴い、ご利用中のソフトウェアがiOS 4.2以降でない場合、一部音声品質に影響が出る可能性がございます。 iPhoneをコンピュータに接続し、iTunesをご利用の上、最新のソフトウェアへのアップデートをお願いします。となっており、3GSの場合でも多くはiOS 5以上にしているのではないかと(好意的に)思っています。
しかし、iOS 5よりも前のデバイスは「PC FREE」ではないためアップデートしたくても分からない・できないという方もいるはずで、iOS 5以上しか対応しないというのでなければ、まだ数年はiOS 4.x(3Gを含めない場合はiOS 4.3)以上を対象にすることになると考えています。
互換性を保つソースコードの書き方
特定のバージョンのiOSの機能を利用する (iOS 2.0以降)
・コンパイル時に判定する方法以下の「Availability.h」「AvailabilityInternal.h」に定義されているマクロを利用します。
- Availability.h
#define __IPHONE_2_0 20000
#define __IPHONE_2_1 20100
#define __IPHONE_2_2 20200
#define __IPHONE_3_0 30000
#define __IPHONE_3_1 30100
#define __IPHONE_3_2 30200
#define __IPHONE_4_0 40000
#define __IPHONE_4_1 40100
#define __IPHONE_4_2 40200
#define __IPHONE_4_3 40300
#define __IPHONE_5_0 50000
#define __IPHONE_5_1 50100
#define __IPHONE_NA 99999 /* not available */
- AvailabilityInternal.h__IPHONE_OS_VERSION_MIN_REQUIRED
__IPHONE_OS_VERSION_MAX_ALLOWED
「__IPHONE_OS_VERSION_MIN_REQUIRED」はターゲットの「Deployment Target」の値で変化します。
if __IPHONE_OS_VERSION_MIN_REQUIRED >= 50000
// iOS 5.0以上の処理
else
// iOS 5.0未満(iOS 4.3以下)の処理
endif
「__IPHONE_5_0」などのマクロも、もちろん利用できるが、Availability.hのコメントにも書かれている通り、古いSDKにはそのマクロが定義されていないので、「0」とみなされてしまう。そのため、以下の様なことになります。if __IPHONE_OS_VERSION_MIN_REQUIRED >= 0 // __IPHONE_5_0と書いたはずが、、、
// iOS 5.0以上の処理のはずが、常にコンパイルされる
endif
・実行時に判定する方法
float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 5.0) {
// iOS 5.0以上の処理
}
メソッドの有無を確認
if ([CLLocationManager respondsToSelector:@selector(locationServicesEnabled)]) {
if (![CLLocationManager locationServicesEnabled]) { // iOS 4.0以降はクラスメソッド
// 何らかの処理
}
} else {
if (!locationManager.locationServicesEnabled) { // iOS 3.xはプロパティ
// 何らかの処理
}
}
0 コメント:
コメントを投稿