Ringkasan Mobile
Wails v3 berjalan di iOS dan Android menggunakan main.go dan frontend yang sama dengan desktop. Tidak ada proyek mobile terpisah, tidak ada bridge code-sharing, dan tidak perlu rewrite: binary Go dikompilasi untuk target mobile dan WebView native merender frontend yang sudah ada.
WKWebView + host UIKit. Aset disajikan via skema wails:// kustom — tanpa port terbuka.
Membutuhkan macOS dengan Xcode lengkap.
Android WebView + WebViewAssetLoader. Go dikompilasi sebagai libwails.so via NDK.
Bekerja di macOS, Linux, dan Windows.
Lihat berjalan: contoh Kitchen Sink
Cara terbaik memahami kemungkinannya adalah melihat Kitchen Sink — satu aplikasi Wails yang berjalan identik di iOS, Android, dan desktop dari satu codebase:
Contoh ini mendemonstrasikan setiap permukaan API mobile utama di 7 tab — dan juga berjalan di desktop. Tab Mobile dan Hardware disembunyikan di desktop via pengecekan platform di frontend; sisi Go tidak mendaftarkan handler untuk event mobile common:* saat di-build untuk desktop. Ini adalah pola yang direkomendasikan untuk mengirim satu codebase ke semua platform.
| Tab | Platform | Yang ditampilkan |
|---|---|---|
| Bindings | semua | Panggilan service JS → Go mengembalikan nilai, struct, dan error |
| Events | semua | Jam Go → JS, ping/pong JS → Go → JS, event sistem OS (baterai, jaringan, tema) |
| Dialogs | semua | Dialog pesan native di setiap platform |
| System | semua | Clipboard, metrik layar, info perangkat |
| Mobile | iOS + Android | Share sheet, keep-awake, torch, brightness, biometrics, notifikasi lokal, secure storage |
| Hardware | iOS + Android | Haptics, geolocation, accelerometer, proximity, text-to-speech |
| Native | iOS + Android | iOS: haptics + toggle WKWebView · Android: vibrate + toast |
Untuk menjalankannya sendiri:
git clone https://github.com/wailsapp/wails.git
cd wails/v3/examples/mobile
wails3 task ios:run # iOS Simulator (macOS + Xcode diperlukan)
wails3 task android:run # Android Emulator
wails3 task run # Desktop
Cara kerjanya
Model aplikasi yang sama berlaku di setiap platform:
- Backend Go — service, event handler, dan logika aplikasi Anda dikompilasi tanpa perubahan untuk
GOOS=iosdanGOOS=android. - Frontend — HTML/JS/CSS yang persis sama. Paket
@wailsio/runtimebekerja identik; service bindings, events, dialog, dan clipboard semua melewati transport in-process yang sama. - Host WebView — di iOS
WKWebViewdi dalamUIViewController; di AndroidWebViewdi dalamActivity. Wails menghubungkan message bridge secara otomatis. - Penyajian aset in-process — aset disajikan langsung dari memori Go, bukan server localhost. Tanpa port terbuka, tanpa loopback, tanpa latency ekstra.
Perilaku spesifik platform ada di file yang dilindungi //go:build ios atau //go:build android, menjaga kode bersama tetap bersih.
Prasyarat sekilas
| Persyaratan | iOS | Android |
|---|---|---|
| Sistem operasi | macOS saja | macOS, Linux, Windows |
| Toolchain | Xcode lengkap (bukan hanya CLI tools) | Android SDK + NDK 26.3.x + JDK |
| Go | 1.25+ | 1.25+ |
| npm | ✅ | ✅ |
| Verifikasi dengan | wails3 doctor |
wails3 doctor |
Yang didukung
Kedua platform berbagi feature set inti yang sama:
| Fitur | iOS | Android |
|---|---|---|
| Service bindings (JS → Go) | ✅ | ✅ |
| Events (kedua arah) | ✅ | ✅ |
| Dialog pesan | ✅ UIAlertController | ✅ AlertDialog |
| Dialog buka file | ✅ UIDocumentPicker | ✅ Storage Access Framework |
| Dialog simpan file | ❌ tulis ke sandbox | ❌ tulis ke sandbox |
| Clipboard | ✅ UIPasteboard | ✅ ClipboardManager |
| Screens / metrik safe-area | ✅ | ✅ |
| Lifecycle events | ✅ events.IOS.* |
✅ events.Android.* |
| Haptics | ✅ IOS.Haptics.* |
✅ Android.Haptics.Vibrate |
| Info perangkat | ✅ IOS.Device.Info() |
✅ Android.Device.Info() |
| Tab native (iOS) | ✅ UITabBar | — |
| Pesan toast (Android) | — | ✅ Android.Toast.Show |
| Beberapa window | ❌ window pertama saja | ❌ window pertama saja |
| Geometri window / menu / tray | no-op disengaja | no-op disengaja |
Aturan build tag
Dua aturan penting saat menulis kode kondisional platform:
iosmengimplikasikandarwin— file dengan tag//go:build darwinjuga dikompilasi untuk iOS. Untuk target macOS saja, gunakan//go:build darwin && !ios.androidmengimplikasikanlinux— file dengan tag//go:build linuxjuga dikompilasi untuk Android. Untuk target desktop-Linux saja, gunakan//go:build linux && !android.
Saat runtime, runtime.GOOS mengembalikan "ios" dan "android" masing-masing.
Deteksi platform runtime
Build tag untuk kode yang hanya dapat dikompilasi di platform tertentu. Untuk branching biasa
di kode bersama, gunakan application.System — tersedia di setiap build
(tanpa build tag) sehingga file yang sama bekerja di semua tempat:
import "github.com/wailsapp/wails/v3/pkg/application"
if application.System.IsMobile() {
// iOS or Android
} else if application.System.IsDesktop() {
// macOS, Windows or Linux
}
// Or test a single target directly:
if application.System.IsPlatform(application.PlatformIOS) {
// iOS only
}Tersedia: IsMobile(), IsDesktop(), IsServer() (build tag server), dan
IsPlatform(application.PlatformMacOS | PlatformWindows | PlatformLinux | PlatformIOS | PlatformAndroid | PlatformServer).
Frontend memiliki helper yang cocok di @wailsio/runtime:
import { System } from "@wailsio/runtime";
if (System.IsMobile()) { /* iOS or Android */ }
if (System.IsIOS()) { /* … */ } // also IsAndroid, IsMac, IsWindows, IsLinux, IsDesktopLangkah selanjutnya
Ambil aplikasi Wails desktop dan jalankan di iOS Simulator atau Android Emulator dalam hitungan menit.
Setup toolchain iOS lengkap, simulator, build perangkat, penandatanganan, konfigurasi, dan referensi API.
Setup Android SDK/NDK lengkap, emulator, penandatanganan APK, packaging Play Store, dan referensi API.