この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
バージョンの判定
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 を切り分けるときなどに必要になったので作成しましたが、何かと必要になる処理だと思います。ぜひ参考にしてください。