SuperAPI AI 工具集

widgetkit

前端与建站

查看项目

更新于 10-15 20:31

技能介绍

用途:本技能面向使用 WidgetKit 构建 iOS/macOS 小组件的开发场景,覆盖 Widget、TimelineProvider、App Intents、deep links 与 App Groups。Widget 是快照加时间线,不是迷你应用,不支持任意滚动,也不应每秒请求网络。

主要能力与栈:WidgetKit 负责 extension target 与 TimelineProvider;SwiftUI 负责各 family 的视图;App Intents 用于小组件内按钮与 AppIntent;App Groups 用于与主应用共享数据。相关技能包括 swiftui-development、swiftdata、better-mobile-interface,重 Intent 可打开应用内 StoreKit 流程。

使用方式:extension 保持精简,只读取快照并组装视图,不写重业务逻辑。用 widgetURL 或 Link 做 deep link,让应用打开正确上下文。主应用修改数据后调用 WidgetCenter.shared.reloadTimelines(ofKind:)。示例:func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> Void) { let entry = Entry(date: .now, snapshot: store.read()); completion(Timeline(entries: [entry], policy: .after(.now.addingTimeInterval(15 * 60)))) }

规则与限制:显式声明 families(systemSmall、systemMedium、accessoryInline 等),按 family 分别布局;时间线使用真实策略(.after、.never),遵守 Apple 重载预算,不要循环 reloadAll;锁屏个人数据用 placeholder、redacted、privacySensitive;数据经 App Group UserDefaults/文件或应用写入的快照共享,小组件不做交互式登录;动态文本用 Text 与 Date 的 .relative、.timer 样式;不要用长网络请求阻塞 getTimeline,缓存放应用侧。

预览与 QA:用 #Preview 配合 WidgetPreviewContext 测试多个 family,测试锁屏 redacted、StandBy、tinted(iOS 18+),并在应用内改数据后验证小组件刷新。

反模式:在小组件里放 NavigationStack 的迷你应用、每分钟轮询 API、忽略 context.isPreview/placeholder、small 与 extraLarge 共用同一视图、保存后忘记 reload。

完成标准:各 family 有独立布局;时间线策略明确且保存后重载;App Group 与快照稳定;锁屏有 placeholder 与隐私处理;deep link 指向正确上下文。