Alle Open-Source-Pakete
PlattformSwift

iOS-Widget-Development-Kit

SwiftUI-Views und Helfer für WidgetKit-Widgets, Charts, Timelines, App Intents und Live Activities

27SterneNeueste Version: v2.0.0Aktualisiert: 15. Oktober 2026
Plattformen:iOS 17macOS 14

Lizenz: MIT

WidgetDevelopmentKit ist ein Swift-Package für Entwickler, die Widgets für ihre iOS-Apps bauen. Es enthält fertige SwiftUI-Views für Home-Screen-, Lock-Screen- und StandBy-Widgets, auf Widget-Größen abgestimmte Chart-Views, Helfer für Timelines und für die Daten, die die App mit ihrem Widget teilt, App Intents für Widget-Buttons sowie ActivityKit-Attributes und -Views für Live Activities. Die Widget Extension schreiben Sie weiterhin selbst; das Package erspart Ihnen die Views sowie die Datums-, Speicher- und Retry-Logik, die jedes Widget braucht. Es hat keine Drittanbieter-Abhängigkeiten.

Funktionen

  • Home-Screen-Templates wie Wetter, Statistiken, Finanzen, Kalender, Countdown, Uhr, Fitness-Ringe, Habit-Tracker, To-do und Wasser, dazu 9 auf Widget-Größen abgestimmte Swift-Charts-Views
  • 15 Lock-Screen-Accessory-Views (circular, rectangular, inline) und 7 StandBy-Views
  • Timeline-Helfer: Entry-Daten, Reload-Policies mit Kalenderarithmetik und ein Snapshot-Store mit Ablaufzeit für Daten, die über eine App Group geteilt werden
  • Interaktive Widgets: 5 App Intents und 8 Views mit Buttons, die sie ausführen
  • Live Activities: 10 ActivityAttributes-Typen mit Lock-Screen- und kompakten Dynamic-Island-Views sowie eine State Machine, die Updates in falscher Reihenfolge zurückweist
  • Ein Data Loader, der nur bei vorübergehenden Fehlern (408, 5xx, Timeouts, offline) erneut versucht und innerhalb der Widget Extension schnell fehlschlägt
  • Datums-, Zahlen- und Retry-Logik wird von Swift-Testing-Tests abgedeckt, einschließlich NaN, Zielwert null und Tagen mit Zeitumstellung; ein Test hält die Codeblöcke der README mit kompiliertem Code synchron

Schnellstart

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}

Installation

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]

Screenshots

Wetter-, Wasser-, Fitness-, Countdown-, Zitat- und Habit-Widgets, gerendert aus dem Package
Dieselben Home-Screen-Widgets im Dark Mode
Views für Statistik-Sparkline, Fortschrittsring, Liniendiagramm und Balkendiagramm
Dieselben Chart-Views im Dark Mode
Lock-Screen-Widgets für Akku, Aktivitätsringe, Countdown, Wetter und Statistiken
Dieselben Lock-Screen-Widgets im Dark Mode

Zeitleiste

  1. Repository eröffnet

  2. v1.0.0 getaggt; das Manifest an diesem Tag lädt nicht, daher lässt sich diese Version nicht bauen

  3. Auf ein einziges Library-Target von rund 240 Zeilen vereinfacht; das Test-Target kompilierte weiterhin nicht

  4. Neu aufgebaut und als 2.0.0 veröffentlicht (PR #28): Views aus der Historie wiederhergestellt und korrigiert, Swift-6-Manifest, Swift-Testing-Tests, DocC, Beispiel-App und CI

Links

Verwandter Artikel

Artikel lesen