所有开源包
平台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: Date
3}
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 ?? .now
23 
24 var body: some WidgetConfiguration {
25 StaticConfiguration(kind: "launch", provider: LaunchProvider()) { entry in
26 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.git

Swift 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]

截图

由该 package 渲染的天气、饮水、健身、倒计时、名言和习惯 widget
同一组 Home Screen widget 的深色模式
统计 sparkline、进度圆环、折线图和柱状图 view
同一组图表 view 的深色模式
Lock Screen 电量、活动圆环、倒计时、天气和统计 widget
同一组 Lock Screen widget 的深色模式

时间线

  1. 仓库开放

  2. 标记 v1.0.0;该标签下的 manifest 无法加载,因此这个版本无法构建

  3. 精简为约 240 行的单一 library target;test target 仍未能编译

  4. 重建并发布为 2.0.0(PR #28):view 从历史记录中恢复并修复,加入 Swift 6 manifest、Swift Testing 测试、DocC、示例应用和 CI

相关链接

相关文章

阅读文章