Swift 檢查版本更新 itunes
阿新 • • 發佈:2018-11-08
iOS
想要檢查App
當前版本是否為最新,一般的方案大概都是伺服器自己提供一個介面來獲取App
最新版本是多少,然後再做出相應提示是否需要更新,但是介面需要手動維護,應用要稽核,還得等稽核通過以後才能更新版本號,其實蘋果提供了一個iTunes
介面,能夠查到App
在AppStore
上的狀態資訊,既省事又準確,下面記錄一下具體實現方法
返回的資料結構:
{ "resultCount":1, "results":[ { "screenshotUrls":Array[5], "ipadScreenshotUrls":Array[0], "appletvScreenshotUrls":Array[0], "artworkUrl60":"XXXXX", "artworkUrl512":"XXXXX", "artworkUrl100":"XXXXX", "artistViewUrl":"XXXXX", "supportedDevices":Array[49], "isGameCenterEnabled":false, "kind":"software", "features":Array[0], "advisories":Array[0], "trackCensoredName":"XXXXX", "languageCodesISO2A":Array[1], "fileSizeBytes":"XXXXX", "contentAdvisoryRating":"4+", "trackViewUrl":"XXXXX", //下載地址 "trackContentRating":"4+", "releaseNotes":"1.XXXXX。 2.XXXXX! 3.XXXXX!", "isVppDeviceBasedLicensingEnabled":true, "primaryGenreId":XXXXX, "genreIds":Array[2], "trackId":XXXXX, "trackName":"XXXXX", "sellerName":"XXXXX", "primaryGenreName":"XXXXX", "currency":"CNY", "wrapperType":"software", "version":"2.5.1", //線上版本號 "description":"XXXXX", "artistId":"XXXXX", "artistName":"XXXXX", "genres":Array[2], "price":0, "bundleId":"XXXXX", "releaseDate":"XXXXX", "minimumOsVersion":"XXXXX", "currentVersionReleaseDate":"2018-09-12T10:33:48Z", "formattedPrice":"免費" } ] }
//本地版本資訊 let infoDict:Dictionary = Bundle.main.infoDictionary! let app_Version:String = infoDict["CFBundleShortVersionString"] as! String let url = URL(string: "http://itunes.apple.com/cn/lookup?id=XXX") SVProgressHUD.show() NetworkTools.shared._manger.request(url!, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: nil).validate().responseJSON { [weak self](response) in guard let strongSelf = self else { return } switch(response.result) { case .success(let value): SVProgressHUD.dismiss() print(value) guard let resultDict = value as? [String : Any], resultDict.keys.count > 0 else { print("無資料:\(value)") return } let tempArr = resultDict["results"] as? [[String: Any]] if let resultsArr = tempArr { if resultsArr.count < 1 { print("此APPID為未上架的APP或者查詢不到") return } let itunesVersion = resultsArr.first!["version"] as! String //trackViewUrl 為更新地址 let trackViewUrl = resultsArr.first!["trackViewUrl"] as! String if strongSelf.compareVersion(str1: app_Version, str2: itunesVersion) { var alertController = UIAlertController() alertController = UIAlertController(title: "版本更新", message: "請下載最新版App否則無法使用!", preferredStyle: .alert) let certainAction = UIAlertAction(title: "確定", style: .default) { (action) in let url = URL(string: trackViewUrl) UIApplication.shared.openURL(url!) } alertController.addAction(certainAction) strongSelf.present(alertController, animated: true, completion: nil) }else { var alertController = UIAlertController() alertController = UIAlertController(title: "版本更新", message: "已是最新版本!", preferredStyle: .alert) let cancelAction = UIAlertAction(title: "確定", style: .cancel, handler: nil) alertController.addAction(cancelAction) strongSelf.present(alertController, animated: true, completion: nil) } } case .failure(_): SVProgressHUD.dismiss() SVProgressHUD.showError(withStatus: "檢查更新失敗!") } }
版本字串的比較方法
//版本號比較
private func compareVersion(str1: String, str2: String) -> Bool {
let compareResult = str1.compare(str2, options: .numeric, range: nil, locale: nil)
return (compareResult == .orderedAscending)
}
也可以寫成擴充套件
extension String { func ck_compare(with version: String) -> ComparisonResult { return compare(version, options: .numeric, range: nil, locale: nil) } func isNewer(than aVersionString: String) -> Bool { return ck_compare(with: aVersionString) == .orderedDescending } func isOlder(than aVersionString: String) -> Bool { return ck_compare(with: aVersionString) == .orderedAscending } func isSame(to aVersionString: String) -> Bool { return ck_compare(with: aVersionString) == .orderedSame } } 作者:Cocody 連結:https://www.jianshu.com/p/22d37844df2d 來源:簡書 簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。