iOS Widget tips

记录几个小点,当做备忘,希望也能帮助到你。
如果公司让你调研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框架内

你可能感兴趣的:(iOS Widget tips)