小组件|创建 Widget Extension

了解如何在 Xcode 中创建 Widget Extension,掌握调试运行方式与常见注意事项。

如何查看小组件输出日志

在 Xcode 中,如果通过主 App 编译运行,在操作小组件的时候,Xcode 看不到小组件部分代码的打印的日志输出。

这是因为 Widget 是一个 独立的 target,需要和主 App 分开运行。如果你 Run 主 App 的 targetXcode 的调试器不会 attach 到 Widget Extension,所以你看不到它的日志。

需要在 Xcode 中 Target 修改为 Widget,然后运行才能看到小组件打印的日志。

与小组件共享组件代码

有时候,小程序不仅需要展示数据,还想要提供操作数据的能力。此时,需要使用主 App 中的 APIService 或 ViewModel 方法。

Widget 不能共享 App 运行时的状态数据,但是可以共享静态数据、纯逻辑函数等代码。具体来说,

不推荐共享

  • ViewModel 代码不推荐共享。建议在 Widget 中单独实现相关的 ViewModel。

推荐共享

  • APIConfig 推荐共享,主要是一些静态配置。
  • APIService 推荐共享。APIService 的方法都是独立的网络请求,不依赖任何运行时状态,只需要参数。

例如,我们希望 Widget 中能访问主 App 中定义的 APIConfig 文件,在 Inpector 中配置 Target 即可:

与小组件共享认证数据

小组件不能直接访问主 App 私有沙盒里的认证数据(比如在主 App 的 UserDefaults 或未共享的 Keychain 里存的 Token)。

主 App和小组件是不同的进程、不同的容器。要让小组件拿到认证信息,需要显式“共享”。