Section 14/142 menit
14. Ringkasan & Decision Guide
14. Ringkasan & Decision Guide
| Kondisi | Rekomendasi |
|---|---|
| Informasi yang sering dilihat sekilas (cuaca, progress, status) | Widget statik dengan StaticConfiguration |
| User ingin pilih konten widget sendiri | AppIntentConfiguration + WidgetConfigurationIntent |
| Update sederhana dari dalam app setelah aksi user | WidgetCenter.shared.reloadTimelines() |
| Data berubah secara periodik terprediksi | Multiple TimelineEntry dalam satu Timeline |
| Konten berubah dari server secara real-time | Live Activities dengan pushType: .token |
| Event berlangsung yang perlu dipantau | Live Activities + Dynamic Island |
| User ingin tap area berbeda untuk aksi berbeda | Link(destination:) dalam .systemMedium/.systemLarge |
| User ingin aksi tanpa buka app | Interactive widget dengan AppIntent + Button(intent:) |
| Butuh akses data dari app utama | App Groups (UserDefaults(suiteName:)) |
| Widget butuh data dari network | Task { } di dalam getTimeline(completion:) |
Checklist Sebelum Submit
swift
□ Semua ukuran yang disupport ditest di device atau preview (.systemSmall, .systemMedium, dsb)
□ Lock Screen variant (`.accessoryCircular`, dll) menggunakan `.containerBackground(.clear, for: .widget)`
□ App Groups dikonfigurasi di kedua target (app + widget extension)
□ `getSnapshot()` mengembalikan data representatif untuk widget gallery
□ `placeholder()` menggunakan data hardcoded — TIDAK ada network call atau file access
□ Error handling di `getTimeline()` menghasilkan fallback entry, bukan crash
□ Live Activities: cek `ActivityAuthorizationInfo().areActivitiesEnabled` sebelum request
□ Deep link URL scheme terdaftar di Info.plist app utama
□ Widget privacy dipertimbangkan untuk Lock Screen (jangan tampil data sensitif)
□ Test di StandBy mode jika support `.standByMedium` (iOS 17+)
Langkah Belajar Selanjutnya
WidgetKit bekerja paling efektif dikombinasikan dengan:
- App Intents — untuk widget yang bisa dikonfigurasi dan interactive widgets (tombol/toggle langsung di widget)
- SwiftData — simpan data yang ditampilkan widget via shared ModelContainer di App Group container (lihat
swiftdata-guide.md) - Swift Concurrency — network request di
getTimeline()menggunakanasync/await(lihatswift-concurrency-complete.md) - @Observable — sinkronisasi state antara app dan widget via shared storage yang diobservasi (lihat
swift6-observable.md)
Widget yang efektif bukan tentang menampilkan banyak fitur — melainkan tentang menyampaikan satu informasi yang tepat, di waktu yang tepat, dalam bentuk yang bisa dipahami dalam satu pandangan.