Todos los paquetes de código abierto
PlataformaSwift

iOS-Widget-Development-Kit

Vistas y helpers SwiftUI para widgets de WidgetKit, gráficos, timelines, App Intents y Live Activities

27EstrellasÚltima versión: v2.0.0Actualizado: 15 de octubre de 2026
Plataformas:iOS 17macOS 14

Licencia: MIT

WidgetDevelopmentKit es un paquete Swift para desarrolladores que construyen widgets para sus apps de iOS. Contiene vistas SwiftUI ya hechas para widgets de Home Screen, Lock Screen y StandBy, vistas de gráficos dimensionadas para widgets, helpers para timelines y para los datos que la app comparte con su widget, App Intents para los botones del widget, y atributos y vistas de ActivityKit para Live Activities. Tú sigues escribiendo la widget extension; el paquete te ahorra las vistas y la lógica de fechas, almacenamiento y reintentos que necesita todo widget. No tiene dependencias de terceros.

Características

  • Plantillas de Home Screen como weather, stats, finance, calendar, countdown, clock, fitness rings, habit tracker, to-do y water, además de 9 vistas de Swift Charts dimensionadas para widgets
  • 15 vistas accesorias de Lock Screen (circular, rectangular, inline) y 7 vistas de StandBy
  • Helpers de timeline: fechas de entry, políticas de reload que usan aritmética de calendario, y un snapshot store con caducidad para los datos compartidos a través de un App Group
  • Widgets interactivos: 5 App Intents y 8 vistas con botones que los ejecutan
  • Live Activities: 10 tipos de ActivityAttributes con vistas de Lock Screen y de Dynamic Island compacta, y una state machine que rechaza actualizaciones fuera de orden
  • Un data loader que reintenta solo errores transitorios (408, 5xx, timeouts, offline) y falla rápido dentro de la widget extension
  • Lógica de fechas, números y reintentos cubierta por tests de Swift Testing, incluyendo NaN, objetivos en cero y días de cambio de horario; un test mantiene los bloques de código del README sincronizados con el código compilado

Inicio rápido

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}

Instalación

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]

Capturas de pantalla

Widgets de weather, water, fitness, countdown, quote y habit renderizados por el paquete
Los mismos widgets de Home Screen en modo oscuro
Vistas de sparkline de stats, anillo de progreso, gráfico de líneas y gráfico de barras
Las mismas vistas de gráficos en modo oscuro
Widgets de Lock Screen de batería, anillos de actividad, countdown, weather y stats
Los mismos widgets de Lock Screen en modo oscuro

Cronología

  1. Repositorio abierto

  2. v1.0.0 etiquetada; el manifest de esta etiqueta no carga, así que esta versión no se puede compilar

  3. Simplificado a un único library target de unas 240 líneas; el test target seguía sin compilar

  4. Reconstruido y publicado como 2.0.0 (PR #28): vistas recuperadas del historial y corregidas, manifest de Swift 6, tests de Swift Testing, DocC, app de ejemplo y CI

Enlaces

Artículo relacionado

Leer el artículo