CFBundleShortVersionString返回错误的版本

时间:2018-02-27 15:42:29

标签: ios swift version

我们将应用程序的当前版本通过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中对其进行调试。我们已经尝试在午夜发布更新,但早上的用户仍然打电话说他们已经更新了应用程序,但弹出窗口仍然出现。知道导致这种情况的任何想法吗?

1 个答案:

答案 0 :(得分:2)

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

你可以将结果字符串直接与.compare()比较,如“1.10.0”.compare(“2.1.0”),它返回一个ComparisonResult