如何在运行时判断iOS应用是否通过Crashlytics Beta安装?
判断iOS应用是否通过Crashlytics Beta渠道安装的可行方法
当然有靠谱的办法!下面是几个开发者常用的运行时判断方案,你可以根据项目情况选择:
方案1:用Firebase Crashlytics官方API检测
如果你的应用已经集成了Firebase Crashlytics(现在Crashlytics Beta已经归入Firebase Beta Distribution生态),直接调用官方提供的API是最稳妥的方式:
import FirebaseCrashlytics func isBetaInstallation() -> Bool { return Crashlytics.crashlytics().didDetectBetaInstallation() }
这个方法会直接返回当前应用是否通过Firebase Beta渠道安装,是官方维护的可靠判断逻辑。
方案2:检查Info.plist中的Beta专属标识
Crashlytics Beta安装的应用会在Info.plist中自动注入特定键值对,你可以读取这些标识来判断:
func isBetaFromPlist() -> Bool { guard let infoDict = Bundle.main.infoDictionary else { return false } // 适配新旧版本的Beta标识键,旧版是FabricBeta,新版是FIRBeta return infoDict["FIRBeta"] != nil || infoDict["FabricBeta"] != nil }
注意:键名可能随Firebase版本更新略有变化,建议结合当前集成的SDK版本确认。
方案3:读取嵌入式描述文件判断
Beta渠道安装的应用使用的是Ad Hoc或Beta类型的描述文件,你可以在运行时读取描述文件内容识别:
func isBetaFromProvisioningProfile() -> Bool { guard let profilePath = Bundle.main.path(forResource: "embedded", ofType: "mobileprovision") else { return false } guard let profileData = try? Data(contentsOf: URL(fileURLWithPath: profilePath)) else { return false } let profileString = String(data: profileData, encoding: .ascii) // Beta/Ad Hoc描述文件会包含相关关键词,正式版则没有 return profileString?.contains("Beta") ?? false || profileString?.contains("AdHoc") ?? false }
方案4:检查UserDefaults中的Beta安装标记
Crashlytics Beta在安装流程中会在UserDefaults留下专属标记,你可以检查这些键值:
func isBetaFromUserDefaults() -> Bool { let defaults = UserDefaults.standard // 适配新旧版本的存储键 return defaults.bool(forKey: "com.crashlytics.beta.install") || defaults.bool(forKey: "com.google.firebase.beta.install") }
这个方法可以作为补充,建议和其他方案结合使用提升准确性。
内容的提问来源于stack exchange,提问作者Pranit Harekar
相关产品推荐
相关产品推荐

