You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何判断iOS应用是从TestFlight还是App Store启动?

区分TestFlight与App Store启动的方法

嘿,刚好踩过这个坑!其实从App Store直接启动应用时,launchOptions里的sourceApplication字段是不存在的(返回nil)——只有从其他应用跳转过来时,这个值才会被填充,比如TestFlight、Safari或者其他第三方App。

所以你可以这样完善判断逻辑:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // 检测是否从TestFlight启动
    if let sourceApp = launchOptions?[UIApplication.LaunchOptionsKey.sourceApplication] as? String, 
       sourceApp == "com.apple.TestFlight" {
        // 这里写TestFlight专属逻辑
        print("App从TestFlight启动")
    } else {
        // 这里默认处理App Store启动的情况(包括用户直接点击图标启动)
        print("App从App Store启动或直接打开")
    }
    return true
}

另外,如果你需要更精准地区分App Store版本和TestFlight版本(比如用户把TestFlight的App直接放到桌面启动,这时sourceApplication也会是nil),可以结合应用收据来判断:

func isTestFlightBuild() -> Bool {
    guard let receiptURL = Bundle.main.appStoreReceiptURL else {
        // 没有收据,大概率是调试包或企业包
        return false
    }
    // TestFlight的收据路径包含"sandboxReceipt"
    return receiptURL.lastPathComponent == "sandboxReceipt"
}

这个方法更可靠,因为不管是从TestFlight跳转启动还是直接启动,只要是TestFlight分发的包,收据都会带有sandbox标识。

内容的提问来源于stack exchange,提问作者Rob

火山引擎 最新活动