如何检测应用程序是从应用程序商店还是从 MDM 商店安装的?

How to detect if app was installed from the app store or from MDM store?

该应用程序可以从应用商店安装,也可以通过企业分发安装。我基本上想要实现的是,如果应用程序是从应用商店下载的,我将 enable/disable 一些功能。否则,如果应用程序是从 MobileIRON 的应用程序商店安装的,作为 MDM 供应商,我将 enable/disable 一些功能。将上传到两个商店的应用程序二进制文件将相同。 那么,如果应用程序是从 Appstore 还是从 MDM 商店安装的,我如何以编程方式区分?

查了很多相关问题,但是none居然答对了这个案例。从应用程序包中读取 embedded.mobileprovision 文件是否足够,或者是否有任何其他方法来检测安装源。

编辑:根据回复,我是否可以在构建过程中在某处放置一些值,以便稍后我可以根据安装源提取该值?如果有人能提供一些想法,将不胜感激。

与其尝试确定您要定位的 "store",不如为您的应用程序创建一个新目标(例如,您可以将其命名为 "My App Enterprise")。

然后,在 Build Settings -> Other C Flags:

中创建一个条目

-DTARGET_ENTERPRISE=1 // the Flag "-D" precedes "TARGET_ENTERPRISE", 1 = TRUE

在您的代码中

- (void)someRoutine
{
#ifdef TARGET_ENTERPRISE
    // Do something or show something specifically for Enterprise apps
#else
    // Do something or show something specifically for App Store apps
#endif
}

请注意,这将要求您提供 2 个版本(AdHoc/Release 和 Enterprise)。

Apple 推出了 iOS 7 所谓的 "Managed App Configuration"。

https://developer.apple.com/library/ios/samplecode/sc2279/Introduction/Intro.html

这允许 MDM 系统通过 MDM 将 NSDictionary 值部署到 NSUserDefaults 中的保留命名空间中。如果您的应用在 there/can 中找到一个值,请访问您在 MDM 中的命名空间。

从那时起,我们就将它用于我们的 App Store 应用程序。不需要有两个二进制文件。