ios - 如何在iOS应用程序中检测Apple的审阅者?

标签 ios app-store testflight

我在提交 iOS 应用更新时遇到了一个有趣的问题。我有 2 个 API 版本:生产版本和登台版本。 TestFlight 构建使用临时服务器,App Store 构建通过此检查使用生产:

if ([[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"]) {
    // TestFlight, use staging API
} else {
    // App Store, use production API
}

这很好用。我们可以使用下一个版本的 API 来测试下一个版本的应用程序,同时保持已发布的版本与生产 API 配合使用。

问题是,当我们将应用程序提交给 Apple 进行审核时,他们的审核者现在拥有需要新 API 的新代码,但上述检查将他们指向生产 API。这导致了崩溃,因此我们被拒绝了。

我知道我们应该进行适当的 API 版本控制,这样我们就可以让新旧 API 同时在生产环境中运行,但遗憾的是我们还没有达到那个阶段。我们错误地认为 Apple 审核者会采用第一个代码路径(使用登台服务器),并且我们会在应用程序获得批准后手动发布该应用程序,并将新的 API 部署到生产环境中,这样一切都会顺利进行。

所以,最后是这个问题。代码中是否有任何方法可以检测应用程序是否由Apple的审阅者运行,是否使用登台服务器?还是我们搞砸了,需要将新的 API 投入生产(从而破坏当前 App Store 中的应用程序)?

最佳答案

我不相信您会找到检测审阅者事件的可靠方法。

是否可以在您的服务器上专门为您的新应用程序添加一个新的“API”,它可以在其中发布其版本并获得关于它是否已发布的答案(以及随后应该与哪个服务器通信) )?

应用获得批准后,您就可以通过这个新 API 更改答案。您甚至可以在 NSUserDefaults 中存储“生产”答案,以便应用程序在“知道”它处于生产状态后不再每次都进行检查 - 大概您永远不会恢复到登台状态。

关于ios - 如何在iOS应用程序中检测Apple的审阅者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27579714/

相关文章:

ios - 从 iOS 添加事件到 Google 日历

ios - 如何在 SocketIOClient 中快速使用命名空间

ios - 从 Testflight 打开按钮启动应用程序时崩溃

ios - 新的 testflight 与 ios 7 的兼容性

ios - swift 中的 .successor() 是什么?

ios - SKStore 评论 Controller : How are the limits handled?

iphone - 应用程序不允许访问UDID,并且不得使用UIDevice的uniqueIdentifier方法

ios - App Store 提交/分发错误 "failed to open ssh session"

ios - XCode 7.1 Testflight 内部测试错误

ios - 队列何时会认为任务已完成?