检查iOS应用是否在app store中存在

是否有可能以某种方式在iOS应用程序中编码如下?

if(app is live in app store) { //Do something } else { //Do other thing } 

我想避免我们的QE / Dev团队使用app进行测试的情况。 有没有办法可以检测应用程序代码的签名方式(Developer / Adhoc / Distribution)? 即使有可能,也不会消除Apple在审核时使用我们的应用进行测试的情况。 在我们的应用程序在App Store上线之前,我们记录了Apple的许多内容下载。

您可以通过检查是否缺少embedded.mobileprovision来确定您的应用是否通过app store分发。 此文件仅包含在adhoc版本中。

喜欢这个:

 if ([[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"]) { // not from app store (Apple's reviewers seem to hit this path) } else { // from app store } 

这项技术来自HockeyApp SDK 。 我个人在商店中使用这种技术的应用程序,当然有许多分发的应用程序,包括HockeyApp SDK。

基于我在“从应用程序商店”路径中在我的应用程序的特定版本中意外发布的即时崩溃,Apple的团队将遵循“不是来自应用程序商店”的路径。 让我的损失成为你的收益。 🙂

在iOS 7及更高版本中,您还可以检查:

 if ([NSData dataWithContentsOfURL:[NSBundle mainBundle].appStoreReceiptURL] != nil) { // Downloaded from App Store } else { // Not downloaded from App Store } 

这不再适用于XCode 7,我建议使用新的HockeyApp解决方法https://github.com/bitstadium/HockeySDK-iOS/blob/6b727733a5a93847b4a7ff8a734692dbe4e3a979/Classes/BITHockeyHelper.m这是一个简化版本:

 + (BOOL)isAppStoreBuild { #ifdef DEBUG return NO; #else return ([UIApplication isTestFlightBuild] == NO); #endif } + (BOOL)isTestFlightBuild { #ifdef DEBUG return NO; #else NSURL *appStoreReceiptURL = NSBundle.mainBundle.appStoreReceiptURL; NSString *appStoreReceiptLastComponent = appStoreReceiptURL.lastPathComponent; BOOL isSandboxReceipt = [appStoreReceiptLastComponent isEqualToString:@"sandboxReceipt"]; return isSandboxReceipt; #endif } 

我的应用程序中遇到了类似的情况。 至少我想我做了,我不确定我是否完全理解你的问题。

在我的应用程序中,我有帐户的用户创建内容。 我不希望开发人员内容(或Apple员工的内容)污染公共内容。 我在用户数据结构中有一个“测试”位,它被打开,测试内容对公众不可见。 我还没有提交到App Store,但是我需要与Apple合作以确保他们的帐户打开了这个测试位。

如果这不是你的目标,那么,不要紧,那么! : – )

迅速

 func isAppStoreBuild() -> Bool { if NSBundle.mainBundle().appStoreReceiptURL != nil { if let _ = NSData(contentsOfURL: NSBundle.mainBundle().appStoreReceiptURL!) { return true } } return false } 

对于Swift版本:

 private static let isTestFlight = NSBundle.mainBundle().appStoreReceiptURL?.lastPathComponent == "sandboxReceipt" 

这个完整的答案更详细地解释了如何使用它。