我在为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中的应用程序)?
答案 0 :(得分:1)
我不相信您会找到一种可靠的方法来检测审阅者活动。
是否可以在您的服务器上专门为您的新应用添加一个新的“API”,它可以发布其版本并获得是否已发布的答案(以及随后应该与哪个服务器通信) )?
一旦应用获得批准,您就可以更改此新API的答案。您甚至可以在NSUserDefaults中存储“生产”答案,这样一旦应用程序“知道”它正在生产中,应用程序就不再检查每个时间 - 大概您永远不会恢复到分段。