iOS
iOS) 앱 최신버전 체크 및 업데이트 하러 가기
Jimmy Youn
2021. 9. 14. 12:37
내가 올린 앱의 최신 버전과 앱스토어에 있는 앱 버전을 비교해서 앱스토어에 있는 버전이 낮으면 사용자들에게 업데이트 하러 가기 기능을 구현하고 싶었다. 이 방법은 강제 업데이트를 하게끔 alert 창에 업데이트 버튼만 넣고 다음 화면으로 넘어가지 않도록 구현을 했다.
1. 현재 내 앱 버전 확인하는 방법
let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
if let myVersion = version {
print("version : \(version)"
}
2. SplashViewController 에 버전체크하는 함수를 만들어서 사용해준다.
func updateCheck() {
if let url = URL(string: "http://itunes.apple.com/lookup?bundleId=내 번들 아이디") {
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data, data.count > 0 else { return }
do {
if let myVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
let json = try JSON(data: data) // import SwiftyJson 을 해줘야한다.
let version = json["results"][0]["version"].stringValue
let versionSplit = version.components(separatedBy: ".")
let myVersionSplit = myVersion.components(separatedBy: ".")
if versionSplit.count == myVersionSplit.count && versionSplit.count == 3 {
if Int(versionSplit[0])! > Int(myVersionSplit[0])! {
self.updatePossible = true // 전역 Bool 변수
} else if Int(versionSplit[1])! > Int(myVersionSplit[1])! {
self.updatePossible = true
} else if Int(versionSplit[2])! > Int(myVersionSplit[2])! {
self.updatePossible = true
} else {
self.updatePossible = false
}
}
}
} catch let err {
debugPrint(err)
}
}.resume()
}
}
위의 let url = URL(string : "https://itunes.apple.com/lookup?bundleId=앱의 번들 아이디") 주소를 통해 JSON 을 파싱해서 앱스토어에 있는 버전을 가져와서 현재 내 앱버전과 비교를 해준다.
3. SplashViewController 버전체크 전체 코드
import UIKit
import SwiftyJSON
class SplashViewController : UIViewController {
//MARK: - Properties
var updatePossible : Bool = false {
didSet {
if updatePossible {
showUpdateAlert() // 업데이트 하러 가는 alert 창
} else {
// 메인 홈 으로 이동하게끔 하는 코드
}
}
}
//MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
self.updateCheck()
}
func updateCheck() {
if let url = URL(string: "http://itunes.apple.com/lookup?bundleId=나의 번들 아이디") {
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data, data.count > 0 else { return }
do {
if let myVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
let json = try JSON(data: data)
let version = json["results"][0]["version"].stringValue
let versionSplit = version.components(separatedBy: ".")
let myVersionSplit = myVersion.components(separatedBy: ".")
if versionSplit.count == myVersionSplit.count && versionSplit.count == 3 {
if Int(versionSplit[0])! > Int(myVersionSplit[0])! {
self.updatePossible = true
} else if Int(versionSplit[1])! > Int(myVersionSplit[1])! {
self.updatePossible = true
} else if Int(versionSplit[2])! > Int(myVersionSplit[2])! {
self.updatePossible = true
} else {
self.updatePossible = false
}
}
}
} catch let err {
debugPrint(err)
}
}.resume()
}
} // 업데이트 가능한지 판별하는 함수
}