【发布时间】:2020-02-10 14:53:40
【问题描述】:
我目前正在检查我的应用版本。如果有新版本,我的应用程序会收到通知,如果出现 App Store 屏幕,请按 OK。我正在检查应用程序版本,但它总是显示错误。
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)
}
}
这是因为我的应用没有应用商店吗?
- 如果我有应用商店,如果我有要更新的版本,我可以得到什么响应?
- 如何前往 App Store?
请多多帮助我。
【问题讨论】:
-
当我提供自己的包标识符时,该端点似乎为我返回空,因此请尝试检查文件是否有任何结果。无论如何,这个解决方案似乎不是非常可扩展或可靠,我建议在某个地方托管一个包含版本号的文件。虽然开销更大,但更可靠
-
@DavidLiaw 你是说我用的功能不好?那你能不能给我一个更好的解决方案??
标签: ios swift iphone app-store