如何让可交互式(Interactive)Widgets 关联的 App Intent 动态对应于可变内容?
概述
为了从全局层面打通应用的“任督二脉”、将 App 各个独立功能融入到整个系统的血脉中,Apple 从 iOS 13 开始逐步开放各个系统组件对于 App 的外部接口,比如 Siri、Widgets、Live Actives、Shortcuts 等等。
如何将 App 内部变幻莫测的细枝末节“公之于众”呢?没错,答案就是:App Intent!这里就让我们聊聊 AppIntent 在初始化时的一个小故事吧。
在本篇博文中,您将学到如下内容:
- 概述
- 1. 包含自定义内容 AppIntent 初始化时的问题
- 2. 冲云破雾:手动增加 AppIntent 构造器
- 3. 将解决方案应用到多个 AppIntent 实例上
- 总结
Apple 平台中所有 App 与系统浑然一体,必将使苹果应用生态链更加熠熠生辉!那小伙伴们还等什么呢?
Let‘s go!!!😉
1. 包含自定义内容 AppIntent 初始化时的问题
为了把我们 App 中精妙的功能推销到整个系统中去,我们必须找到一种办法对外公布应用内部的数据模型。
比如,在一个任务管理 App 中我们必须要让系统了解如何找到每个任务对应时钟的标识符。
struct ClockControlIntent: AppIntent {static var title: LocalizedStringResource = "Clock 控制"static var description: IntentDescription? = "控制 Clock 走停"var clockIDString: String?func perform() async throws -> some IntentResult {let cid = UUID(uuidString: clockIDString!)!let context = ModelContext(ModelContainer.shared)if let clock = try! context.load(uuid: cid) {if clock.state == .timing {clock.pause(true)} else if clock.state == .pause {clock.continue(true)}try! context.save(clock)WidgetCenter.shared.reloadTimelines