检测iOS应用程序的AppStore安装

6

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

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

根据安装来源,应用程序中有一些不同之处吗?

我不想在开发环境中有任何不同。

2个回答

11

您可以通过从应用程序包中读取embedded.mobileprovision文件来部分实现:

NSString *provisionPath = [[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"];
如果不存在,您就处于应用商店版本中。 如果存在,您需要找出调试和 ad-hoc 配置文件之间的差异,并查找以确定您当前使用的是哪个版本。 由于 XCode 自动在 Debug 配置文件中设置了“DEBUG”标志,而在 AdHoc 构建中默认使用 Release 标志,因此最好在应用商店版本中禁用日志记录,并根据 DEBUG 宏标志确定日志记录级别。

1
看起来很不错,你觉得在发布应用之前我能找到一种测试它的方法吗?例如使用“Release Scheme”构建和运行,以确保它在发布时能够正常工作。 - bago
所有你编译、发布或自行分发的应用程序都会包含一个embedded.mobileprovision文件。只有最终的App Store版本才会缺少这个文件。你可以通过从设备上下载任何App Store应用并浏览应用程序包来验证它不存在...请注意,我并不是发明这个技巧的人,HockeyApp应该得到完全的赞誉,因为正是从那里我了解到了这个技巧。 - Kendall Helmstetter Gelner
请查看此SO答案中有关检测调试与Ad-hoc的代码:https://dev59.com/q2Qo5IYBdhLWcg3wMs-2#17930198 - CharlesA
1
这个问题在苹果官方的TestFlight beta流程中已经不再适用,因为它们通常会通过相同的发布配置。那么有什么想法吗?是的,仍然可以使用单独的构建配置,但如果您可以同时使用相同的发布配置并确定这是否是测试版(带有橙色圆圈)或来自应用商店的发布版本,那将是很好的。 - Adrian Schönig
@bago,你可以通过TestFlight进行测试,Adrian已经很好地解释了原因。 - loretoparisi

0

您可以使用构建配置来定义一个宏,让您知道您已经为TestFlight构建了应用程序。

例如,我们将调试构建设置为宏USE_TESTFLIGHT,在我们的代码中,我们这样做:

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

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


虽然这样做可以工作,但不同的构建配置无法满足“我不想在开发环境中有任何不同的东西”的要求。 - Kendall Helmstetter Gelner
同意。虽然这个建议对某些开发需求有用,但并没有回答所提出的问题。 - William Denniss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接