我正在尝试将 HealthKit 与我正在构建的应用程序集成,并且我似乎已成功为其添加了权利。我已经使用适当的应用程序 ID 创建并下载了配置文件,并且 Xcode Capabilities 选项卡中的 HealthKit 切换看起来很好:

ios - 缺少 HealthKit 权利-LMLPHP

但是,当我运行该应用程序时,出现以下错误:

HealthKit authorization denied!
Error Domain=com.apple.healthkit Code=4 "Missing com.apple.developer.healthkit entitlement." UserInfo={NSLocalizedDescription=Missing com.apple.developer.healthkit entitlement.}

这是一个奇怪的错误消息,因为 Add the "HealthKit" entitlement to your App ID 已经被检查为成功完成。

但是,一旦我收到该错误,已检查的 App ID 权利将更改为:

ios - 缺少 HealthKit 权利-LMLPHP

但是在我的开发者帐户中的 App ID 中,App ID 显示确实启用了 HealthKit。

ios - 缺少 HealthKit 权利-LMLPHP

它在我的配置文件中显示了相同的内容。

ios - 缺少 HealthKit 权利-LMLPHP

而且我只有一个 App ID 和一个配置文件可供选择,所以我不可能把它们混在一起。

最佳答案

我现在有一个与 CloudKit 权利非常相似的问题:( 在模拟器和设备中的调试中工作,但在使用分发配置文件构建时不是,权利最终不会出现在最终存档中。虽然通过了验证......奇怪。

你有没有机会解决这个问题?

如果没有,您仍然可以检查一些事情。

  • 为确保您的 Xcode 不会混淆要使用哪个配置文件 - 转到首选项 -> 帐户 -> 查看详细信息 -> 右键单击​​其中一个配置文件 -> 在 Finder 中显示。
    现在删除该文件夹中的所有配置文件。我们这样做是为了 Xcode 不会意外使用错误的配置文件。
  • 为确保 Xcode 可以找到最新的配置文件,我将再次重新生成配置文件,以防(删除并重新添加)使用新名称。然后下载并双击。 (通过 Xcode 下载可能会不稳定)
  • 在这一点上,值得检查配置文件是否确实包含正确的授权 key 。您可以运行“security cms -D -i profile_name.mobileprovision”并检查权利部分。它应该包含 'com.apple.developer.healthkit' 键
  • 现在您可以转到 Xcode 并明确设置代码签名标识(类似于“iPhone 开发人员:...”或“iPhone 分发:...” - 取决于您进行测试的方式)。之后,您可以显式设置 Provisioning 配置文件 - Xcode 应该能够找到它并向您显示配置文件的名称 - 它应该与您在第 2 步中使用的名称匹配。确保您为调试/发布正确设置了一些东西(再次取决于你是如何测试的)。如果 Xcode 提示它找不到具有特定 id 的配置文件 -> 转到配置文件所在的文件夹并确保它在那里,文件名将以 id 开头,然后只需重新启动 Xcode,它应该会在此之后工作。

  • 如果您正在构建实际的文件或 ipas,最好知道这些包中的最终权限是什么(您可以打开它们并检查;对于存档:存档文件(右键单击,显示包内容)-> 产品 -> 应用程序-> app name.app(右键单击,显示包内容)-> archived-expanded-entitlements.xcent(文本文件);对于ipa(类似):重命名为zip -> unzip -> Payload -> app name.app - > 归档扩展权利.cent

    - - - 编辑 - - -

    我已经解决了我的问题。我认为我的项目文件处于一种奇怪的状态,因为我在过去的某个时候重命名了一些东西,并且不得不手动更新项目文件中的一些条目。

    我知道构建过程的哪一步出错了。 ProcessProductPackaging 步骤获取原始权利并生成最终用于签名的 .xcent 文件。

    出于某种原因,对于发布配置,Xcode 不尊重我的权利文件的位置,而是仅使用 SDK 中的默认模板,例如。/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/Entitlements.plist

    我无法弄清楚究竟是为什么,但是对于 Debug 配置,事情似乎可以正常工作。所以我修改了我的发布配置并创建了一个具有不同名称的新配置,之后构建过程开始获取我的权利文件。从项目文件 diff 中,仍然不清楚为什么以前的事情不起作用。

    关于ios - 缺少 HealthKit 权利,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33071726/

    10-14 23:09
    查看更多