小编the*_*max的帖子

如何获取 HomeKit 值以在 iOS 14 小组件中使用?

我正在编写一个 HomeKit 应用程序,它可以成功显示应用程序内支持的配件的实时数据。我可以读取单个值 ( HMCharacteristic.readValue) 或使用通知来保持更新 ( HMCharacteristic.enableNotification)。

现在我想实现在用户主屏幕上显示这些数据的小部件。这包括四个步骤:

  1. 动态意图从 中获取所有已注册(和支持)的附件,HMHomeManager并使用户能够选择其中一个以显示在小部件上。
  2. IntentTimelineProvidergetTimeline函数内部,我可以再次使用HMHomeManager来检索我想要在小部件上显示的附件(基于存储在 的参数 - 意图中的附件的 UUID getTimelineconfiguration
  3. 仍在该getTimeline功能内,我可以选择显示附件小部件所需的服务和特征HMHomeManager

到目前为止,一切正常。

  1. 但是,当我尝试从使用之前选择的特征中读取值时HMCharacteristic.readValue,回调包含一个错误,说明

错误域=HMErrorDomain 代码=80“缺少 API 权利。”

Widget 的 Info.plist 包含“隐私 - HomeKit 使用说明”字段,并且 Target 具有 HomeKit 功能。

经过一番研究,我得出了以下理论:显然整个 WidgetKit API 在后台运行我的代码。而且 HomeKit 似乎不允许从后台上下文进行访问。好吧,它确实允许访问 Homes/Services/Characteristics,但它不允许读取或写入 Characteristics(我想确保应用程序开发人员使用 HomeKit 自动化,并且不要尝试实现由某些后台进程控制的自定义自动化他们的应用程序在 iPhone 上运行)。

我的(简化的)getTimeline代码:

func getTimeline(for configuration: SelectAccessoryIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> …
Run Code Online (Sandbox Code Playgroud)

entitlements homekit widgetkit swiftui ios14

7
推荐指数
0
解决办法
957
查看次数

标签 统计

entitlements ×1

homekit ×1

ios14 ×1

swiftui ×1

widgetkit ×1