Ikhtisar Seluler
Bangun aplikasi iOS dan Android dari basis kode Go yang sama dengan aplikasi desktop Anda
Wails v3 berjalan di iOS dan Android menggunakan main.go dan frontend yang sama dengan yang sudah Anda tulis untuk desktop. Tidak ada proyek seluler terpisah, jembatan berbagi kode, atau penulisan ulang: biner Go dikompilasi untuk target seluler dan WebView native merender frontend Anda yang sudah ada.
Host WKWebView + UIKit. Aset disajikan melalui skema wails:// khusus — tanpa port terbuka. Memerlukan macOS dengan Xcode lengkap.
Android WebView + WebViewAssetLoader. Go dikompilasi sebagai libwails.so melalui NDK. Berfungsi di macOS, Linux, dan Windows.
Lihat cara kerjanya: contoh Kitchen Sink
Cara terbaik untuk memahami kemungkinannya adalah dengan melihat Kitchen Sink — satu aplikasi Wails yang berjalan secara identik di iOS, Android, dan desktop dari satu basis kode:
| Tab | Platform | Yang ditampilkan |
|---|---|---|
| Binding | semua | Panggilan layanan JS → Go yang mengembalikan nilai, struct, dan kesalahan |
| Peristiwa | semua | Jam Go → JS, ping/pong JS → Go → JS, peristiwa sistem OS (baterai, jaringan, tema) |
| Dialog | semua | Dialog pesan native di setiap platform |
| Sistem | semua | Papan klip, metrik layar, informasi perangkat |
| Seluler | iOS + Android | Lembar berbagi, menjaga perangkat tetap aktif, senter, kecerahan, biometrik, notifikasi lokal, penyimpanan aman |
| Perangkat Keras | iOS + Android | Haptik, geolokasi, akselerometer, sensor kedekatan, text-to-speech |
| Native | iOS + Android | iOS: haptik + pengalih WKWebView · Android: getaran + 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 required)
wails3 task android:run # Android Emulator
wails3 task run # Desktop
Cara kerjanya
Model aplikasi yang sama berlaku di setiap platform:
- Backend Go — layanan, handler peristiwa, dan logika aplikasi Anda dikompilasi tanpa perubahan untuk
GOOS=iosdanGOOS=android. - Frontend — HTML/JS/CSS yang sama persis. Paket
@wailsio/runtimeberfungsi secara identik; binding layanan, peristiwa, dialog, dan papan klip semuanya dirutekan melalui transport dalam proses yang sama. - Host WebView — di iOS,
WKWebViewdi dalamUIViewController; di Android,WebViewdi dalamActivity. Wails menyiapkan jembatan pesan secara otomatis. - Penyajian aset dalam proses — aset disajikan langsung dari memori Go, bukan dari server localhost. Tanpa port terbuka, tanpa loopback, tanpa latensi tambahan.
Perilaku khusus platform ditempatkan dalam file yang dilindungi oleh //go:build ios atau //go:build android, sehingga kode bersama Anda tetap bersih.
Ringkasan prasyarat
| Persyaratan | iOS | Android |
|---|---|---|
| Sistem operasi | Hanya macOS | macOS, Linux, Windows |
| Toolchain | Xcode lengkap (bukan hanya alat CLI) | Android SDK + NDK 26.3.x + JDK |
| Go | 1.25+ | 1.25+ |
| npm | ✅ | ✅ |
| Verifikasi dengan | wails3 doctor |
wails3 doctor |
Yang didukung
Kedua platform memiliki rangkaian fitur inti yang sama:
| Fitur | iOS | Android |
|---|---|---|
| Binding layanan (JS → Go) | ✅ | ✅ |
| Peristiwa (dua arah) | ✅ | ✅ |
| Dialog pesan | ✅ UIAlertController | ✅ AlertDialog |
| Dialog buka file | ✅ UIDocumentPicker | ✅ Storage Access Framework |
| Dialog simpan file | ❌ sebagai gantinya, tulis ke sandbox | ❌ sebagai gantinya, tulis ke sandbox |
| Papan klip | ✅ UIPasteboard | ✅ ClipboardManager |
| Metrik layar / area aman | ✅ | ✅ |
| Peristiwa siklus hidup | ✅ events.IOS.* |
✅ events.Android.* |
| Umpan balik haptik | ✅ IOS.Haptics.* |
✅ Android.Haptics.Vibrate |
| Informasi perangkat | ✅ IOS.Device.Info() |
✅ Android.Device.Info() |
| Tab native (iOS) | ✅ UITabBar | — |
| Pesan toast (Android) | — | ✅ Android.Toast.Show |
| Beberapa jendela | ❌ hanya jendela pertama | ❌ hanya jendela pertama |
| Geometri jendela / menu / baki sistem | operasi kosong yang disengaja | operasi kosong yang disengaja |
Aturan tag build
Dua aturan penting yang perlu diketahui saat menulis kode kondisional berdasarkan platform:
iosmengimplikasikandarwin— file yang diberi tag//go:build darwinjuga akan dikompilasi untuk iOS. Untuk menargetkan macOS saja, gunakan//go:build darwin && !ios.androidmengimplikasikanlinux— file yang diberi tag//go:build linuxjuga akan dikompilasi untuk Android. Untuk menargetkan Linux desktop saja, gunakan//go:build linux && !android.
Saat runtime, runtime.GOOS masing-masing mengembalikan "ios" dan "android".
Deteksi platform saat runtime
Tag build digunakan untuk kode yang hanya dapat dikompilasi pada platform tertentu. Untuk percabangan biasa dalam kode bersama, gunakan application.System — fitur ini tersedia di setiap build (tanpa memerlukan tag build), sehingga file yang sama dapat digunakan di semua platform:
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() (tag build server), dan IsPlatform(application.PlatformMacOS | PlatformWindows | PlatformLinux | PlatformIOS | PlatformAndroid | PlatformServer).
Frontend menyediakan fungsi pembantu yang sesuai di @wailsio/runtime:
import { System } from "@wailsio/runtime";
if (System.IsMobile()) { /* iOS or Android */ }
if (System.IsIOS()) { /* … */ } // also IsAndroid, IsMac, IsWindows, IsLinux, IsDesktopLangkah berikutnya
Jalankan aplikasi Wails desktop di iOS Simulator atau Android Emulator hanya dalam hitungan menit.
Penyiapan lengkap toolchain iOS, simulator, build perangkat, penandatanganan, konfigurasi, dan referensi API.
Penyiapan lengkap Android SDK/NDK, emulator, penandatanganan APK, pengemasan untuk Play Store, dan referensi API.