14

我在我的应用程序中使用钥匙串,当以 AdHoc 运行应用程序时出现此错误。当我使用调试器(使用开发人员配置文件)运行它时,它不会出现。如果设备上已经安装了应用程序,并且我从 Xcode 再次安装它,那么我注意到该应用程序无权访问钥匙串。它肯定是因为这些错误而发生的。

我花了很多时间在谷歌上搜索该错误,有些人建议在其中添加带有 keychain-access-group 的权利文件。但我找不到任何 Apple 文档或任何合理的解释需要什么权利文件。

有人可以帮我解决吗?

4

5 回答 5

7

这里有一篇很老的帖子 您需要有权说明您的应用程序的捆绑种子位于哪个捆绑标识符下,因为这是 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 访问权限..

  • 关于您的 Debug/AdHoc 问题。在项目设置中,检查“代码签名”->“代码签名权利”下两者都是空的..
于 2012-05-22T20:25:31.050 回答
5

我找到了解决方案。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。

于 2013-07-09T09:42:59.753 回答
1

正如其他答案中提到的,这是由于使用了错误的配置文件。

我在 Xcode 6 中遇到了这个问题。我的项目中有两个目标,其中一个总是使用错误的配置文件构建,无论我做什么(包括更改构建设置中的配置配置文件设置)。

在玩了几个小时之后,我注意到以下几点:

  1. 好的目标是使用名为“XC:com.mycompanyname.mytargetname1”的配置文件
  2. 损坏的目标使用了一个名为“XC:”的配置文件。此配置文件是“Xcode: Wildcard AppID ()”配置文件。

我不知道其中任何一个来自哪里,但我为解决我的问题所做的是:

  1. 登录 developer.apple.com
  2. 转到证书、标识符和配置文件
  3. 单击左侧栏上的 Provisioning Profiles 下的“All”
  4. 点击“+”
  5. 创建了一个名为“XC:com.mycompanyname.mytargetname2”的新配置文件(注意:设置将特定于您。com.mycompanyname.mytargetname2 应替换为您的应用程序包 ID。

之后它起作用了。

于 2014-11-04T18:01:09.920 回答
1

除了上面提到的解决方案之外,我还遇到了这个问题的不同变体。

我的组织标识符已更改(可能与接受 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位,但现在与新的团队标识符不匹配

我做了以下

  1. 单击配置文件旁边的箭头以将 Finder 打开到配置文件所在的位置
  2. 删除了该目录中的所有 .mobileprovision 文件
  3. 关闭提交对话框
  4. 在 Xcode 中,单击 Xcode -> Preferences -> Accounts 并让我的帐户重新下载配置文件
  5. 尝试再次提交存档

现在一切都匹配并且有效

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

可能有一种更微妙的方法可以在不删除所有内容的情况下修复它,但这应该会让你走上正确的轨道。

于 2017-07-13T13:21:00.643 回答
1

遇到了同样的问题和其中的几个变体(错误 ITMS-90164 等)。在摆弄了几个小时的各种设置后,无济于事,我终于不情愿地遵循了 Apple 的技术问答 QA1814:设置 Xcode 以自动管理您的配置文件。这些步骤非常简单明了,并附有屏幕截图和在完成更改后回收 Xcode 的重要说明。最重要的是,它解决了我的问题并最终允许我将我的存档上传到 App Store。

于 2015-11-17T23:07:20.060 回答