Today Widget, doğrudan Bildirim Merkezi'nde veya “Bugün” ekranında etkileşimli bilgileri görüntüleyen bir iOS uzantısıdır. Kullanıcı ana uygulamayı açmadan güncel verileri (hava durumu, döviz kurları, takvim) görür. Apple WWDC (2025)'ye göre, iOS 17'de etkileşimli widget'ların tanıtılmasından sonra WidgetKit kullanımı %40 arttı. Today Widget, bilgiye hızlı erişim sorununu çözer: ekrana bir bakış — ve kullanıcı uygulamada gezinmeden ihtiyaç duyduğu verileri alır.
Anahtar Noktalar
Today Widget (Bildirim Merkezi widget'ı olarak da bilinir), bir uygulamayı başlatmadan özet bilgilerini görüntüleyen bir iOS arayüz öğesidir. Kullanıcı, Kilit Ekranı'nda veya Ana Ekran'da sola kaydırarak widget'ı görür. Widget dinamik verileri (döviz kurları, son haberler, görev durumu, cihaz durumu) gösterebilir.
Tarihsel olarak, Today Widget iOS 8'de Bildirim Merkezi framework'ü aracılığıyla uygulanan bir Bildirim Merkezi uzantısı olarak ortaya çıktı. iOS 14 ile Apple, widget'ları doğrudan Ana Ekran'a yerleştirmeye izin veren tamamen yeniden tasarlanmış bir mimari olan WidgetKit'i tanıttı. Modern anlamda Today Widget, “Bugün” bölümünde (ilk ekranın solundaki widget bölümü) bulunan bir WidgetKit widget'ıdır.
Ana amaç, bilgiye erişim süresini azaltmaktır. Uygulamayı açmak, menülerde gezinmek ve yüklenmeyi beklemek yerine, kullanıcı hemen ihtiyaç duyduğu verileri görür. Apple'a (2024) göre, widget'lara sahip uygulamalar %27 daha yüksek kullanıcı etkileşimi gösterir. Ek kullanım durumları: hızlı eylemler (bir görevi tamamlandı olarak işaretleme), izleme (kalp atış hızı, aktivite) ve durum (pil şarjı, bildirimler).
Bir Today Widget geliştiricisinin iki yaklaşımı vardır: modern WidgetKit (iOS 14+) ve eski NCWidgetProviding uzantısı (iOS 8–13). Seçim, desteklenen minimum iOS sürümüne bağlıdır. WidgetKit yeni projeler için önerilir, NCWidgetProviding eski cihazları desteklemek içindir.
| Özellik | WidgetKit | NCWidgetProviding |
|---|---|---|
| Minimum iOS | iOS 14 | iOS 8 |
| Konum | Ana Ekran + “Bugün” | Sadece “Bugün” |
| Boyutlar | Küçük, Orta, Büyük | Tek sabit boyut |
| Etkileşim | iOS 17+ düğmeler ve anahtarlar | Sadece uygulama açma |
| Güncelleme | Timeline Provider | widgetPerformUpdate |
| Dil | SwiftUI | UIKit |
Uygulamanız iOS 14 ve üstünü destekliyorsa WidgetKit kullanın. Zengin özellikler sunar: birden çok boyut, intent'ler aracılığıyla yapılandırma, iOS 17 ile yeniden tasarım ve derin bağlantılar. SwiftUI'nin bildirimsel yapısı widget kodunu kompakt ve okunabilir kılar. Timeline Provider, güç tüketimini dikkate alarak güncelleme programını otomatik olarak yönetir.
Sadece iOS 9–13 desteği gerekiyorsa. NCWidgetProviding uygulaması daha basittir — bir protokole sahip normal bir UIViewController'dır. Ancak sınırlıdır: tek boyut, sadece UIKit, yapılandırma yok. Apple, availability check kullanarak eski projelerde bile WidgetKit'e geçiş yapılmasını önerir: iOS 14+'da WidgetKit, yedek olarak NCWidgetProviding.
Modern iOS'ta, işlevsel amaca göre üç tür widget vardır. Her tür kendi sorununu çözer ve veri ve arayüz tasarımına farklı bir yaklaşım gerektirir. Sınıflandırma, uygulamanız için doğru mimariyi seçmeye yardımcı olur.
Statik veya periyodik olarak güncellenen bilgileri görüntüler: hava durumu, tarih, döviz kurları, sunucu durumu. Veriler, Timeline Provider aracılığıyla bir programa göre güncellenir. Kullanıcı widget ile etkileşime girmez — sadece okur. Bilgi widget'ları uygulaması en basit olanlardır, dokunma olayı işlemesi gerektirmez ve ek izinler olmadan arka planda çalışır.
iOS 17 ile WidgetKit, widget'larda düğmeleri, anahtarları ve kaydırıcıları destekler. Kullanıcı, uygulamayı açmadan bir eylem gerçekleştirebilir — bir görevi işaretleme, müziği duraklatma, ışığı açma. Etkileşimli widget'lar, eylemleri ana uygulamaya iletmek için App Intents kullanır. Sınırlama: sadece Ana Ekran'da, iOS 18'e kadar “Bugün” bölümünde değil.
Kullanıcı, sistem arayüzü aracılığıyla görüntülenen verileri özelleştirir — hava durumu için şehir, finans için hesap, haberler için kategori seçer. Intents Extension ve WidgetBundle'da yapılandırma aracılığıyla uygulanır. Yapılandırılabilir widget'lar, her kullanıcı için kişiselleştirmeyi ve bilginin alaka düzeyini artırır.
WidgetKit kullanarak SwiftUI'de bir Today Widget oluşturma sürecine bakalım. Widget, otomatik güncellemelerle geçerli döviz kurunu gösterecektir. WidgetKit üç bileşen gerektirir: bir widget yapısı, yapılandırmalı bir Provider ve görüntüleme için bir View.
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])
}
}
Provider, verileri görüntülenmek üzere hazırlamaktan sorumludur. getTimeline yöntemi bir güncelleme programı oluşturur: 15 dakika içinde bir sonraki güncelleme. TimelineProvider, widget'ın sunucuyu sürekli sorgulamadan güncel verileri göstermesini sağlar.
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, Today Widget verilerini yönetmek için WidgetKit'in merkezi mekanizmasıdır. Zamanlayıcı ile periyodik güncellemeler (eski NCWidgetProviding'deki gibi) yerine WidgetKit, timeline kavramını kullanır — zaman damgalı girdi dizisi. Sistem, geçerli girdiyi süresi dolana kadar görüntüler, ardından bir sonrakine geçer veya yenisini ister.
Timeline üç politikayı destekler: .after(date) — belirtilen tarihte sonraki güncelleme; .never — WidgetCenter.reloadAllTimelines'a açık bir çağrı yapılana kadar widget güncellenmez; .atEnd — son girdi görüntülendikten sonra güncelleme. Döviz kurları olan bir Today Widget için 15–30 dakika aralıklı .after politikası idealdir. Enerji verimliliği WidgetKit'in önemli bir avantajıdır: sistem tüm widget'ların güncellemelerini tek bir pencerede gruplar.
Timeline süresinden önce veriler değişirse (örneğin, kullanıcı uygulamada kuru güncellediyse), WidgetCenter.shared.reloadTimelines(ofKind: “CurrencyWidget”) çağrısını yapın. Bu, Provider'dan yeni bir timeline isteyecek ve görüntülemeyi güncelleyecektir. WidgetCenter ayrıca tek bir komutla tüm uygulama widget'larını yeniden yüklemeye izin verir — veri senkronizasyonundan sonra kullanışlıdır.
Apple, Today Widget tasarımında katı gereksinimler belirler: içerik, gereksiz öğeler olmadan ve net bir hiyerarşiyle bir bakışta okunabilir olmalıdır. HIG (İnsan Arayüzü Yönergeleri) tavsiyelerini ihlal etmek, App Store'da yayınlarken reddedilme nedenidir. Üç ilke: bakışta okunabilirlik, tutarlılık ve hiyerarşi.
Kullanıcı bir widget'ta bir saniyeden az zaman harcar. 3–4'ten fazla veri öğesi eklemeyin. Yazı tipi — etiketler için minimum 11pt, değerler için 17pt. Anahtar sayılar için kalın (Semibold) kullanın. Kaydırmadan kaçının — Today Widget kaydırılmaz.
WidgetKit üç boyutu destekler: Küçük (170×170pt), Orta (364×170pt), Büyük (364×382pt). “Bugün” bölümündeki Today Widget için Orta en yaygın seçimdir. EnvironmentValues aracılığıyla uyarlanabilir tasarım: boyuta göre bilgi yoğunluğunu değiştirin. Küçük — tek sayı, Orta — sayı + grafik, Büyük — tablo.
Widget, geliştiricinin ek işlem yapmasına gerek kalmadan açık ve koyu temalarda doğru görüntülenmelidir — WidgetKit otomatik olarak sistem renklerini alır. Widget'lar için Dynamic Type sınırlıdır: yazı tipi boyutu sabittir, ancak okunabilir olmalıdır. UIColor.label ve UIColor.systemBackground her iki temada da metin ve arka plan için temel renklerdir.
Sıkça Sorulan Sorular
Bugün aynı WidgetKit widget'ıdır. Fark sadece konumdadır: Ana Ekran'da ve “Bugün” bölümünde (ilk ekranın solunda). iOS 14'ten önce, Today Widget yalnızca Bildirim Merkezi'nde çalışan ayrı bir NCWidgetProviding uzantısıydı. Şimdi tek bir WidgetKit'tir.
WidgetKit, widget'ları zamanlayıcı ile güncellemez. Geliştirici, Timeline Provider aracılığıyla programı belirler: zaman damgalı girdiler. Sistem, güç tasarrufunu dikkate alarak belirtilen zamanda güncellemeyi garanti eder — birkaç dakika gecikebilir. Minimum aralık 15 dakikadır, ancak Apple saatte bir defadan fazla olmamasını önerir.
Evet, iOS 17'den itibaren WidgetKit, App Intents aracılığıyla düğmeleri, anahtarları ve kaydırıcıları destekler. Etkileşimli öğeler iPhone ve iPad Ana Ekranı'nda çalışır. “Bugün” bölümünde destek iOS 18'de geldi. iOS 16 ve öncesi için — widget'a dokunulduğunda sadece uygulama açılır.
Herhangi bir sınırlama yoktur. Bir uygulama, WidgetBundle aracılığıyla her biri kendi türü, boyutu ve yapılandırmasıyla herhangi bir sayıda widget kaydedebilir. Kullanıcı bunları tek tek ekler. Kullanıcının seçimini zorlaştırmamak için önerilen 3–5'ten fazla widget olmamasıdır.
WidgetKit, iOS Simulator'da tamamen desteklenir. Xcode'da WidgetKit hedef şemasını çalıştırın — widget simülatörün Ana Ekranı'nda görünecektir. Timeline Provider'ı test etmek için WidgetKit Debug Profile kullanın: Xcode → Product → Profile → WidgetKit Debug. Gerçek davranışı fiziksel bir cihazda kontrol edin.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun