如何解决"权利"keychain-access-groups'具有配置文件不允许的价值"

Kos*_*Kim 11 keychain adhoc ios

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

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

有人可以帮我解决吗?

小智 6

有一个很老的帖子在这里 你需要的权利说哪捆绑标识符您应用程序的包种子是根据,因为这是钥匙链允许应用程序通过访问它的方式.

一旦两个应用程序在其捆绑种子中具有相同的Bundle标识符,它们就可以共享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问题.在项目设置中,检查"代码签名" - >"代码签名权利",两者都是空的..


Tra*_*tec 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:*”解决了这个问题。似乎此配置文件以某种方式用于签署应用程序的调试版本。我实际上认为它使用开发配置文件来签名?!

但是,通过此更改,我能够使用相同的访问组以调试和临时模式访问钥匙串。

新注册用户似乎不会遇到这个问题,现在 Xcode 会自动创建一个带有正确前缀的 id。