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()
    }
  } // 업데이트 가능한지 판별하는 함수
  
}