记录几个小点,当做备忘,希望也能帮助到你。
如果公司让你调研Widget,这一篇也足够用了。
Widget 申请证书时候,需要选择group,为了Widget和主工程共享数据,要注意的是需要在主工程和Widget工程的target下要配置好group。而且刚配置完的时候并不能及时的生效,需要等一会,可能是苹果的缓存。
支持iOS14+
仅能用Swift + SwiftUI开发
默认点击Widget打开主应用程序
支持三种大小
○ 小-支持整体点击跳转到固定为止,可以进行tab切换等操作
○ 中-支持具体控件点击跳转
○ 大-同中支持最多5组Widget,每组Widget三个
不提供动画,仅支持静态页面展示。
不支持拖拽、滚动等复杂的交互,不支持 Switch 等控件。
更新频率由系统通过机器学习来动态分配
○ 当用户编辑主屏幕添加小组件时,先触发 placeholder(in:) 来优先显示占位效果。
○ 在预览状态,触发 getSnapshot(for:in:completion:) 创建快照以提供相对完整的信息展示。
○ 在主屏上成功添加小组件后,将执行 getTimeline(for:in:completion:) 获取未来时间节点上的数据和相关更新策略。通过 timeline Provider 提供在未来特定的时间节点的一连串 TimelineEntry 数据,并且可以设置 更新策略:
○ after:在特定时间后触发更新。
○ atEnd:在 timeline 中所有的 entry 都展示完之后更新。
○ never:仅在主 App 触发更新。苹果提供了两种刷新小组件的方式,System reloads 和 App-driven reload。
○ System reload
由系统发起,刷新频次也由系统控制。为了保证性能,系统会根据各个 reload 请求的重要程度来控制是否刷新 timeline。因此,过于频繁的提交刷新请求可能无法达到预期。
○ App-driven reloads
由 App 触发小组件的 timeline 刷新。当主程序在后台时,可通过后台推送触发刷新;当主程序在前台时,可以通过 WidgetCenter 实现。因为Widget是一个独立的工程,可以单独搞一个Swift工程出来开发,不需要load整个主工程,提高编译开发速度,等开发完再合入到主工程的Widget框架内