Automasi Mock Lokasi iOS di Pipeline QA dengan wloc menyelesaikan satu masalah konkret: bagaimana tim QA atau web/JavaScript bisa menguji fitur berbasis lokasi tanpa harus secara manual mengubah lokasi fisik perangkat atau bergantung pada App Store. Di artikel ini, Anda akan mengetahui cara mengintegrasikan Yu9191/wloc ke dalam alur lint, e2e, dan release agar mock lokasi dapat dijalankan secara otomatis di pipline QA dan dipicu lewat tools seperti Surge, Quantumult X, Loon, atau Stash.

Fokus utama adalah membuat DX lebih mulus dengan shortcut satu tombol untuk set/reset lokasi, memastikan integrasi proxy tidak memblokir izin jaringan, serta memverifikasi bahwa QA dan CI/CD bisa menjalankan validasi lokasi sebelum build dikirimkan.

Memahami peran wloc dalam pipeline QA iOS

wloc adalah proyek open source (referensi: Yu9191/wloc) yang mengemulasikan lokasi dengan mekanisme gs-loc pada perangkat Apple. Ketika wloc dijalankan, ia memaparkan endpoint lokal (biasanya WebSocket atau HTTP) yang dapat menerima koordinat dan mengubah lokasi sistem secara langsung. Ini membuatnya cocok untuk pipeline QA karena lokasi dapat dipicu secara terprogram melalui skrip, bukan intervensi pengguna.

Pertimbangan utama yang membuat wloc efektif adalah kemampuannya untuk dipanggil dari headless script — misalnya dengan node script atau command line — sehingga dapat diikat ke tahap linting, e2e, atau release. Jangan lupa bahwa wloc membutuhkan hak akses Developer pada iOS (profil konfigurasi) dan entah perangkat nyata maupun simulator harus berada pada mode developer.

Integrasi wloc dengan tim web/JavaScript dan alat proxy

Alur tim web dan JavaScript

Tim web atau JavaScript biasanya menjalankan QA melalui browser atau test suite seperti Playwright/Cypress. Mereka dapat mengeksekusi skrip Node untuk memanggil wloc sebelum test suite dimulai agar API yang diuji merasa berada di koordinat tertentu.

const { execSync } = require('child_process');
execSync('npx wloc-cli set --lat -6.200000 --lon 106.816666', { stdio: 'inherit' });

Perintah di atas akan memanggil CLI wloc untuk mengatur lokasi Jakarta. API atau UI yang bergantung pada informasi lokasi nantinya akan menerima koordinat tersebut. Setelah test selesai, jalankan npx wloc-cli reset untuk mengembalikan lokasi default.

Integrasi dengan Surge, Quantumult X, Loon, atau Stash

Untuk tim QA yang menggunakan alat proxy iOS (Surge/Quantumult X/Loon/Stash), wloc bisa dipicu melalui script HTTP. Karena alat ini mendukung pemanggilan webhook atau skrip ketika rule tertentu terpenuhi, Anda bisa menambahkan rule seperti before-request atau after-response untuk memanggil endpoint wloc.

Contoh konfigurasi Surge (snippet dalam rule):

[Script]
set-jakarta = type=http-request,behavior=reject,pattern=^https?:\/\/api\.example\.com\/location,script-path=https://internal.example.com/wloc/set-jakarta.js

Script tersebut bisa memanggil URL internal (bisa dilokalkan oleh CI) yang meneruskan request ke wloc. Pastikan perangkat iOS dan server wloc berada di jaringan yang sama, atau gunakan reverse proxy yang dipercaya oleh Surge/Quantumult.

Integrasi ini memungkinkan QA menempatkan breakpoint satu rule saja untuk mengatur lokasi, tanpa modifikasi aplikasi.

Shortcut satu tombol untuk set/reset lokasi

Untuk meningkatkan DX tester/manajer QA, buat Shortcut iOS satu tombol menggunakan aplikasi Shortcuts. Kita dapat memanggil HTTP request ke server wloc di jaringan lokal yang menyampaikan koordinat, misalnya Jakarta atau Bali.

  1. Buat shortcut dengan tindakan Get Contents of URL yang mengarah ke http://192.168.1.10:9191/set?lat=-6.2&lon=106.8.
  2. Tambahkan aksi untuk menampilkan notifikasi ketika permintaan berhasil.
  3. Buat shortcut kedua untuk /reset.

Shortcut ini dapat dipasang di Home Screen atau ditetapkan ke tombol (AssistiveTouch), sehingga QA dapat dengan cepat berpindah lokasi saat menjalankan pengujian manual pada build daily.

Memasukkan wloc ke tahap prarilis: lint, e2e, release

Untuk mengetahui fitur lokasi berjalan, tambahkan langkah wloc pada pipeline lint/prarilis. Contohnya pada CI (GitHub Actions/Bitrise) Anda bisa menambahkan job “mock-location”:

jobs:
  mock-location:
    runs-on: macos-latest
    steps:
      - name: Start wloc
        run: npx wloc-cli start --bind 0.0.0.0:9191
      - name: Set location Jakarta
        run: npx wloc-cli set --lat -6.2 --lon 106.8
      - name: Run e2e
        run: npm run test:e2e
      - name: Reset location
        run: npx wloc-cli reset

Dengan cara ini lint/e2e environment selalu menggunakan lokasi yang dikontrol. Anda juga bisa menambahkan langkah serupa sebelum release ke App Store agar QA dapat verifikasi lokasi dalam build prarilis.

Pertimbangkan pengenalan deployment tag seperti location-ready sehingga build tidak dikirim tanpa validasi lokasi.

Dampak ke Developer Experience dan tantangan izin jaringan

Penerapan wloc meningkatkan DX karena tester tidak perlu lagi membuka Xcode, menyambungkan kabel, atau mengganti profile konfigurasi secara manual. Namun, ada beberapa tantangan:

  • Izin jaringan: wloc sering kali membutuhkan koneksi WebSocket atau HTTP ke backend lokal. Pastikan firewall/tempat wloc dijalankan mengizinkan port tersebut.
  • Profil developer: Perangkat harus berstatus developer agar mock lokasi diizinkan. Pastikan QA device sudah di-provision sebelumnya.
  • Security: Karena Anda mengirim koordinat, pastikan endpoint wloc hanya dapat diakses oleh jaringan internal agar tidak disalahgunakan.

Perubahan lokasi juga dapat mempengaruhi caching API berbasis geo, jadi pastikan environment test memisahkan data per lokasi.

Praktik verifikasi di CI/CD dan tips debugging

Untuk memverifikasi di CI/CD, tambahkan assertion yang memastikan lokasi valid sebelum test dimulai. Misalnya jalankan script singkat untuk mengecek koordinat terakhir dari wloc sebelum e2e. Jika check gagal, hentikan pipeline untuk memeriksa koneksi.

Debugging tip: aktifkan log wloc (biasanya ada flag --verbose) agar Anda bisa melihat permintaan yang masuk. Jika mock gagal, periksa apakah permintaan disaring oleh Surge/Quantumult rule (rule yang terlalu ketat bisa menolak permintaan wloc).

Dalam QA manual, verifikasi bisa dilakukan dengan memulai aplikasi, memanggil shortcut set lokasi, lalu mengamati API request di proxy. Konfirmasi bahwa server menerima koordinat yang diharapkan sebelum melanjutkan ke tahap release.

Kesimpulan

Mengotomatiskan mock lokasi dengan wloc menjaga kualitas fitur lokasi sebelum release, mempersingkat waktu QA, dan memperkuat integrasi web/JavaScript ke pipeline CI/CD. Dengan dukungan alat seperti Surge/Quantumult X/Loon/Stash dan shortcut satu tombol, QA bisa memicu lokasi berbeda tanpa modifikasi aplikasi. Selalu sertakan langkah verifikasi, perhatikan izin jaringan, dan batasi akses endpoint wloc agar otomatisasi ini tetap aman.