Today Widget est une extension iOS qui affiche des informations interactives directement dans le Centre de notifications ou sur l'écran « Aujourd'hui ». L'utilisateur voit des données à jour « météo, taux de change, calendrier » sans ouvrir l'application principale. Selon l'Apple WWDC (2025), l'utilisation de WidgetKit a augmenté de 40% après l'introduction des widgets interactifs dans iOS 17. Today Widget résout le problème d'accès rapide à l'information : un coup d'œil à l'écran « et l'utilisateur obtient les données nécessaires sans naviguer dans l'application.
Points clés
Today Widget (également connu sous le nom de widget du Centre de notifications) est un élément d'interface iOS qui affiche des informations condensées d'une application sans la lancer. L'utilisateur voit le widget en balayant vers la gauche sur l'écran de verrouillage ou sur l'écran d'accueil. Le widget peut afficher des données dynamiques « taux de change, dernières nouvelles, statut des tâches, état de l'appareil.
Historiquement, Today Widget est apparu dans iOS 8 en tant qu'extension du Centre de notifications implémentée via le framework Centre de notifications. Avec iOS 14, Apple a présenté WidgetKit « une architecture entièrement repensée qui permet de placer les widgets directement sur l'écran d'accueil. Today Widget au sens moderne est un widget WidgetKit situé dans la section « Aujourd'hui » (la section des widgets à gauche du premier écran).
L'objectif principal est de réduire le temps d'accès à l'information. Au lieu d'ouvrir l'application, de naviguer dans les menus et d'attendre le chargement, l'utilisateur voit immédiatement les données nécessaires. Selon Apple (2024), les applications avec widgets montrent un engagement utilisateur 27% plus élevé. Cas d'utilisation supplémentaires : actions rapides (marquer une tâche comme terminée), surveillance (fréquence cardiaque, activité) et statut (charge de la batterie, notifications).
Un développeur Today Widget dispose de deux approches : WidgetKit moderne (iOS 14+) et l'extension legacy NCWidgetProviding (iOS 8«13). Le choix dépend de la version minimale prise en charge d'iOS. WidgetKit est recommandé pour les nouveaux projets, NCWidgetProviding pour prendre en charge les anciens appareils.
| Caractéristique | WidgetKit | NCWidgetProviding |
|---|---|---|
| iOS minimum | iOS 14 | iOS 8 |
| Emplacement | Écran d'accueil + « Aujourd'hui » | « Aujourd'hui » uniquement |
| Tailles | Petit, Moyen, Grand | Taille fixe unique |
| Interactivité | Boutons et interrupteurs iOS 17+ | Ouverture d'application uniquement |
| Mise à jour | Timeline Provider | widgetPerformUpdate |
| Langage | SwiftUI | UIKit |
Si votre application prend en charge iOS 14 et versions ultérieures « utilisez WidgetKit. Il offre des fonctionnalités riches : plusieurs tailles, configuration via les intents, refonte avec iOS 17 et liens profonds. La déclarativité de SwiftUI rend le code du widget compact et lisible. Timeline Provider gère automatiquement le planning des mises à jour en tenant compte de la consommation d'énergie.
Uniquement si la prise en charge d'iOS 9«13 est requise. NCWidgetProviding est plus simple à implémenter « c'est un UIViewController classique avec un protocole. Cependant, il est limité : taille unique, UIKit uniquement, sans configuration. Apple recommande de passer à WidgetKit même pour les anciens projets en utilisant availability check : WidgetKit sur iOS 14+, NCWidgetProviding comme fallback.
Dans iOS moderne, il existe trois types de widgets selon leur objectif fonctionnel. Chaque type résout son propre problème et nécessite une approche différente de la conception des données et de l'interface. La classification aide à choisir l'architecture appropriée pour votre application.
Affichent des informations statiques ou mises à jour périodiquement : météo, date, taux de change, statut du serveur. Les données sont mises à jour selon un planning via Timeline Provider. L'utilisateur n'interagit pas avec le widget « il lit seulement. Les widgets informatifs sont les plus simples à implémenter, ne nécessitent pas de gestion d'événements tactiles et fonctionnent en arrière-plan sans permissions supplémentaires.
Avec iOS 17, WidgetKit prend en charge les boutons, interrupteurs et curseurs dans les widgets. L'utilisateur peut effectuer une action « marquer une tâche, mettre la musique en pause, allumer une lumière « sans ouvrir l'application. Les widgets interactifs utilisent App Intents pour transmettre les actions à l'application principale. Limitation : uniquement sur l'écran d'accueil, pas dans la section « Aujourd'hui » jusqu'à iOS 18.
L'utilisateur personnalise les données affichées via l'interface système « sélectionne une ville pour la météo, un compte pour les finances, une catégorie pour les actualités. Implémenté via Intents Extension et la configuration dans WidgetBundle. Les widgets configurables augmentent la personnalisation et la pertinence des informations pour chaque utilisateur.
Voyons le processus de création d'un Today Widget en SwiftUI avec WidgetKit. Le widget affichera le taux de change actuel avec des mises à jour automatiques. WidgetKit nécessite trois composants : une structure de widget, un Provider avec configuration et une Vue pour l'affichage.
import WidgetKit
import SwiftUI
@main
struct CurrencyWidget: Widget {
let kind: String = "CurrencyWidget"
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Provider()) { entry in
CurrencyWidgetEntryView(entry: entry)
}
.configurationDisplayName("Currency Rate")
.description("Current USD/RUB exchange rate")
.supportedFamilies([.systemSmall, .systemMedium])
}
}
Le Provider est responsable de la préparation des données pour l'affichage. La méthode getTimeline crée un planning de mise à jour : la prochaine mise à jour dans 15 minutes. TimelineProvider garantit que le widget affiche des données à jour sans interroger constamment le serveur.
struct Provider: TimelineProvider {
func getSnapshot(in context: Context,
completion: @escaping (CurrencyEntry) -> Void) {
let entry = CurrencyEntry(date: Date(), rate: 92.5)
completion(entry)
}
func getTimeline(in context: Context,
completion: @escaping (Timeline<CurrencyEntry>) -> Void) {
let rate = CurrencyService().fetchRate()
let entry = CurrencyEntry(date: Date(), rate: rate)
let nextUpdate = Calendar.current.date(
byAdding: .minute, value: 15, to: Date()
) ?? Date()
let timeline = Timeline(entries: [entry], policy: .after(nextUpdate))
completion(timeline)
}
}
Timeline Provider est le mécanisme central de WidgetKit pour gérer les données de Today Widget. Au lieu de mises à jour périodiques par minuteur (comme dans l'ancien NCWidgetProviding), WidgetKit utilise le concept de timeline « une séquence d'entrées avec des horodatages. Le système affiche l'entrée actuelle jusqu'à son expiration, puis passe à la suivante ou en demande une nouvelle.
Timeline prend en charge trois politiques : .after(date) « prochaine mise à jour à la date spécifiée ; .never « le widget ne se met pas à jour jusqu'à un appel explicite à WidgetCenter.reloadAllTimelines ; .atEnd « mise à jour après l'affichage de la dernière entrée. Pour un Today Widget avec taux de change, la politique .after avec un intervalle de 15«30 minutes est optimale. L'efficacité énergétique est un avantage clé de WidgetKit : le système regroupe les mises à jour de tous les widgets dans une fenêtre.
Si les données changent avant l'expiration du timeline (par exemple, l'utilisateur a mis à jour le taux dans l'application), appelez WidgetCenter.shared.reloadTimelines(ofKind: « CurrencyWidget »). Cela demandera un nouveau timeline au Provider et mettra à jour l'affichage. WidgetCenter permet également de recharger tous les widgets de l'application avec une seule commande « pratique après la synchronisation des données.
Apple impose des exigences strictes pour la conception de Today Widget : le contenu doit être lisible en un coup d'œil, sans éléments superflus et avec une hiérarchie claire. La violation des recommandations HIG (Human Interface Guidelines) est un motif de rejet lors de la publication sur l'App Store. Trois principes : lisibilité rapide, cohérence et hiérarchie.
L'utilisateur passe moins d'une seconde sur un widget. N'ajoutez pas plus de 3«4 éléments de données. Police « minimum 11pt pour les étiquettes, 17pt pour les valeurs. Utilisez le gras (Semibold) pour les chiffres clés. Évitez le défilement « Today Widget ne défile pas.
WidgetKit prend en charge trois tailles : Petit (170×170pt), Moyen (364×170pt), Grand (364×382pt). Pour Today Widget dans la section « Aujourd'hui », Moyen est le choix le plus courant. Conception adaptative via EnvironmentValues : modifiez la densité d'informations en fonction de la taille. Petit « un nombre, Moyen « nombre + graphique, Grand « tableau.
Le widget doit s'afficher correctement dans les thèmes clair et sombre sans actions supplémentaires du développeur « WidgetKit récupère automatiquement les couleurs système. Dynamic Type pour les widgets est limité : la taille de police est fixe, mais doit être lisible. UIColor.label et UIColor.systemBackground sont les couleurs de base pour le texte et l'arrière-plan dans les deux thèmes.
Foire aux questions
Aujourd'hui, c'est le même widget WidgetKit. La différence réside uniquement dans l'emplacement : sur l'écran d'accueil et dans la section « Aujourd'hui » (à gauche du premier écran). Avant iOS 14, Today Widget était une extension NCWidgetProviding distincte qui fonctionnait uniquement dans le Centre de notifications. Maintenant, c'est un WidgetKit unifié.
WidgetKit ne met pas à jour les widgets par minuteur. Le développeur définit le planning via Timeline Provider : entrées avec horodatages. Le système garantit une mise à jour à l'heure spécifiée en tenant compte des économies d'énergie « peut retarder de quelques minutes. L'intervalle minimum est de 15 minutes, mais Apple recommande au maximum une fois par heure.
Oui, à partir d'iOS 17, WidgetKit prend en charge les boutons, interrupteurs et curseurs via App Intents. Les éléments interactifs fonctionnent sur l'écran d'accueil de l'iPhone et de l'iPad. La prise en charge dans la section « Aujourd'hui » est apparue dans iOS 18. Pour iOS 16 et versions antérieures « seule l'ouverture de l'application en touchant le widget.
Il n'y a pas de limites. Une application peut enregistrer n'importe quel nombre de widgets via WidgetBundle « chacun avec son propre type, taille et configuration. L'utilisateur les ajoute individuellement. Recommandé pas plus de 3«5 widgets pour ne pas surcharger le choix de l'utilisateur.
WidgetKit est entièrement pris en charge dans le simulateur iOS. Exécutez le schéma de la cible WidgetKit dans Xcode « le widget apparaîtra sur l'écran d'accueil du simulateur. Pour tester Timeline Provider, utilisez WidgetKit Debug Profile : Xcode → Product → Profile → WidgetKit Debug. Vérifiez le comportement réel sur un appareil physique.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi