平台Swift
iOS-Widget-Development-Kit
面向 WidgetKit widget、图表、timeline、App Intents 和 Live Activity 的 SwiftUI view 和辅助工具
27星标数最新版本: v2.0.0更新时间: 2026年10月15日
支持平台:iOS 17macOS 14
许可证: MIT
WidgetDevelopmentKit 是一个面向为 iOS 应用开发 widget 的开发者的 Swift package。它包含适用于 Home Screen、Lock Screen 和 StandBy widget 的现成 SwiftUI view,按 widget 尺寸调整过的图表 view,用于 timeline 以及应用与其 widget 共享数据的辅助工具,用于 widget 按钮的 App Intents,以及用于 Live Activity 的 ActivityKit attribute 和 view。widget extension 仍需你自己编写;该 package 为你省去了每个 widget 都需要的 view 以及日期、存储和重试逻辑。它没有第三方依赖。
功能特性
- Home Screen 模板,例如天气、统计、财务、日历、倒计时、时钟、健身圆环、习惯追踪、待办事项和饮水,再加上 9 个按 widget 尺寸调整的 Swift Charts view
- 15 个 Lock Screen 附属 view(circular、rectangular、inline)和 7 个 StandBy view
- Timeline 辅助工具:entry 日期、使用日历运算的刷新策略,以及通过 App Group 共享数据的带过期时间的 snapshot store
- 交互式 widget:5 个 App Intent 以及 8 个带按钮运行它们的 view
- Live Activity:10 种带有 Lock Screen 和紧凑型 Dynamic Island view 的 ActivityAttributes 类型,以及一个拒绝乱序更新的状态机
- 一个只在瞬时错误(408、5xx、超时、离线)时重试、并在 widget extension 内部快速失败的数据加载器
- 日期、数字和重试逻辑由 Swift Testing 测试覆盖,包括 NaN、零目标和夏令时切换日;有一个测试用于保持 README 代码块与已编译代码同步
快速开始
swift
1struct LaunchEntry: TimelineEntry {2 let date: Date3}4 5struct LaunchProvider: TimelineProvider {6 func placeholder(in context: Context) -> LaunchEntry {7 LaunchEntry(date: .now)8 }9 10 func getSnapshot(in context: Context, completion: @escaping (LaunchEntry) -> Void) {11 completion(LaunchEntry(date: .now))12 }13 14 func getTimeline(in context: Context, completion: @escaping (Timeline<LaunchEntry>) -> Void) {15 // One entry per hour for the next six hours, then WidgetKit asks again.16 let entries = TimelineSchedule.dates(from: .now, every: 60 * 60, count: 6).map(LaunchEntry.init)17 completion(Timeline(entries: entries, policy: .atEnd))18 }19}20 21struct LaunchCountdownWidget: Widget {22 let launchDay = DateComponents(calendar: .current, year: 2027, month: 1, day: 1).date ?? .now23 24 var body: some WidgetConfiguration {25 StaticConfiguration(kind: "launch", provider: LaunchProvider()) { entry in26 CountdownWidget(title: "Launch", targetDate: launchDay, referenceDate: entry.date)27 }28 .configurationDisplayName("Countdown")29 .supportedFamilies([.systemSmall])30 }31}安装
Xcode (File › Add Package Dependencies…)
text
1https://github.com/muhittincamdali/iOS-Widget-Development-Kit.gitSwift Package Manager
swift
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/iOS-Widget-Development-Kit.git", from: "2.0.0")3],4targets: [5 .target(name: "YourApp", dependencies: [6 .product(name: "WidgetDevelopmentKit", package: "iOS-Widget-Development-Kit")7 ])8]截图






时间线
仓库开放
标记 v1.0.0;该标签下的 manifest 无法加载,因此这个版本无法构建
精简为约 240 行的单一 library target;test target 仍未能编译
重建并发布为 2.0.0(PR #28):view 从历史记录中恢复并修复,加入 Swift 6 manifest、Swift Testing 测试、DocC、示例应用和 CI