如何适配自动递增的Build Number实现TestFlight版本弹窗逻辑?
适配自动递增Build Number的版本弹窗逻辑方案
因为你需要保留版本号不变、仅用自动递增的Build Number来区分构建版本,只需将原有的版本号检查逻辑替换为Build Number的检查即可,具体步骤如下:
1. 修改版本信息获取函数
替换原有的getCurrentAppVersion,改为获取Build Number(对应Info.plist中的CFBundleVersion字段),同时优化解包逻辑避免崩溃:
func getCurrentBuildNumber() -> String { guard let buildNumber = Bundle.main.infoDictionary?["CFBundleVersion"] as? String else { return "1" // 兜底默认值,防止因字段缺失崩溃 } return buildNumber }
2. 调整启动时的检查逻辑
将UserDefaults中存储的"上次版本号"改为"上次Build Number",并在启动时对比当前Build Number与存储值,判断是否需要显示弹窗:
func checkBuildSpecificPopup() { let currentBuild = getCurrentBuildNumber() let savedBuild = UserDefaults.standard.string(forKey: "LastSeenBuildNumber") ?? "0" // 优先转成Int比较(避免字符串比较的坑,比如"10"字符串会被认为小于"2") if let currentInt = Int(currentBuild), let savedInt = Int(savedBuild) { if currentInt > savedInt { showTargetPopup(forBuild: currentBuild) UserDefaults.standard.set(currentBuild, forKey: "LastSeenBuildNumber") } } else { // 若Build Number含非数字字符,直接用字符串对比 if currentBuild != savedBuild { showTargetPopup(forBuild: currentBuild) UserDefaults.standard.set(currentBuild, forKey: "LastSeenBuildNumber") } } } // 根据Build Number显示对应弹窗 func showTargetPopup(forBuild buildNumber: String) { switch buildNumber { case "5": // 0.1(5)版本的弹窗逻辑 print("显示Build 5专属更新弹窗") case "6": print("显示Build 6专属更新弹窗") // 其他Build的弹窗逻辑依次添加 default: break } }
3. 可选:兼容版本号+Build Number的组合检查
如果后续需要同时区分版本号和同版本下的不同Build,可以改用组合标识作为检查依据,兼顾两种场景:
func getCurrentVersionBuildCombo() -> String { let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0" let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "1" return "\(version)-\(build)" }
之后将检查逻辑中的currentBuild和savedBuild替换为这个组合值即可。
内容的提问来源于stack exchange,提问作者erotsppa
相关产品推荐
相关产品推荐

