【问题标题】:The app XXX was not installed ... because the entitlements are not valid未安装应用程序 XXX ...因为权利无效
【发布时间】:2011-07-08 05:11:45
【问题描述】:

我正在尝试为一小群非开发人员测试人员创建一个构建版本,以便在我将其提交到 iTunes Connect 之前对我的应用程序进行一些 beta 测试。我已经阅读了 "Distributing Your App for Testing 上的开发者指南(您可能需要在 Apple 注册才能阅读此内容)以及 Technical Note TN2250 on Ad Hoc distribution,以及无数的博客文章和 Stack Overflow 文章,但到目前为止都没有成功。

我已采取的步骤:

  • (我正在运行 Xcode 3.2.5。)
  • 我创建了一个开发 iOS 中的配置文件 供应门户,并包括 所有测试人员的设备。
  • 我已下载此配置文件并 通过拖动将其安装到 Xcode 中 它到管理器窗口,我可以 请参阅下面的配置文件 开发>配置文件
  • 我已将此配置文件设置为“代码 签名身份>任何 iOS” 项目和目标设置
  • 我创建了一个 Entitlements.plist 文件,将属性列表类型设置为 “iPhone Entitlements plist”,已删除 除了“可以是 已调试”,并将其设置为未选中
  • 我设置了“代码签名 权利”到权利.plist (确切的,区分大小写的名称)在 项目和目标设置
  • 我已经“构建并存档”了我的项目
  • 在“管理器”窗口中,我已经 选择我的项目并点击 “分享...”,选择相同 上面使用的配置文件和 将生成的 .ipa 保存到磁盘
  • 我已经压缩了 .ipa 和 将配置文件配置为 zip 文件 并通过电子邮件发送给我的测试人员

测试人员有:

  • 解压我发送的文件
  • 尝试通过拖动安装 .ipa 到 iTunes 并同步
  • 尝试先拖动安装 .mobileprofile 到 iTunes 和 同步

在任何一种情况下,在同步结束时,他们都会看到对话框显示“应用程序 [我的应用程序名称] 没有安装在 [他们的设备和设备名称] 因为权利无效。”

值得一提的是,去年秋天我能够将同一应用程序的早期版本分发给相同的测试人员,没有任何问题,也没有权利列表。除了升级 Xcode 之外,我不确定发生了什么变化。

谁能提供任何见解或看看我做错了什么?

[我还在 Apple 的开发者论坛上发布了此内容,并将在此处重新发布任何解决方案。]

【问题讨论】:

    标签: xcode ios distribution adhoc entitlements


    【解决方案1】:

    *.ipa 文件应该已经包含配置文件。如果您使用 zip 实用程序,您可以从 Windows 机器上轻松看到这一点。该文件只是一个具有不同扩展名的 zip 存档。

    设备的 iOS 版本是否适用于应用程序?

    Setting > General > Profiles 中的设备上,您可以看到已安装的任何配置文件的列表,以消除该问题。添加新设备时,每个新证书都会创建多个副本。删除所有配置文件并检查是否添加了最新配置文件并没有什么坏处。

    当您进行构建时,在构建结果中右键单击并选择Open These Latest Results as Transcript Text File,然后搜索CodeSign,它将显示该步骤的输出,您应该清楚地看到使用了哪个配置文件。您也可以搜索 Entitlements.plist 检查使用的路径,然后查看该文件。

    您说您删除了所有行。我没有Can be debugged 条目,但我有 application-identifierkeychain-access-group 听起来与代码签名相关。这是您可以尝试的文件的纯文本版本;

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <!--- Required entitlements (in most cases shouldn't be changed) --->
        <key>application-identifier</key>
        <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
        <key>keychain-access-groups</key>
        <array>
            <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
        </array>
    
        <!--- Custom entitlements below --->
    
    
    </dict>
    </plist>
    

    如果其中任何一个出现错误,这些是 Apple 在准备分发版本时建议的步骤;

    1. 选择目标并打开构建设置检查器。确认你是 在分发配置中。
    2. 删除代码签名身份:iOS 分发:COMPANYNAME
    3. 在 Xcode Build Menu 中,选择 Clean all Targets。
    4. 使用 Finder 删除 Xcode 项目中的所有现有构建目录。
    5. 重新启动 Xcode 并打开您的项目。
    6. 在 Target Build Settings Inspector 中重新输入代码签名标识 iOS Distribution : COMPANYNAME。
    7. 重建您的项目。

    希望其中的一些帮助或激发一个啊哈!时刻。

    【讨论】:

    • 很好的答案。感谢您的洞察力和提示。最终,最后一节(关于如何进行真正干净的构建)似乎起到了作用。虽然,根据您对权利的其他说明,我实际上已经从我的项目中删除了所有权利的东西。我发现其他博客讨论了“get-task-allow”权利(现在在 XCode 中显然称为“可以调试”)的重要性,但当前的文档没有提到它。显然,现在没有必要了。 (至少这是我目前的经验。)
    【解决方案2】:

    Xcode 4 中的 Ad Hoc 构建不再需要代码签名权利 - 请参阅 Apple Technical Note TN2250 中的详细说明

    【讨论】:

      【解决方案3】:
      1. 访问开发者网站并登录。
      2. 在“Provisioning Profiles”下选择“Development”。
      3. 双击打开您的配置文件。
      4. 你会看到"App ID: somenameyouwrote(com.somenameyouwrote)"
      5. 准确写下括号之间的内容,即"com.somenameyouwrote"
      6. 在 XCode 中打开 .plist 文件。
      7. "bundle identifier:" 下输入您在第 5 步中记下的任何内容。
      8. 在 XCode 中点击"Targets" 的箭头并双击带有您的应用程序名称的目标。
      9. 在打开的目标信息窗口中,确保选中"Build"
      10. 打开"Code Signing Identity"并在其下方选择"Any iOS"
      11. "Any iOS" 的右侧选择列出的配置文件,其 Ap 标识符与您在 plist 中编写的标识符匹配。
      12. 砰!挫折结束!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多