Today Widget è un'estensione iOS che visualizza informazioni interattive direttamente nel Centro Notifiche o nella schermata “Oggi”. L'utente vede dati aggiornati — meteo, tassi di cambio, calendario — senza aprire l'app principale. Secondo Apple WWDC (2025), l'uso di WidgetKit è cresciuto del 40% dopo l'introduzione dei widget interattivi in iOS 17. Today Widget risolve il problema dell'accesso rapido alle informazioni: uno sguardo allo schermo — e l'utente ottiene i dati necessari senza navigare nell'app.
Punti chiave
Today Widget (noto anche come widget del Centro Notifiche) è un elemento dell'interfaccia iOS che visualizza informazioni sintetiche da un'app senza avviarla. L'utente vede il widget scorrendo verso sinistra sulla schermata di blocco o sulla schermata Home. Il widget può mostrare dati dinamici — tassi di cambio, ultime notizie, stato delle attività, stato del dispositivo.
Storicamente, Today Widget è apparso in iOS 8 come estensione del Centro Notifiche implementata tramite il framework Centro Notifiche. Con iOS 14, Apple ha introdotto WidgetKit — un'architettura completamente riprogettata che consente di posizionare i widget direttamente sulla schermata Home. Today Widget in senso moderno è un widget WidgetKit posizionato nella sezione “Oggi” (la sezione dei widget a sinistra della prima schermata).
L'obiettivo principale è ridurre il tempo di accesso alle informazioni. Invece di aprire l'app, navigare nei menu e attendere il caricamento, l'utente vede immediatamente i dati necessari. Secondo Apple (2024), le app con widget mostrano un coinvolgimento degli utenti superiore del 27%. Casi d'uso aggiuntivi: azioni rapide (contrassegnare un'attività come completata), monitoraggio (frequenza cardiaca, attività) e stato (carica della batteria, notifiche).
Uno sviluppatore di Today Widget ha due approcci disponibili: WidgetKit moderno (iOS 14+) e l'estensione legacy NCWidgetProviding (iOS 8–13). La scelta dipende dalla versione minima supportata di iOS. WidgetKit è consigliato per i nuovi progetti, NCWidgetProviding per supportare dispositivi più vecchi.
| Caratteristica | WidgetKit | NCWidgetProviding |
|---|---|---|
| iOS minimo | iOS 14 | iOS 8 |
| Posizionamento | Schermata Home + “Oggi” | Solo “Oggi” |
| Dimensioni | Piccolo, Medio, Grande | Una dimensione fissa |
| Interattività | Pulsanti e interruttori iOS 17+ | Solo apertura app |
| Aggiornamento | Timeline Provider | widgetPerformUpdate |
| Linguaggio | SwiftUI | UIKit |
Se la tua app supporta iOS 14 e versioni successive — usa WidgetKit. Fornisce funzionalità ricche: dimensioni multiple, configurazione tramite intent, riprogettazione con iOS 17 e collegamenti profondi. La dichiaratività di SwiftUI rende il codice del widget compatto e leggibile. Timeline Provider gestisce automaticamente la pianificazione degli aggiornamenti tenendo conto del consumo energetico.
Solo se è richiesto il supporto per iOS 9–13. NCWidgetProviding è più semplice da implementare — è un normale UIViewController con un protocollo. Tuttavia è limitato: dimensione singola, solo UIKit, nessuna configurazione. Apple raccomanda di passare a WidgetKit anche per progetti vecchi utilizzando availability check: WidgetKit su iOS 14+, NCWidgetProviding come fallback.
In iOS moderno, esistono tre tipi di widget in base allo scopo funzionale. Ogni tipo risolve il proprio problema e richiede un approccio diverso alla progettazione dei dati e dell'interfaccia. La classificazione aiuta a scegliere l'architettura giusta per la tua app.
Mostrano informazioni statiche o aggiornate periodicamente: meteo, data, tassi di cambio, stato del server. I dati vengono aggiornati secondo una pianificazione tramite Timeline Provider. L'utente non interagisce con il widget — legge solo. I widget informativi sono i più semplici da implementare, non richiedono la gestione di eventi touch e funzionano in background senza permessi aggiuntivi.
Con iOS 17, WidgetKit supporta pulsanti, interruttori e cursori nei widget. L'utente può eseguire un'azione — contrassegnare un'attività, mettere in pausa la musica, accendere una luce — senza aprire l'app. I widget interattivi utilizzano App Intents per passare le azioni all'app principale. Limitazione: solo sulla schermata Home, non nella sezione “Oggi” fino a iOS 18.
L'utente personalizza i dati visualizzati attraverso l'interfaccia di sistema — seleziona una città per il meteo, un conto per le finanze, una categoria per le notizie. Implementato tramite Intents Extension e configurazione in WidgetBundle. I widget configurabili aumentano la personalizzazione e la pertinenza delle informazioni per ogni utente.
Vediamo il processo di creazione di un Today Widget in SwiftUI utilizzando WidgetKit. Il widget mostrerà il tasso di cambio corrente con aggiornamenti automatici. WidgetKit richiede tre componenti: una struttura widget, un Provider con configurazione e una View per la visualizzazione.
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])
}
}
Il Provider è responsabile della preparazione dei dati per la visualizzazione. Il metodo getTimeline crea una pianificazione degli aggiornamenti: il prossimo aggiornamento tra 15 minuti. TimelineProvider garantisce che il widget mostri dati aggiornati senza interrogare costantemente il server.
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 è il meccanismo centrale di WidgetKit per gestire i dati di Today Widget. Invece di aggiornamenti periodici tramite timer (come nel vecchio NCWidgetProviding), WidgetKit utilizza il concetto di timeline — una sequenza di voci con timestamp. Il sistema mostra la voce corrente fino alla sua scadenza, poi passa alla successiva o ne richiede una nuova.
Timeline supporta tre politiche: .after(date) — prossimo aggiornamento alla data specificata; .never — il widget non si aggiorna fino a una chiamata esplicita a WidgetCenter.reloadAllTimelines; .atEnd — aggiornamento dopo la visualizzazione dell'ultima voce. Per un Today Widget con tassi di cambio, la politica .after con un intervallo di 15–30 minuti è ottimale. L'efficienza energetica è un vantaggio chiave di WidgetKit: il sistema raggruppa gli aggiornamenti di tutti i widget in una finestra.
Se i dati cambiano prima della scadenza della timeline (ad esempio, l'utente ha aggiornato il tasso nell'app), chiama WidgetCenter.shared.reloadTimelines(ofKind: “CurrencyWidget”). Questo richiederà una nuova timeline al Provider e aggiornerà la visualizzazione. WidgetCenter consente anche di ricaricare tutti i widget dell'app con un singolo comando — comodo dopo la sincronizzazione dei dati.
Apple impone requisiti rigorosi per il design di Today Widget: il contenuto deve essere leggibile a colpo d'occhio, senza elementi superflui e con una chiara gerarchia. Violare le raccomandazioni HIG (Human Interface Guidelines) è motivo di rifiuto durante la pubblicazione sull'App Store. Tre principi: leggibilità rapida, coerenza e gerarchia.
L'utente spende meno di un secondo su un widget. Non aggiungere più di 3–4 elementi di dati. Carattere — minimo 11pt per le etichette, 17pt per i valori. Usa il grassetto (Semibold) per i numeri chiave. Evita lo scorrimento — Today Widget non scorre.
WidgetKit supporta tre dimensioni: Piccolo (170×170pt), Medio (364×170pt), Grande (364×382pt). Per Today Widget nella sezione “Oggi”, Medio è la scelta più comune. Design adattivo tramite EnvironmentValues: cambia la densità delle informazioni in base alla dimensione. Piccolo — un numero, Medio — numero + grafico, Grande — tabella.
Il widget deve essere visualizzato correttamente nei temi chiaro e scuro senza azioni aggiuntive dello sviluppatore — WidgetKit rileva automaticamente i colori di sistema. Dynamic Type per i widget è limitato: la dimensione del carattere è fissa, ma deve essere leggibile. UIColor.label e UIColor.systemBackground sono i colori di base per testo e sfondo in entrambi i temi.
Domande frequenti
Oggi è lo stesso widget WidgetKit. La differenza è solo nel posizionamento: sulla schermata Home e nella sezione “Oggi” (a sinistra della prima schermata). Prima di iOS 14, Today Widget era un'estensione NCWidgetProviding separata che funzionava solo nel Centro Notifiche. Ora è un unico WidgetKit.
WidgetKit non aggiorna i widget tramite timer. Lo sviluppatore imposta la pianificazione tramite Timeline Provider: voci con timestamp. Il sistema garantisce l'aggiornamento all'ora specificata tenendo conto del risparmio energetico — potrebbe ritardare di qualche minuto. L'intervallo minimo è di 15 minuti, ma Apple consiglia non più di una volta all'ora.
Sì, a partire da iOS 17, WidgetKit supporta pulsanti, interruttori e cursori tramite App Intents. Gli elementi interattivi funzionano sulla schermata Home di iPhone e iPad. Il supporto nella sezione “Oggi” è apparso in iOS 18. Per iOS 16 e versioni precedenti — solo apertura dell'app toccando il widget.
Non ci sono limiti. Un'app può registrare qualsiasi numero di widget tramite WidgetBundle — ciascuno con il proprio tipo, dimensione e configurazione. L'utente li aggiunge individualmente. Raccomandato non più di 3–5 widget per non sovraccaricare la scelta dell'utente.
WidgetKit è completamente supportato nel simulatore iOS. Esegui lo schema del target WidgetKit in Xcode — il widget apparirà sulla schermata Home del simulatore. Per testare Timeline Provider, usa WidgetKit Debug Profile: Xcode → Product → Profile → WidgetKit Debug. Verifica il comportamento reale su un dispositivo fisico.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.