123*_*123 6 xcode entitlements ios swift healthkit
我正在尝试将 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.}
Run Code Online (Sandbox Code Playgroud)
这是一个奇怪的错误消息,因为Add the "HealthKit" entitlement to your App ID已经检查为已成功完成。
但是,一旦我收到该错误,检查的应用程序 ID 权利就会更改为:
但是在我的开发者帐户的App ID中,App ID显示HealthKit确实已启用。
它在我的配置文件中显示了相同的内容。
而且我只有一个应用程序 ID 和一个配置文件可供选择,因此我不可能将它们混淆。
我现在对 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-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
我无法弄清楚到底为什么,但调试配置似乎一切正常。因此,我取消了发布配置并创建了一个具有不同名称的新配置,之后构建过程开始获取我的权利文件。从项目文件差异来看,仍然不清楚为什么之前不起作用。