【问题标题】:CFBundleShortVersionString Returning Wrong VersionCFBundleShortVersionString 返回错误的版本
【发布时间】:2018-08-07 07:54:54
【问题描述】:

我们通过CFBundleShortVersionString 将应用程序的当前版本与我们后端的版本进行比较,以确定我们是否要强制用户更新。出于某种原因,在发布新版本的前 24 小时内,CFBundleShortVersionString 返回了错误的版本。到目前为止,我们已经尝试了多种解决方案,但似乎都没有奏效。以下是我们用来比较的简化版本:

func needToUpdate(completion: @escaping (Bool) -> Void) {
    guard let currentVersion = Foundation.Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String,
          let currentVersionInt = Int(currentVersion.replacingOccurrences(of: ".", with: ""))
             else { completion(false); return }  

    let versionInt = Int((versionObject.version ?? "0").replacingOccurrences(of: ".", with: "")) ?? 0

    completion(currentVersionInt < versionInt)  
}

此外,此问题仅在应用发布到应用商店后才会发生,因此我们无法在 xcode 中对其进行调试。我们已尝试在午夜发布更新,但早上用户仍然打电话说他们已经更新了应用程序,但弹出窗口仍然出现。知道是什么原因造成的吗?

【问题讨论】:

  • versionObject.value 的值是多少?
  • 我希望没有像 1.0.0 这样的多个小数
  • versionObject.version 等于最新的应用程序版本,例如。 “1.10.2”
  • 我还看到 CFBundleShortVersionString 似乎返回错误值的日志。你有没有对此得出任何结论?

标签: ios swift version


【解决方案1】:

不要将版本转换为 int,因为版本号大于 9 时可能会失败,例如1.10.0变成1100,大于2.1.0,转换成210

您可以将结果字符串直接与 .compare() 进行比较,例如 "1.10.0".compare("2.1.0") 会返回一个比较结果

【讨论】:

  • 我们正在将这个问题从例如 1.12.2 更改为 1.12.3。在我包含在问题中的代码之后,我们检查它是否是比较第一个和第二个值(例如 1 v. 1 和 12 v. 13)的主要更新(例如 1.12.x 到 1.13.x)。尽管将版本转换为整数很好——我肯定会确保根据您的建议更新我的代码,但不幸的是它不能解决当前问题。
猜你喜欢
  • 2016-01-24
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
相关资源
最近更新 更多