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

时间:2011-11-29 08:43:56

标签: ios keychain adhoc

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

我花了很多时间在谷歌搜索该错误,有些人建议在其中添加带钥匙串访问组的权利文件。但是我找不到任何Apple文档或任何合理的解释所需的权利文件。

有人可以帮我解决吗?

5 个答案:

答案 0 :(得分:6)

有一篇很老的帖子here 您需要权利来说明您应用的捆绑种子所属的捆绑标识符,因为这是KeyChain允许您的应用程序访问它的方式。

一旦两个应用程序在其捆绑种子中具有相同的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问题。在项目设置中,检查“代码签名” - >“代码签名权利”,两者都是空的..

答案 1 :(得分:4)

我找到了解决方案。对于adHoc和调试配置文件,appID前缀似乎不同。

我们假设我们有以下AppIds:

  • a.com.mycompany.A
  • 湾*

第二个id由xcode创建,它的前缀用于签署应用程序的调试版本。 第一个ID用于签署应用的AdHoc版本。

如果您现在尝试将密钥链与accessgroup a.com.mycompany一起使用,您将获得AdHoc版本的密钥链访问权限。如果您使用accessgroup b.com.mycompany,则可以在调试版本中访问。它们都不适用于两者。

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

但是,通过这些更改,我可以在调试和adHoc模式下使用相同的访问组访问密钥链。

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

答案 2 :(得分:1)

遇到了同样的问题及其中的一些变化(错误ITMS-90164等)。经过几个小时的各种设置,无济于事,我终于,不情愿地,跟着Apple's Technical Q&A QA1814: Setting up Xcode to automatically manage your provisioning profiles。这些步骤非常简单明了,完成了屏幕截图以及在完成更改后回收Xcode的重要注意事项。最重要的是,它解决了我的问题并允许我最终将我的存档上传到App Store。

答案 3 :(得分:0)

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

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

经过数小时的游戏,我注意到以下几点:

  1. 好的目标是使用名为" XC的配置文件:com.mycompanyname.mytargetname1"
  2. 破碎的目标使用名为" XC:"的配置文件。此配置文件是" Xcode:通配符AppID()"轮廓。
  3. 我不知道其中任何一个来自哪里,但我为解决问题所采取的措施是:

    1. 登录developers.apple.com
    2. 转到证书,标识符&个人资料
    3. 点击"全部"在左栏的供应配置文件下
    4. 点击" +"
    5. 创建了一个名为" XC的新配置文件:com.mycompanyname.mytargetname2" (注意:设置将特定于您.com.mycompanyname.mytargetname2应替换为您的应用程序的软件包ID。
    6. 之后它起作用了。

答案 4 :(得分:0)

除了上面提到的解决方案之外,我遇到了这个问题的另一种变体。

我的组织标识已更改(可能与接受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 - >偏好 - >帐户并让我的帐户重新下载配置文件
  5. 试图再次提交存档
  6. 现在一切都匹配并且有效

    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
    

    可能有一种更精致的方式来修复它而不删除所有内容,但这应该会让你走上正确的轨道。