需求:后台判断当前版本来通知前台弹出更新app提示。
实现:获取当前版本号,传入后台,通过后台返回来实现弹框。
因为app在发布测试时为区分不同服务器版本,版本号会出现例如 1.0.0.0-test、1.0.0.0-formal 等等格式的字符串,正式release时只能是3位版本号 1.0.0。而后台的检测又是必须要传入4位纯数字版本号(1.0.0.0),所以需要由前台来做处理。
当为测试版本时提取获取字符串中的x.x.x.x格式的字符串,当为x.x.x三位时末尾补一位.0 (即x.x.x.0)。
具体实现如下:
extension String {
//保证版本号是x.x.x.x四位纯数字的版本号
public func versionCheck() -> String{
let pattern = "\\d+(\\.\\d+){2,3}"
var subStr = [String]()
let regex = try! NSRegularExpression(pattern: pattern, options:[])
let matches = regex.matches(in: self, options: [], range: NSRange(self.startIndex...,in: self))
//解析出子串
for match in matches {
subStr.append(contentsOf: [String(self[Range(match.rangeAt(0), in: self)!])])
}
if subStr.count == 1 {
if let s = subStr.first {
if s.count == 5 {
return s + ".0"
}else {
return subStr[0]
}
}else {
return self
}
}else {
return self
}
}
}
调用:
let appversion = (Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "").versionCheck()