缺少 HealthKit 权利

Posted

技术标签:

【中文标题】缺少 HealthKit 权利【英文标题】:Missing HealthKit Entitlement 【发布时间】:2015-10-12 00:50:10 【问题描述】:

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

但是,当我运行应用程序时,我收到以下错误:

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 权利将更改为:

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

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

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

【问题讨论】:

您应该向 Apple 提交错误并附上显示此问题的示例项目。 您需要检查您的配置文件和项目的捆绑标识符。 确保你看到Dev Forums - Debugging Entitlement Issues 【参考方案1】:

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

你有没有偶然解决这个问题?

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

    为了确保您的 Xcode 不会混淆要使用的配置文件 - 转到首选项 -> 帐户 -> 查看详细信息 -> 右键单击​​其中一个配置文件 -> 在 Finder 中显示。 现在删除该文件夹中的所有配置文件。我们这样做是为了让 Xcode 不会意外使用错误的配置文件。

    为了确保 Xcode 可以找到最新的配置文件,我会再次重新生成配置文件以防万一(删除并重新添加)使用新名称。然后下载并双击。 (通过 Xcode 下载有时会很不稳定)

    此时值得检查配置文件是否确实包含正确的授权密钥。您可以运行“security cms -D -i profile_name.mobileprovision”并检查权利部分。它应该包含“com.apple.developer.healthkit”键

    现在您可以转到 Xcode 并明确设置代码签名身份(类似于“iPhone 开发人员:...”或“iPhone 分发:...” - 取决于您如何进行测试) .之后,您可以显式设置 Provisioning 配置文件 - Xcode 应该能够找到它并向您显示配置文件的名称 - 它应该与您在步骤 2 中使用的名称匹配。确保您为调试/发布正确设置(再次取决于你是如何测试的)。如果 Xcode 抱怨找不到具有特定 id 的配置文件 -> 转到配置文件所在的文件夹并确保它在那里,文件名将以 id 开头,然后重新启动 Xcode,之后它应该可以工作了。

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

----- 编辑 ------

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

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

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

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

【讨论】:

精美捕捉,虽然不是同一个问题,但故障排除帮助我解决了这个问题。最后重置设备并重新启动 Xcode 帮助了我的事业。干杯【参考方案2】:

在我的情况下,我集成了 HealthKit 一段时间,一切正常,但有一天它停止工作,看起来与你的情况相似。

在尝试了我能在网上找到的任何直接/开箱即用的解决方案后,当我看到这个answer时,我的搜索终于结束了:

只需重新启动我的 iPhone 即可解决问题!

希望它也能解决您的问题。祝你好运

【讨论】:

谢谢,这也有助于解决 Error Domain=com.apple.healthkit Code=3 "Failed to look up source with bundle identifier

以上是关于缺少 HealthKit 权利的主要内容,如果未能解决你的问题,请参考以下文章

Meteor 中的 Healthkit 插件

iOS8 应用程序使用 HealthKit 在 Xcode6.0.1 上崩溃

Apple Healthkit 和 iOS 7 部署目标

仅观看由于缺少 HealthKit info.plist 键而被拒绝的应用程序二进制文件

HealthKit框架

如何通过 healthkit 使用 Apple Watch 心率更新 iOS 应用程序? (HealthKit 同步)