iOSのバージョンによる分岐

  • 56
    Like
  • 0
    Comment
More than 1 year has passed since last update.

実行時にフレームワークバージョンで判定する

AppleのiOS7移行ドキュメントにも書いてあったのでNSFoundationVersionNumber を使うようにしている。

[UIDevice currentDevice].systemVersion を使うやり方もちらほら見かけるが、値が文字列であるためバージョンの大小判定としては実装を工夫する必要がある。NSFoundationVersionNumber を使う方が可読性もあり、実装も楽である。[UIDevice currentDevice].systemVersion は表示したりログとして残す方に使うと良いと思う。

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
    // Load resources for iOS 6.1 or earlier
} else {
    // Load resources for iOS 7 or later
}

iOS SDK 8時点での定義値。

#if TARGET_OS_IPHONE
#define NSFoundationVersionNumber_iPhoneOS_2_0  678.24
#define NSFoundationVersionNumber_iPhoneOS_2_1  678.26
#define NSFoundationVersionNumber_iPhoneOS_2_2  678.29
#define NSFoundationVersionNumber_iPhoneOS_3_0  678.47
#define NSFoundationVersionNumber_iPhoneOS_3_1  678.51
#define NSFoundationVersionNumber_iPhoneOS_3_2  678.60
#define NSFoundationVersionNumber_iOS_4_0  751.32
#define NSFoundationVersionNumber_iOS_4_1  751.37
#define NSFoundationVersionNumber_iOS_4_2  751.49
#define NSFoundationVersionNumber_iOS_4_3  751.49
#define NSFoundationVersionNumber_iOS_5_0  881.00
#define NSFoundationVersionNumber_iOS_5_1  890.10
#define NSFoundationVersionNumber_iOS_6_0  992.00
#define NSFoundationVersionNumber_iOS_6_1  993.00
#define NSFoundationVersionNumber_iOS_7_0 1047.20
#define NSFoundationVersionNumber_iOS_7_1 1047.25
#endif