【问题标题】:Detect AppStore installation of iOS app检测 iOS 应用的 AppStore 安装
【发布时间】:2013-04-19 01:07:44
【问题描述】:

我需要在我的应用中实现自定义日志记录。

为此,我需要检测当前版本的应用程序是否已从应用商店安装,或者正在从 xcode 运行,或者是 TestFlight 版本。

根据安装源的不同,应用中有什么不同吗?

我不想在开发环境中有一些不同的东西。

【问题讨论】:

    标签: iphone ios objective-c app-store detection


    【解决方案1】:

    您可以通过从应用程序包中读取 Embedded.mobileprovision 文件来获得其中的一部分:

    NSString *provisionPath = [[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"];
    

    如果不存在,则说明您在应用商店构建中。

    如果确实存在,您需要找出调试配置文件和临时配置文件之间的一些差异,并查找这些差异以确定您所在的版本。

    因为 XCode 会自动在调试配置中使用“DEBUG”标志设置应用程序,而在 Release 中未设置(默认情况下用于 AdHoc 构建),您最好在应用商店构建中禁用日志记录并根据 DEBUG 宏标志确定日志记录的级别。

    【讨论】:

    • 看起来不错,您认为我可以在发布应用程序之前找到一种方法对其进行测试吗?例如,使用 Release Scheme 构建和运行,以确保它在发布时有效。
    • 您编译、发布或临时的所有应用程序都将始终包含一个 embedded.mobileprovision。只有最终的 App Store 版本缺少此文件。您可以通过从您的设备下载任何应用程序商店应用程序并探索应用程序包来验证它不存在...请注意,我没有提出这种技术,HockeyApp 因找到此技术而获得了充分的信任(或者至少那是我是从那里了解到的)。
    • 查看这个 SO 答案,了解有关检测调试与临时的代码:stackoverflow.com/a/17930198/1216830
    • 这不再适用于 Apple 的官方 TestFlight beta 流程,因为它们通常会通过相同的发布配置。知道该怎么做吗?是的,单独的构建配置仍然是可能的,但如果您可以为两者使用相同的发布配置并仍然确定这是测试版(带有橙色圆圈)还是来自 App Store 的发布版,那就太好了。
    • @bago 您可以通过 TestFlight 对其进行测试,原因 Adrian 解释得很好
    【解决方案2】:

    您可以使用定义宏的构建配置来让您知道您已为 testflight 构建。

    例如,我们在调试版本中设置了一个宏 USE_TESTFLIGHT,在我们的代码中我们这样做:

    #ifdef USE_TESTFLIGHT
    //do something test-flight specific
    [TestFlight takeOff:kTestFlightAppToken];
    #endif
    

    您可以创建新的构建配置,根据您编译/分发应用程序的方式设置不同的宏,并使用 ifdef 基于这些配置执行不同的任务。

    【讨论】:

    • 虽然可行,但不同的构建配置不符合“我不想在开发环境中有不同的东西。”
    • 同意。这个建议虽然对某些开发需求有用,但并不能回答所提出的问题。
    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 2018-02-25
    • 2015-12-29
    • 1970-01-01
    • 2015-04-16
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多