我在我的应用程序中使用钥匙串,当以 AdHoc 运行应用程序时出现此错误。当我使用调试器(使用开发人员配置文件)运行它时,它不会出现。如果设备上已经安装了应用程序,并且我从 Xcode 再次安装它,那么我注意到该应用程序无权访问钥匙串。它肯定是因为这些错误而发生的。
我花了很多时间在谷歌上搜索该错误,有些人建议在其中添加带有 keychain-access-group 的权利文件。但我找不到任何 Apple 文档或任何合理的解释需要什么权利文件。
有人可以帮我解决吗?
我在我的应用程序中使用钥匙串,当以 AdHoc 运行应用程序时出现此错误。当我使用调试器(使用开发人员配置文件)运行它时,它不会出现。如果设备上已经安装了应用程序,并且我从 Xcode 再次安装它,那么我注意到该应用程序无权访问钥匙串。它肯定是因为这些错误而发生的。
我花了很多时间在谷歌上搜索该错误,有些人建议在其中添加带有 keychain-access-group 的权利文件。但我找不到任何 Apple 文档或任何合理的解释需要什么权利文件。
有人可以帮我解决吗?
这里有一篇很老的帖子, 您需要有权说明您的应用程序的捆绑种子位于哪个捆绑标识符下,因为这是 KeyChain 允许您的应用程序访问它的方式。
一旦两个应用程序在其捆绑种子中具有相同的捆绑标识符,它们就可以共享 KeyChain 访问权限。
因此,如果应用程序 A 有一个 Common Bundle Id:com.yourcompany.AAAAAA 并且应用程序 B 作为一个 Common Bundle Id com.yourcompany.BBBBBB
如果他们的 .ipa 中都有一个权利文件(plist 包含一个键控数组“keychain-access-groups”,字符串为“.com.yourcompany.AAAAA”和 .com.yourcompany.BBBBB”)
他们可以共享 KeyChain 访问权限..
我找到了解决方案。adHoc 和 Debug 配置文件的 appID 前缀似乎不同。
假设我们有以下 AppId:
a.com.mycompany.A
(临时构建)b.*
(调试/开发版本)第二个 id 由 Xcode 创建,它的前缀用于对应用程序的调试版本进行签名。第一个 id 用于签署应用程序的 AdHoc 版本。
如果您现在尝试将钥匙串与访问组一起使用,a.com.mycompany
您将获得 AdHoc 版本的钥匙串访问权限。如果您使用b.com.mycompany
访问组,您可以在调试版本中访问。它们都不适合两者。
我通过创建一个新的通配符 id:a.* 并将其用于“iOS Team Provisioning Profile:*”解决了这个问题。似乎此配置文件以某种方式用于签署应用程序的调试版本。我实际上认为它使用开发配置文件来签署它?!
但是,通过此更改,我能够使用相同的访问组在调试和 adHoc 模式下访问钥匙串。
似乎新注册用户不会遇到这个问题,现在 Xcode 会自动创建一个带有正确前缀的 id。
正如其他答案中提到的,这是由于使用了错误的配置文件。
我在 Xcode 6 中遇到了这个问题。我的项目中有两个目标,其中一个总是使用错误的配置文件构建,无论我做什么(包括更改构建设置中的配置配置文件设置)。
在玩了几个小时之后,我注意到以下几点:
我不知道其中任何一个来自哪里,但我为解决我的问题所做的是:
之后它起作用了。
除了上面提到的解决方案之外,我还遇到了这个问题的不同变体。
我的组织标识符已更改(可能与接受 developer.apple.com 上的最新协议更新有关),因此我的应用程序的前缀已更改。因此,虽然以前是,但ABCCYZ0U812.com.whatever.app
现在可能是90210SUXX11.com.whatever.app
当我去提交时,您会看到“发送(应用程序名称)到 Apple”的屏幕,并且有一个名为“Binary and Entitlements”的列表,当我在我的应用程序下展开列表时(两次,因为我猜 Xcode 有第一次出现错误)我会看到类似的东西
AppName.app (5 entitlements) (provisioning profile) (arrow)
application-identifier
90210SUXX11.com.whatever.app
...
keychain-access-groups
ABCCYZ0U812.com.whatever.app
com.apple.developer.team-identifier
90210SUXX11
因此,由于某种原因,它仍在使用旧的团队标识符作为该keychain-access-groups
位,但现在与新的团队标识符不匹配
我做了以下
现在一切都匹配并且有效
AppName.app (5 entitlements) (provisioning profile) (arrow)
application-identifier
90210SUXX11.com.whatever.app
...
keychain-access-groups
90210SUXX11.com.whatever.app
com.apple.developer.team-identifier
90210SUXX11
可能有一种更微妙的方法可以在不删除所有内容的情况下修复它,但这应该会让你走上正确的轨道。
遇到了同样的问题和其中的几个变体(错误 ITMS-90164 等)。在摆弄了几个小时的各种设置后,无济于事,我终于不情愿地遵循了 Apple 的技术问答 QA1814:设置 Xcode 以自动管理您的配置文件。这些步骤非常简单明了,并附有屏幕截图和在完成更改后回收 Xcode 的重要说明。最重要的是,它解决了我的问题并最终允许我将我的存档上传到 App Store。