[iOS 8] NSProcessInfo で iOS のバージョンを判定する
バージョンの判定
iOS でバージョン判定するには今までですと [[UIDevice currentDevice] systemVersion] を使ったり NSFoundationVersionNumber を使ったりしていましたが、iOS 8 の Foundation フレームワークでは NSProcessInfo で簡単に判別できるメソッドが追加されました。次のように記述します。
let systemVersion = NSOperatingSystemVersion(majorVersion: 8, minorVersion: 1, patchVersion: 0) NSProcessInfo().isOperatingSystemAtLeastVersion(systemVersion) // 8.0.0 で実行している場合はfalse
便利なんですが、当然 iOS 7 以前では利用できません。そのため、iOS 7 以前の判別には結局 [[UIDevice currentDevice] systemVersion] か NSFoundationVersionNumber を使う必要があります。
毎回記述するのは面倒なので、これらを上手く使って iOS のバージョンを判別する関数を作りました。
実装する
func greaterThanOrEqual(majorVersion: Int, minorVersion: Int, patchVersion: Int) -> Bool { // NSProcessInfo#isOperatingSystemAtLeastVersion による判別 if NSProcessInfo().respondsToSelector("isOperatingSystemAtLeastVersion:") { let version = NSOperatingSystemVersion(majorVersion: majorVersion, minorVersion: minorVersion, patchVersion: patchVersion) return NSProcessInfo().isOperatingSystemAtLeastVersion(version) } // UIDevice#systemVersion による判別 let targetVarsion = shortedVersionNumber("\(majorVersion).\(minorVersion).\(patchVersion)") let systemVersion: String = shortedVersionNumber(UIDevice.currentDevice().systemVersion) return systemVersion.compare(targetVarsion, options: .NumericSearch) != NSComparisonResult.OrderedAscending } func shortedVersionNumber(version: String) -> String { let suffix = ".0" var shortedVersion = version while shortedVersion.hasSuffix(suffix) { let endIndex = countElements(shortedVersion) - countElements(suffix) let range = Range(start:advance(shortedVersion.startIndex, 0), end: advance(shortedVersion.startIndex, endIndex)) shortedVersion = shortedVersion.substringWithRange(range) } return shortedVersion; }
次のように使います。greaterThanOrEqual でメジャーバージョン、マイナーバージョン、パッチバージョンを指定して、指定されたバージョン以上か判別できます。shortedVersionNumber は 8.0.0 と 8.0 などを同一にみなすため .0 を削るような処理を行う関数です。
if greaterThanOrEqual(8, 0, 0) { println("システムバージョン >= iOS 8.0.0") } else { println("システムバージョン < iOS 8.0.0") } [/swift]
まとめ
自分は WKWebView と UIWebView を切り分けるときなどに必要になったので作成しましたが、何かと必要になる処理だと思います。ぜひ参考にしてください。