🍎
[Swift]アプリのバージョン比較処理
概要
アプリでバージョンアップの処理の中で、
1.0.1
などの文字列のバージョン比較が必要な場面での参考に。
実装
前提条件として、
文字列の1.0.1
など他の型では扱えない場合を考慮する。
比較処理
extension String {
func versionCompare(_ otherVersion: String) -> ComparisonResult {
let delimiter = "."
var versionComponents = self.components(separatedBy: delimiter)
var otherComponents = otherVersion.components(separatedBy: delimiter)
let zeroDiff = versionComponents.count - otherComponents.count
if zeroDiff == 0 {
// 同じフォーマットなので、通常通りに比較
return self.compare(otherVersion, options: .numeric)
} else {
// 異なるフォーマットの場合末尾に0を追加
let zero = Array(repeating: "0", count: abs(zeroDiff))
if zeroDiff > 0 {
otherComponents.append(contentsOf: zero)
} else {
versionComponents.append(contentsOf: zero)
}
return versionComponents.joined(separator: delimiter)
.compare(otherComponents.joined(separator: delimiter), options: .numeric)
}
}
}
使用例
let currentVersion = Bundle.main.versionCode
let updateVersion = "1.0.1"
// アップデートバージョンの方が上の場合true
let needUpdate = updateVersion.versionCompare(currentVersion) == .orderedDescending
if needUpdate {
// アップデートが必要
}
Androidの場合
Discussion