# iOS Location Flow (Dumon Client) Tujuan: memastikan `getLatestPosition()` tidak mengembalikan default (lat/lon 0, accuracy 999) di iOS. ## Aturan utama - `getLatestPosition()` hanya mengembalikan snapshot terakhir dari `didUpdateLocations`. - Jika belum ada update lokasi, hasilnya akan default. - Jadi, `startPositioning()` wajib dipanggil dan update pertama harus diterima sebelum `getLatestPosition()` dipakai sebagai sumber data utama. ## Urutan yang benar 1. `checkAndRequestPermissions()` dipanggil saat aplikasi siap meminta lokasi. 2. Jika `location: granted`, lanjut; jika `denied`, hentikan flow dan minta user aktifkan izin. 3. Panggil `startPositioning()` sekali. 4. Tunggu event `onPositionUpdate` pertama. 5. Gunakan data dari event pertama sebagai sumber posisi awal. 6. `getLatestPosition()` baru dipakai setelah event pertama (sebagai snapshot tambahan/fallback). ## Contoh urutan (pseudo) ```ts await checkPermission(); // harus granted await continuousWatchPosition(); // startPositioning await waitForFirstOnPositionUpdate(); // resolve saat listener pertama const pos = await getGeoloc(); // sekarang safe ``` ## Checklist debugging - Pastikan `initiateLocationState()` dipanggil sebelum flow yang butuh posisi. - Pastikan `checkPermission()` sukses sebelum `continuousWatchPosition()`. - Pastikan ada log yang membuktikan `onPositionUpdate` terpanggil. - Jangan panggil `getLatestPosition()` terlalu awal (sebelum update pertama).