如何解决“授权' keychain-access-groups '具有不允许的值”的问题,这是一个配置文件问题。

14
我的应用程序中使用了Keychain,在以AdHoc方式运行应用程序时出现了错误。但是在使用开发者预配文件和调试器运行时,没有出现错误。如果应用程序已经安装在设备上,并且我从Xcode重新安装它,则会注意到应用程序无法访问Keychain。这肯定是由于这些错误导致的。
我花费了很多时间在搜索这个错误,有些人建议添加包含keychain-access-group的合法性文件。但是我找不到任何苹果文档或合理的解释需要什么样的合法性文件。
有谁能帮我解决这个问题吗?
5个回答

7
有一篇相当古老的文章(这里),在其中提到你需要使用权限证书来说明你的应用程序捆绑的标识符位于哪个Bundle Seed下。因为KeyChain就是通过这种方式才能让你的应用程序访问它。
一旦两个应用程序的Bundle标识符在它们的Bundle Seed中相同,它们就可以共享KeyChain访问权限。
因此,如果应用程序A具有共同的Bundle Id: com.yourcompany.AAAAAA 应用程序B也有一个共同的Bundle Id: com.yourcompany.BBBBBB
并且它们都在其.ipa文件中有一个权限证书文件(包含一个关键字符串“keychain-access-groups”数组,并且分别对应“.com.yourcompany.AAAAA”和 “.com.yourcompany.BBBBB”)。
那么它们就可以共享KeyChain访问权限。
关于您的Debug/AdHoc问题,请在项目设置中查看“Code Signing”->“Code Signing Entitlements”,确保两者都为空。

现在,Xcode会通过变量自动添加称为“应用程序Bundle Seed”的前缀。在钥匙串访问组中,授权文件将如下所示:$(AppIdentifierPrefix)com.your.entry。 - Adriano

5

我找到了一个解决方案。adHoc和Debug配置文件的appID前缀似乎是不同的。

让我们假设我们有以下AppIds:

  • a.com.mycompany.A(ad hoc构建)
  • b.*(debug/开发构建)

Xcode创建了第二个id,其前缀用于签署应用程序的调试版本。第一个id用于签署应用程序的AdHoc版本。

如果现在尝试使用accessgroup a.com.mycompany 的钥匙串,则可以获得AdHoc版本的钥匙串访问权限。如果使用accessgroup b.com.mycompany,则可以在调试版本中获得访问权限。两者都不能同时使用。

我通过创建新的通配符id:a.* 并将其用于“iOS Team Provisioning Profile:*”来解决这个问题。似乎此配置文件以某种方式用于签署应用程序的调试版本。实际上,我认为它使用开发配置文件进行签名?!

无论如何,通过这个更改,我能够在调试和adHoc模式下使用相同的访问组访问钥匙串。

看来新注册的用户没有遇到这个问题,现在Xcode自动创建具有正确前缀的id。


1
正如其他答案中提到的那样,这是由于使用了错误的预配资料文件所致。
我在Xcode 6中遇到了这个问题。我的项目中有两个目标,其中一个无论我做了什么(包括在构建设置中更改预配资料文件设置),它始终使用错误的资料文件进行构建。
经过数小时的摸索,我注意到以下内容:
1. 良好的目标正在使用名为“XC:com.mycompanyname.mytargetname1”的预配资料文件。 2. 错误的目标正在使用名为“XC:”的资料文件。此资料文件是“Xcode:Wildcard AppID()”资料文件。
我不知道这两个资料文件来自何处,但我解决问题的方法是:
1. 登录developers.apple.com 2. 进入“证书、标识符和资料文件” 3. 在左侧栏下的“预配资料文件”下单击“全部” 4. 单击“+” 5. 创建一个名为“XC:com.mycompanyname.mytargetname2”的新资料文件(注意:设置将针对您的应用程序,com.mycompanyname.mytargetname2应替换为您的应用程序的捆绑标识符)。
之后它就可以工作了。

可能是这个原因,但我只有一个配置文件出现了这个错误(而且我一直只有一个)。 - EntangledLoops

1

我遇到了同样的问题,还有其他变体(例如错误 ITMS-90164)。 调整各种设置几个小时后,仍然无法解决。 最终,我不情愿地按照Apple的技术Q&A QA1814:设置Xcode以自动管理您的配置文件的步骤进行操作。 这些步骤非常简单明了,配有截图和重要提示,即在完成更改后重新启动Xcode。 最重要的是,它解决了我的问题,最终允许我将存档上传到应用商店。


1
除了上述提到的解决方案外,我遇到了这个问题的不同变体。
我的组织标识符更改了(可能与在developer.apple.com上接受最新协议更新有关),因此我的应用程序前缀也更改了。所以以前可能是ABCCYZ0U812.com.whatever.app,现在变成了90210SUXX11.com.whatever.app 当我去提交并且出现屏幕上显示“将(应用程序名称)发送到Apple”的列表时,在我的应用程序下展开列表(两次,因为我猜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. 点击证书文件旁边的箭头,打开存放证书文件的文件夹
  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

可能有更加细致的方法来修复它,而不需要删除所有内容,但这应该可以让你走上正确的轨道。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接