SuperAPI AI 工具集

axiom-extensions-widgets

智能体与模型

查看项目

更新于 10-16 00:22

技能介绍

用途:在实现 iOS 小组件(主屏、锁屏、待机、控制中心)、实时活动(Live Activities)时强制遵循正确模式,并用于排查小组件显示陈旧数据、不出现在组件库、交互按钮无响应、实时活动启动失败、控制中心控件无响应、App 与扩展间数据共享等问题。不适用于纯 App Intents 实现、SwiftUI 布局、性能剖析与通用调试。

核心观念:小组件不是迷你应用,而是系统在特定时刻渲染并归档的数据快照;扩展运行在沙箱中,内存受限(约 30MB),小组件视图内无网络访问(网络请求仅可在 TimelineProvider 中进行),与主应用使用不同的 bundle 容器,数据共享需依赖 App Groups。

主要能力(反模式与正确做法):

  1. 视图内网络请求:错误做法是在视图 onAppear 中发请求;正确做法是在主应用预取数据,写入共享存储,再调用 WidgetCenter.shared.reloadAllTimelines(),由 TimelineProvider 从共享存储读取。TimelineProvider 内允许网络请求,但有 30 秒超时、无后台会话、耗电且不保证成功,建议仅作兜底。
  2. 缺少 App Groups:UserDefaults.standard 在主应用与扩展中访问不同容器,读取返回 nil。需在两个 target 均启用 App Groups 并配置同一 group ID,使用 UserDefaults(suiteName: "group.com.myapp"),可通过 containerURL(forSecurityApplicationGroupIdentifier:) 验证。
  3. 过度刷新耗尽预算:系统每日约 40–70 次重载,一分钟间隔 60 条会数小时耗尽。建议多数小组件 15–60 分钟间隔,时效性强数据 5–15 分钟,使用 .atEnd 策略。缓存:
  4. 控制中心阻塞主线程:应使用 ControlValueProvider 的 async currentValue() 与即时 previewValue 兜底。
  5. 僵尸实时活动:结束后须显式调用 activity.end,dismissalPolicy 可选 .immediate、.default(约 4 小时)、.after(date)。
  6. 超过 4KB 数据上限:ActivityAttributes 与 ContentState 合计硬上限 4096 字节,建议 <2KB,2–3KB 可接受,3.5KB+ 有风险;应存引用而非完整对象、图片用资源目录、精简 ContentState。
  7. 小组件不出现在组件库:缺少 supportedFamilies()、Skip Install 设为 YES、未嵌入扩展、需清理构建目录等都可能是原因。