Section 4/141 menit

4. Setup dan Struktur Project

4. Setup dan Struktur Project

Menambahkan Widget Extension Target

Di Xcode:

  1. FileNewTarget
  2. Pilih Widget Extension
  3. Beri nama (contoh: MyAppWidget)
  4. Centang "Include Live Activity" jika butuh Live Activities
  5. Pilih apakah akan include Configuration Intent (untuk widget yang bisa dikonfigurasi user)

Struktur File yang Dihasilkan

swift
MyAppWidget/
├── MyAppWidget.swift          ← Widget + Provider + Entry + View (awalnya jadi satu)
├── MyAppWidgetBundle.swift    ← WidgetBundle (jika punya multiple widgets)
├── Assets.xcassets
└── Info.plist

Berbagi Data antara App dan Widget

Widget berjalan di proses terpisah — harus gunakan App Group untuk berbagi data:

swift
1. Di project settings → Signing & Capabilities
2. Tambah "App Groups" ke KEDUA target (app dan widget)
3. Buat group ID: "group.com.perusahaan.namaapp"
swift
// Di app utama: simpan data ke shared container
let sharedDefaults = UserDefaults(suiteName: "group.com.perusahaan.namaapp")
sharedDefaults?.set(todayHabitCount, forKey: "habitCount")

// Trigger reload widget setelah update
WidgetCenter.shared.reloadTimelines(ofKind: "HabitWidget")
swift
// Di widget: baca dari shared container
let sharedDefaults = UserDefaults(suiteName: "group.com.perusahaan.namaapp")
let habitCount = sharedDefaults?.integer(forKey: "habitCount") ?? 0