【问题标题】:How to solve "entitlement 'keychain-access-groups' has value not permitted by a provisioning profile"如何解决“权利'钥匙串访问组'具有配置文件不允许的值”
【发布时间】:2012-01-08 15:00:36
【问题描述】:

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

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

有人可以帮我解决吗?

【问题讨论】:

    标签: ios keychain provisioning-profile adhoc entitlements


    【解决方案1】:

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

    一旦两个应用程序在其捆绑种子中具有相同的捆绑标识符,它们就可以共享 KeyChain 访问权限..

    所以如果应用程序 A 有一个通用的 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 问题。在项目设置中,检查“代码签名”->“代码签名权利”下两者都是空的..

    【讨论】:

    • 现在,被称为“App's Bundle seed”的前缀是由 Xcode 通过变量自动添加的。钥匙串访问组中的权利文件将如下所示: $(AppIdentifierPrefix)com.your.entry
    【解决方案2】:

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

    假设我们有以下 AppId:

    • a.com.mycompany.A(临时构建)
    • b.*(调试/开发版本)

    第二个 id 由 Xcode 创建,它的前缀用于对应用的调试版本进行签名。 第一个 id 用于签署应用的 AdHoc 版本。

    如果您现在尝试将钥匙串与访问组 a.com.mycompany 一起使用,您将获得 AdHoc 版本的钥匙串访问权限。如果您使用访问组b.com.mycompany,您将获得调试版本的访问权限。它们都不适合两者。

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        我的组织标识符已更改(可能与接受 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
        

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

        【讨论】:

          【解决方案5】:

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

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

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

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

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

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

          之后就成功了。

          【讨论】:

          • 这可能是导致它的原因,但我只有一个配置文件(并且只有一个)出现此错误。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-06
          • 2017-01-19
          • 2011-09-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多