Testing iOS dari mesin Windows atau Linux bermuara pada satu fakta: iOS Simulator dan Safari Web Inspector hanya ada di macOS. Sisanya bisa diakali. Panduan ini menyusun tahapan testing tanpa Mac, dari browser sampai iPhone asli, dan menunjukkan di mana Capgo Build dan Live Updates hapus waktu tunggu.
Tahapan testing
| Level | Apa yang diuji | Tempat running | Butuh Mac |
|---|---|---|---|
| 1 | Web layer: logika, layout, desain responsif | Browser desktop dengan viewport iPhone | Tidak |
| 2 | Capacitor plugin, native bridge, izin akses | Emulator atau perangkat Android | Tidak |
| 3 | Perilaku iOS asli: WebKit quirks, safe areas, keyboard, push, plugin iOS | iPhone via TestFlight | Bisa, dengan Capgo Build |
| 4 | Build QA ad hoc untuk perangkat tertentu | iPhone via Ad Hoc IPA | Bisa, dengan Capgo Build |
| 5 | Step-through native debugging di Xcode | Mac | Ya |
Kebanyakan bug terdeteksi di level 1 dan 2. Level 3 menangkap bug khusus iOS. Level 5 jarang terjadi pada aplikasi Capacitor, dan jika terjadi, menyewa Mac selama satu jam lebih murah daripada membelinya.
Level 1: browser dengan viewport iPhone
Buka dev server di Chrome atau Edge, aktifkan device emulation dan pilih profil iPhone. Capacitor mengekspos info platform agar Anda bisa membuat branching UI:
import { Capacitor } from '@capacitor/core';
if (Capacitor.getPlatform() === 'ios') {
// iOS-only behavior
}
Yang tidak tertangkap: perbedaan rendering WebKit, safe area insets, keyboard iOS yang mendorong viewport, dan apa pun yang menyentuh native plugin.
Level 2: Android dulu, karena web layer-nya sama
Capacitor menjalankan web bundle yang sama di kedua platform. Wiring plugin, permission prompts, dan bridge calls bisa divalidasi di Android dari Windows atau Linux dengan Chrome DevTools di chrome://inspect. Jika pemanggilan plugin berhasil di Android, sisi JavaScript sudah benar; sisanya adalah implementasi native iOS, yang Anda uji di level 3.
Panduan setup: Windows dan Linux.
Level 3: iPhone asli lewat TestFlight
Ini jalur utama testing iOS tanpa Mac. Alurnya:
- Generate dan sinkronisasi proyek iOS secara lokal.
- Request cloud build dengan kredensial App Store Connect yang tersimpan.
- Buka TestFlight di iPhone.
bun run build
bunx cap sync ios
bunx @capgo/cli@latest build request com.example.app --platform ios --build-mode release
Capgo melakukan compile dan signing aplikasi di macOS, lalu mengunggahnya ke App Store Connect. Apple memproses build tersebut dan TestFlight akan menampilkannya ke internal tester dalam hitungan menit. Internal tester (anggota tim App Store Connect Anda) tidak memerlukan Beta App Review, jadi instalasi pertama pun jadi cepat.
Setup kredensial hanya dilakukan sekali; bunx @capgo/cli@latest build init --platform ios panduannya, dan sertifikat dapat dibuat tanpa Mac menggunakan OpenSSL atau generator sertifikat iOS.
Apa yang Anda dapatkan di perangkat: WebKit asli, safe areas asli, keyboard asli, push notifications asli, dan perilaku plugin yang asli. Itulah daftar hal yang tidak bisa diberitahukan oleh browser.
Level 4: ad hoc builds untuk perangkat tertentu
Saat tester berada di luar tim App Store Connect Anda, atau jika ingin melewati proses Apple, gunakan profil Ad Hoc yang mencantumkan UDID perangkat:
bunx @capgo/cli@latest build request com.example.app \
--platform ios \
--ios-distribution ad_hoc \
--output-upload \
--output-record build.json
CLI akan mengembalikan link download berbatas waktu dan QR code untuk file IPA. Masa retensi dapat dikonfigurasi dari 1 jam hingga 7 hari dengan --output-retention. Profil ad hoc tidak memerlukan kunci API App Store Connect, hanya butuh sertifikat dan profilnya.
Untuk mengambil UDID tester dari Windows atau Linux, minta mereka buka Settings > General > About di iPhone dan baca field tersebut, atau gunakan UDID web helper. Tambahkan perangkat di portal Apple dan buat ulang profilnya.
Iterasi tanpa build baru: Live Updates
Setelah build TestFlight terinstal, jangan rebuild setiap kali ada perubahan. Cukup push web bundle saja:
bun run build
bunx @capgo/cli@latest bundle upload --channel beta
Testers on the beta channel akan menerima bundle baru saat aplikasi dibuka berikutnya. Bagi tim di Windows atau Linux, ini mengubah feedback loop iOS dari “menunggu cloud build dan proses Apple” menjadi “detik”. Native rebuild hanya diperlukan jika ada perubahan plugin, permission, atau versi Capacitor.
Arahkan build TestFlight Anda ke channel khusus agar beta tester tidak mengambil bundle produksi. Panduan panduan channel menjelaskan cara setup-nya.
Debugging iOS tanpa Safari Web Inspector
Inspector Safari hanya bisa dipakai dari macOS. Berikut alternatif yang bisa jalan di OS apa pun:
- Structured logging ke remote sink. Kirim
console.errorand bridge errors to Sentry or a similar tool. The Firebase Crashlytics untuk panduan Capacitor mencakup setup native SDK. - Panel debug in-app. Tampilkan N baris log terakhir dalam tampilan tersembunyi yang bisa diaktifkan dengan gesture. Cara murah dan efektif untuk build TestFlight.
- Log build. Masalah compile native muncul di log build Capgo yang di-stream ke terminal. Tambahkan
--ai-analyticsagar build yang gagal dijelaskan secara otomatis. - Reproduksi di Android. Untuk apa pun di shared web layer, Chrome DevTools di Android menyediakan debugger lengkap.
Untuk native crash asli yang butuh debugger Xcode, sewa Mac sebentar atau tanya rekan tim. Kasus ini jarang terjadi di app Capacitor; sebagian besar masalah ada di web layer atau konfigurasi plugin.
Workflow mingguan yang realistis
- Harian: browser dan perangkat Android dari Windows atau Linux. Live Updates ke
betachannel untuk tester iPhone. - Saat ada perubahan native: satu Capgo Build ke TestFlight. Cukup tunggu beberapa menit, tanpa Mac.
- Rilis: Capgo Build dengan distribusi App Store, lalu promote bundle channel-nya.
Ringkasan
Anda tidak bisa simulasi iOS di Windows atau Linux, tapi Anda bisa mengetesnya di iPhone tanpa Mac. Capgo Build mengirimkan app yang sudah signed ke TestFlight atau ke link ad hoc hanya dengan satu command, dan Live Updates menjaga iterasi tetap cepat setelah terinstal. Simpan Mac Anda hanya untuk sesi debugging native yang jarang dilakukan.