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() menggunakan async/await (lihat swift-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.