iOS
WKWebView + host UIKit. Aset disajikan via skema wails:// kustom — tanpa port terbuka.
Membutuhkan macOS dengan Xcode lengkap.
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.
iOS
WKWebView + host UIKit. Aset disajikan via skema wails:// kustom — tanpa port terbuka.
Membutuhkan macOS dengan Xcode lengkap.
Android
Android WebView + WebViewAssetLoader. Go dikompilasi sebagai libwails.so via NDK.
Bekerja di macOS, Linux, dan Windows.
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.gitcd wails/v3/examples/mobile
wails3 task ios:run # iOS Simulator (macOS + Xcode diperlukan)wails3 task android:run # Android Emulatorwails3 task run # DesktopModel aplikasi yang sama berlaku di setiap platform:
GOOS=ios dan GOOS=android.@wailsio/runtime bekerja identik; service bindings, events, dialog, dan clipboard semua melewati transport in-process yang sama.WKWebView di dalam UIViewController; di Android WebView di dalam Activity. Wails menghubungkan message bridge secara otomatis.Perilaku spesifik platform ada di file yang dilindungi //go:build ios atau //go:build android, menjaga kode bersama tetap bersih.
| 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 |
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 |
Dua aturan penting saat menulis kode kondisional platform:
ios mengimplikasikan darwin — file dengan tag //go:build darwin juga dikompilasi untuk iOS. Untuk target macOS saja, gunakan //go:build darwin && !ios.android mengimplikasikan linux — file dengan tag //go:build linux juga dikompilasi untuk Android. Untuk target desktop-Linux saja, gunakan //go:build linux && !android.Saat runtime, runtime.GOOS mengembalikan "ios" dan "android" masing-masing.
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, IsDesktopAplikasi Mobile Pertama Anda
Ambil aplikasi Wails desktop dan jalankan di iOS Simulator atau Android Emulator dalam hitungan menit.
Panduan iOS
Setup toolchain iOS lengkap, simulator, build perangkat, penandatanganan, konfigurasi, dan referensi API.
Panduan Android
Setup Android SDK/NDK lengkap, emulator, penandatanganan APK, packaging Play Store, dan referensi API.