我正在编写一个 HomeKit 应用程序,它可以成功显示应用程序内支持的配件的实时数据。我可以读取单个值 ( HMCharacteristic.readValue
) 或使用通知来保持更新 ( HMCharacteristic.enableNotification
)。
现在我想实现在用户主屏幕上显示这些数据的小部件。这包括四个步骤:
HMHomeManager
并使用户能够选择其中一个以显示在小部件上。IntentTimelineProvider
的getTimeline
函数内部,我可以再次使用HMHomeManager
来检索我想要在小部件上显示的附件(基于存储在 的参数 - 意图中的附件的 UUID getTimeline
)configuration
。getTimeline
功能内,我可以选择显示附件小部件所需的服务和特征HMHomeManager
。到目前为止,一切正常。
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)