Tous les paquets open source
PlateformeSwift

iOS-Widget-Development-Kit

Vues et aides SwiftUI pour les widgets WidgetKit, graphiques, timelines, App Intents et Live Activities

27ÉtoilesDernière version: v2.0.0Mis à jour: 15 octobre 2026
Plateformes:iOS 17macOS 14

Licence: MIT

WidgetDevelopmentKit est un package Swift pour les développeurs qui créent des widgets pour leurs apps iOS. Il contient des vues SwiftUI prêtes à l'emploi pour les widgets Écran d'accueil, Écran verrouillé et StandBy, des vues de graphiques dimensionnées pour les widgets, des aides pour les timelines et pour les données que l'app partage avec son widget, des App Intents pour les boutons de widget, et des attributs et vues ActivityKit pour les Live Activities. Vous écrivez toujours l'extension de widget ; le package vous évite les vues et la logique de date, de stockage et de nouvelle tentative dont chaque widget a besoin. Il n'a aucune dépendance tierce.

Fonctionnalités

  • Modèles Écran d'accueil comme météo, statistiques, finance, calendrier, compte à rebours, horloge, anneaux fitness, suivi d'habitudes, à faire et eau, plus 9 vues Swift Charts dimensionnées pour les widgets
  • 15 vues d'accessoire Écran verrouillé (circular, rectangular, inline) et 7 vues StandBy
  • Aides de timeline : dates d'entrée, politiques de rechargement utilisant l'arithmétique calendaire, et un magasin de snapshots avec expiration pour les données partagées via un App Group
  • Widgets interactifs : 5 App Intents et 8 vues avec des boutons qui les exécutent
  • Live Activities : 10 types ActivityAttributes avec des vues Écran verrouillé et Dynamic Island compactes, et une machine à états qui rejette les mises à jour désordonnées
  • Un chargeur de données qui ne retente que les erreurs transitoires (408, 5xx, délais, hors ligne) et échoue rapidement à l'intérieur de l'extension de widget
  • Logique de date, de nombre et de nouvelle tentative couverte par des tests Swift Testing, y compris NaN, les objectifs à zéro et les jours de changement d'heure ; un test garde les blocs de code du README synchronisés avec le code compilé

Démarrage rapide

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]

Captures d'écran

Widgets météo, eau, fitness, compte à rebours, citation et habitude générés par le package
Les mêmes widgets Écran d'accueil en mode sombre
Vues de sparkline de statistiques, anneau de progression, graphique en ligne et graphique en barres
Les mêmes vues de graphique en mode sombre
Widgets Écran verrouillé de batterie, anneaux d'activité, compte à rebours, météo et statistiques
Les mêmes widgets Écran verrouillé en mode sombre

Chronologie

  1. Dépôt ouvert

  2. v1.0.0 étiquetée ; le manifeste à cette étiquette ne se charge pas, donc cette version ne peut pas être compilée

  3. Simplifié en un seul target de bibliothèque d'environ 240 lignes ; le target de test ne compilait toujours pas

  4. Reconstruit et publié en 2.0.0 (PR #28) : vues restaurées depuis l'historique et corrigées, manifeste Swift 6, tests Swift Testing, DocC, app d'exemple et CI

Liens

Article associé

Lire l'article