我正在尝试将HealthKit与我构建的应用程序集成,我似乎已经成功添加了它的权利。我已经创建并下载了具有相应应用ID的配置文件,并且Xcode功能选项卡中的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和一个供应配置文件可供选择,所以我不可能让它们混淆。
答案 0 :(得分:2)
我现在与CloudKit权利有一个非常类似的问题:(在模拟器和设备的调试中工作,但不是在使用分发配置文件构建时,权利只是不会在最终存档中结束。通过验证虽然...奇怪
你有没有机会解决这个问题?
如果没有,有一些事情你仍然可以检查。
要确保您的Xcode不会混淆使用哪个配置文件 - 请转到偏好设置 - >帐户 - >查看详细信息 - >右键单击其中一个配置文件 - >在Finder中显示。 现在删除该文件夹中的所有配置文件。我们这样做是为了让Xcode不会意外地使用错误的配置文件。
为了确保Xcode能够找到最新的配置文件,我会再次重新生成配置文件以防万一(删除并重新添加)新名称。然后下载并双击。 (通过Xcode下载可能会出现片状一次)
此时,值得检查供应配置文件确实包含正确的权利密钥。您可以运行'security cms -D -i profile_name.mobileprovision'并检查权利部分。它应该包含'com.apple.developer.healthkit'密钥
现在你可以去Xcode并明确设置代码签名身份(将类似'iPhone Developer:...'或'iPhone Distribution:...' - 取决于你如何进行测试) 。之后,您可以显式设置供应配置文件 - Xcode应该能够找到它并显示配置文件的名称 - 它应该与您在步骤2中使用的名称相匹配。确保为调试/发布正确设置(再次取决于你是如何测试的)。如果Xcode抱怨它无法找到具有特定ID的个人资料 - >转到配置文件所在的文件夹并确保它在那里,文件名将以id开头,然后重新启动Xcode,它应该在那之后工作。
如果您正在构建实际存档或ipas,最好知道哪些权利最终会在这些包中出现(您可以打开并检查;对于存档:存档文件(右键单击,显示包内容) - >产品 - >应用程序 - > app name.app(右键单击,显示包内容) - > archived-expanded-entitmentments.xcent(文本文件);对于ipa(类似):重命名为zip - >解压缩 - &gt ; 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配置并创建了一个具有不同名称的新配置,之后构建过程开始获取我的权利文件。从项目文件差异来看,为什么事情以前不起作用仍然不明显。
答案 1 :(得分:0)
在我的情况下,我将HealthKit集成了一段时间,一切都按原样运行,有一天它停止工作,看起来与你的情况类似。
在尝试任何直接/开箱即用的解决方案后,我能够在网上找到,当我看到answer时,我的搜索终于结束了:
只需重新启动我的iPhone就解决了这个问题!
希望它也可以修复你的。祝你好运