Как проверить, есть ли новая версия моего приложения в App Store на Swift5? - PullRequest
1 голос
/ 14 октября 2019

Я сейчас проверяю версию своего приложения. Мои приложения будут уведомлены, если появится новая версия, и на экране App Store нажмите ОК. Я проверяю версию приложения, чтобы сделать это, но она всегда показывает ошибку.

    func isUpdateAvailable(completion: @escaping (Bool?, Error?) -> Void) throws -> URLSessionDataTask {
        guard let info = Bundle.main.infoDictionary,
            let currentVersion = info["CFBundleShortVersionString"] as? String,
            let identifier = info["CFBundleIdentifier"] as? String,
            let url = URL(string: "http://itunes.apple.com/lookup?bundleId=\(identifier)") else {
                throw IXError.invalidBundleInfo
        }
        Log.Debug(currentVersion)
        let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
            do {
                if let error = error { throw error }
                guard let data = data else { throw IXError.invalidResponse }
                let json = try JSONSerialization.jsonObject(with: data, options: [.allowFragments]) as? [String: Any]
                guard let result = (json?["results"] as? [Any])?.first as? [String: Any], let version = result["version"] as? String else {
                    throw IXError.invalidResponse
                }
                completion(version != currentVersion, nil)
            } catch {
                completion(nil, error)
            }
        }
        task.resume()
        return task
    }

Использование

        _ = try? isUpdateAvailable { (update, error) in
            if let error = error {
                Log.Error(error)
            } else if let update = update {
                Log.Info(update)
            }
        }

Это потому, что мое приложение неу меня есть магазин приложений?

  1. Если у меня есть магазин приложений, какой ответ я могу узнать, если у меня есть версия для обновления?
  2. Как я могу пойти в App Store?

Пожалуйста, помогите мне.

Ответы [ 3 ]

2 голосов
/ 14 октября 2019

Да, используемый вами метод должен быть уже опубликованным приложением.

Если вы используете неопубликованное приложение, вы получите results = []

Перейдите на App Store вот так

let appId = "1454358806" // Replace with your appId
let appURL = URL.init(string: "itms-apps://itunes.apple.com/cn/app/id" + appId + "?mt=8") //Replace cn for your current country

UIApplication.shared.open(appURL!, options:[.universalLinksOnly : false]) { (success) in

}

Примечание:

Этот метод не будет очень своевременным, что означает, что приложение, которое вы только что выпустили, даже если его можно искать в App store, но results не будетобновляться немедленно. Информация об обновлении будет доступна примерно через 1 час или дольше

1 голос
/ 14 октября 2019

Я сделал это через обработчик завершения

func appStoreVersion(callback: @escaping (Bool,String)->Void) {
    let bundleId = Bundle.main.infoDictionary!["CFBundleIdentifier"] as! String
    Alamofire.request("https://itunes.apple.com/lookup?bundleId=\(bundleId)").responseJSON { response in
      if let json = response.result.value as? NSDictionary, let results = json["results"] as? NSArray, let entry = results.firstObject as? NSDictionary, let appStoreVersion = entry["version"] as? String{
        callback(true,appStoreVersion)
      }else{
        callback(false, "-")
        }
    }
  }

appStoreVersion содержит версию вашего приложения в магазине приложений. Помните: когда ваше приложение запускается в магазине приложений, может потребоваться до 24 часов, пока вы не увидите последнюю версию. Вот как это использовать:

appStoreVersion { (success,version) in
            appVersion = version
            self.VersionLabel.text = "App version \(appVersion)"

        }

Вы можете использовать успешную версию, чтобы делать разные вещи, которые ее версия не может быть найдена. т.е. вы не связаны или. Вы можете проверить, как это используется в этом приложении (вкладка «Настройки»): https://apps.apple.com/us/app/group-expenses-light/id1285557503

0 голосов
/ 04 ноября 2019

Я также использовал обработчик завершения.

private func getAppInfo(completion: @escaping (AppInfo?, Error?) -> Void) -> URLSessionDataTask? {
    guard let identifier = Bundle.main.infoDictionary?["CFBundleIdentifier"] as? String,
        let url = URL(string: "http://itunes.apple.com/lookup?bundleId=\(identifier)") else {
            DispatchQueue.main.async {
                completion(nil, VersionError.invalidBundleInfo)
            }
            return nil
    }
private func getVersion() {
_ = getAppInfo { info, error in
                if let appStoreAppVersion = info?.version {
                    let new = appStoreAppVersion.components(separatedBy: ".")
                    if let error = error {
                        print("error getting app store version: \(error)")
                    } else {
                        print(new)
                    }
}
...