我正在尝试遵循 this answer 中描述的约定管理同一应用程序的应用程序商店和企业版,但我看到了一些非常有趣的行为。
如链接答案中所述,我创建了一个新方案,定义了一个新的“企业”构建配置,并将企业方案设置为使用单独的新 bundle ID。两种方案都指向相同的目标,该目标依赖于新的构建配置来切换行为。我成功地生成了企业版本并通过无线方式分发它,但是,当我在同一个模拟器或手机上安装同一应用程序的两个版本时企业版本实际上运行该应用程序的应用程序商店版本.我所做的任何特定于企业的更改都不会得到反射(reflect)。即使当我关闭应用程序时 - iOS7 动画回到主屏幕也会动画回到应用程序商店图标 - 而不是企业图标。
显然,我希望能够将它们维护为独立运行的单独版本。我觉得我一定是从根本上误解了目标和计划才会出现这种行为。任何帮助将不胜感激。
最佳答案
非常有趣的错误。
发生的事情是:
- 我们在企业版上使用 Facebook 登录来通过我们自己的服务进行身份验证。
- FB SDK 将接管并踢出网络/ View 或 Facebook 应用程序,具体取决于它自己的逻辑。至关重要的是 - 我们使用的是在他们的开发者网站上配置的相同的 Facebook“应用程序”。
- 当fb返回时,它会调用
fb{app_id}
表示的url方案 - iOS 决定(始终)打开首次安装的、响应该 URL 方案的应用程序。在大多数情况下,这是应用商店版本而不是企业版本。
这个问题的解决方案 - 也许在这一点上很明显 - 是使用两个不同的 Facebook 应用程序,以便 iOS 可以将返回的 OAuth 响应路由到正确的应用程序。根据我最初正在研究的答案,最好由...来完成
- 创建一个名为
FACEBOOK_ID
的新用户定义build设置 - 使用生产应用 ID 进行调试和发布,同时使用新 ID 进行企业应用。
- 在 info.plist 中,将
FacebookAppID
的值更改为${FACEBOOK_ID}
- 在您的网址类型中,将 facebook 架构更改为
fb${FACEBOOK_ID}
- 这应该会成功路由您的 Facebook 登录信息。
请记住,这是所有深层链接的普遍潜在错误 - 不仅仅是 Facebook 登录。
关于iOS不同的bundle id映射到同一个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22304558/