Today Widget este o extensie iOS care afișează informații interactive direct în Centrul de notificări sau pe ecranul „Astăzi”. Utilizatorul vede date actualizate — vremea, cursul valutar, calendarul — fără a deschide aplicația principală. Conform datelor Apple WWDC (2025), utilizarea WidgetKit a crescut cu 40% după introducerea widgeturilor interactive în iOS 17. Today Widget rezolvă problema accesului rapid la informații: o privire pe ecran — și utilizatorul primește datele necesare fără a naviga prin aplicație.
Principalele puncte
Today Widget (cunoscut și ca widgetul Centrului de notificări) — un element de interfață iOS care afișează informații compacte din aplicație fără a o lansa. Utilizatorul vede widgetul glisând ecranul la stânga pe ecranul de blocare sau pe ecranul principal. Widgetul poate afișa date dinamice — curs valutar, ultimele știri, starea sarcinilor, starea dispozitivului.
Din punct de vedere istoric, Today Widget a apărut în iOS 8 ca extensie a Centrului de notificări, implementată prin frameworkul Notification Center. Cu iOS 14, Apple a introdus WidgetKit — o arhitectură complet reproiectată care permite plasarea widgeturilor direct pe desktop. Today Widget în sens modern — un widget WidgetKit plasat în secțiunea „Astăzi” (secțiunea de widgeturi la stânga primului ecran).
Scopul principal este reducerea timpului de acces la informații. În loc să deschidă aplicația, să navigheze prin meniu și să aștepte încărcarea, utilizatorul vede imediat datele necesare. Conform Apple (2024), aplicațiile cu widgeturi arată o implicare a utilizatorilor cu 27% mai mare. Scenarii suplimentare: acțiuni rapide (marcarea unei sarcini ca finalizată), monitorizare (puls, activitate) și stare (încărcare baterie, notificări).
Dezvoltatorul Today Widget are la dispoziție două abordări: WidgetKit modern (iOS 14+) și extensia legacy NCWidgetProviding (iOS 8–13). Alegerea depinde de versiunea minimă de iOS suportată. WidgetKit este recomandat pentru proiecte noi, NCWidgetProviding — pentru suportul dispozitivelor vechi.
| Caracteristică | WidgetKit | NCWidgetProviding |
|---|---|---|
| iOS minim | iOS 14 | iOS 8 |
| Amplasare | Desktop + „Astăzi” | Doar „Astăzi” |
| Dimensiuni | Small, Medium, Large | Una fixă |
| Interactivitate | iOS 17+ butoane și comutatoare | Doar deschiderea aplicației |
| Actualizare | Timeline Provider | widgetPerformUpdate |
| Limbaj | SwiftUI | UIKit |
Dacă aplicația dvs. suportă iOS 14 și mai nou — folosiți WidgetKit. Acesta oferă capabilități bogate: dimensiuni multiple, configurare prin intent, redesign cu iOS 17 și linkuri profunde. Declarativitatea SwiftUI face codul widgetului compact și lizibil. Timeline Provider gestionează automat programul de actualizări ținând cont de consumul de energie.
Doar dacă este necesar suportul pentru iOS 9–13. NCWidgetProviding este mai simplu de implementat — este un UIViewController obișnuit cu un protocol. Cu toate acestea, este limitat: o singură dimensiune, doar UIKit, fără configurare. Apple recomandă trecerea la WidgetKit chiar și pentru proiecte vechi, folosind availability check: WidgetKit pe iOS 14+, NCWidgetProviding ca fallback.
În iOS modern, se disting trei tipuri de widgeturi după destinația funcțională. Fiecare tip își rezolvă propria sarcină și necesită o abordare diferită a proiectării datelor și interfeței. Clasificarea ajută la alegerea arhitecturii potrivite pentru aplicația dvs.
Afișează informații statice sau actualizate periodic: vremea, data, cursul valutar, starea serverului. Datele sunt actualizate conform programului prin Timeline Provider. Utilizatorul nu interacționează cu widgetul — doar citește. Widgeturile informaționale — cele mai simple de implementat, nu necesită procesarea evenimentelor tactile și funcționează în fundal fără permisiuni suplimentare.
Din iOS 17, WidgetKit suportă butoane, comutatoare și glisiere în widgeturi. Utilizatorul poate efectua o acțiune — marca o sarcină, pune muzica pe pauză, aprinde lumina — fără a deschide aplicația. Interactive Widgets folosesc App Intents pentru a transmite acțiunea în aplicația principală. Limitare: doar pe desktop, nu în secțiunea „Astăzi” până la iOS 18.
Utilizatorul personalizează datele afișate prin interfața de sistem — selectează orașul pentru vreme, contul pentru finanțe, categoria pentru știri. Se implementează prin Intents Extension și configurare în WidgetBundle. Widgeturile configurabile sporesc personalizarea și relevanța informațiilor pentru fiecare utilizator.
Să examinăm procesul de creare a unui Today Widget în SwiftUI folosind WidgetKit. Widgetul va afișa cursul valutar curent cu actualizare automată. WidgetKit necesită trei componente: structura widgetului, Provider cu configurare și View pentru afișare.
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])
}
}
Providerul este responsabil pentru pregătirea datelor pentru afișare. Metoda getTimeline creează programul de actualizări: următoarea actualizare peste 15 minute. TimelineProvider garantează că widgetul afișează date actualizate fără a interoga constant serverul.
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 — mecanismul central WidgetKit pentru gestionarea datelor Today Widget. În locul actualizării periodice cu timer (ca în vechiul NCWidgetProviding), WidgetKit folosește conceptul de timeline — o secvență de înregistrări cu marcaje de timp. Sistemul afișează înregistrarea curentă până la expirarea acesteia, apoi trece la următoarea sau solicită una nouă.
Timeline suportă trei politici: .after(date) — următoarea actualizare la data specificată; .never — widgetul nu se actualizează până la apelul explicit WidgetCenter.reloadAllTimelines; .atEnd — actualizare după afișarea ultimei înregistrări. Pentru Today Widget cu curs valutar, politica .after cu interval de 15–30 minute este optimă. Eficiența energetică — avantajul cheie al WidgetKit: sistemul grupează actualizările tuturor widgeturilor într-o singură fereastră.
Dacă datele s-au modificat înainte de expirarea timeline (de exemplu, utilizatorul a actualizat cursul în aplicație), apelați WidgetCenter.shared.reloadTimelines(ofKind: "CurrencyWidget"). Aceasta va solicita un nou timeline de la Provider și va actualiza afișarea. WidgetCenter permite, de asemenea, reîncărcarea tuturor widgeturilor aplicației cu o singură comandă — convenabil după sincronizarea datelor.
Apple impune cerințe stricte pentru designul Today Widget: conținutul trebuie să fie lizibil de la distanță, fără elemente inutile și cu o ierarhie clară. Încălcarea recomandărilor HIG (Human Interface Guidelines) este motiv de respingere la publicarea în App Store. Trei principii: glanceability, consistency și hierarchy.
Utilizatorul petrece mai puțin de o secundă pe widget. Nu adăugați mai mult de 3–4 elemente de date. Font — minimum 11pt pentru etichete, 17pt pentru valori. Utilizați bold (Semibold) pentru numerele cheie. Evitați derularea — Today Widget nu se derulează.
WidgetKit suportă trei dimensiuni: Small (170×170pt), Medium (364×170pt), Large (364×382pt). Pentru Today Widget în secțiunea „Astăzi”, Medium este cea mai frecventă alegere. Design adaptiv prin EnvironmentValues: schimbați densitatea informației în funcție de dimensiune. Small — un număr, Medium — număr + grafic, Large — tabel.
Widgetul trebuie să se afișeze corect în tema deschisă și întunecată fără acțiuni suplimentare din partea dezvoltatorului — WidgetKit preia automat culorile de sistem. Dynamic Type pentru widgeturi este limitat: dimensiunea fontului este fixă, dar trebuie să fie lizibilă. UIColor.label și UIColor.systemBackground — culori de bază pentru text și fundal în ambele teme.
Întrebări frecvente
Astăzi este același widget WidgetKit. Diferența constă doar în amplasare: pe desktop și în secțiunea „Astăzi” (la stânga primului ecran). Până la iOS 14, Today Widget era o extensie separată NCWidgetProviding care funcționa doar în Centrul de notificări. Acum este un WidgetKit unitar.
WidgetKit nu actualizează widgeturile cu timer. Dezvoltatorul stabilește programul prin Timeline Provider: înregistrări cu marcaje de timp. Sistemul garantează actualizarea la ora specificată ținând cont de economisirea energiei — poate întârzia câteva minute. Intervalul minim — 15 minute, dar Apple recomandă nu mai des de 1 dată pe oră.
Da, începând cu iOS 17 WidgetKit suportă butoane, comutatoare și glisiere prin App Intents. Elementele interactive funcționează pe desktopul iPhone și iPad. În secțiunea „Astăzi” suportul a apărut în iOS 18. Pentru iOS 16 și mai vechi — doar deschiderea aplicației la atingerea widgetului.
Nu există limitări. Aplicația poate înregistra orice număr de widgeturi prin WidgetBundle — fiecare cu propriul tip, dimensiune și configurare. Utilizatorul le adaugă separat. Se recomandă nu mai mult de 3–5 widgeturi pentru a nu supraîncărca alegerea utilizatorului.
WidgetKit este complet suportat în iOS Simulator. Rulați schema țintă WidgetKit în Xcode — widgetul va apărea pe desktopul simulatorului. Pentru verificarea Timeline Provider utilizați WidgetKit Debug Profile: Xcode → Product → Profile → WidgetKit Debug. Comportamentul real verificați pe un dispozitiv fizic.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și