缺少HealthKit权利

我正在尝试将HealthKit与我正在构建的应用程序集成,我似乎已经成功添加了它的权利。 我已经创建并下载了具有相应应用ID的配置文件,并且Xcodefunction选项卡中的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确实已启用。

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

我只有一个应用程序ID和一个供应配置文件可供选择,所以我不可能让它们混淆。

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

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

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

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

  2. 为了确保Xcode能够找到最新的配置文件,我将再次重新生成配置文件以防万一(删除并重新添加)新名称。 然后下载并双击。 (通过Xcode下载可以一次性下载)

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

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

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

—–编辑——

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

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

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

我无法弄清楚究竟是什么原因,但事情似乎适用于Debug配置。 所以我修改了我的Release配置并创建了一个具有不同名称的新配置,之后构建过程开始获取我的权利文件。 从项目文件差异来看,为什么事情以前不起作用仍然不明显。

在我的情况下,我将HealthKit集成了一段时间,一切都按原样运行,有一天它停止工作,它看起来与你的情况类似。

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

只需重新启动我的iPhone修复了这个问题!

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