Lewati ke konten

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.

iOS

WKWebView + host UIKit. Aset disajikan via skema wails:// kustom — tanpa port terbuka. Membutuhkan macOS dengan Xcode lengkap.

Panduan iOS →

Android

Android WebView + WebViewAssetLoader. Go dikompilasi sebagai libwails.so via NDK. Bekerja di macOS, Linux, dan Windows.

Panduan Android →

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.

TabPlatformYang ditampilkan
BindingssemuaPanggilan service JS → Go mengembalikan nilai, struct, dan error
EventssemuaJam Go → JS, ping/pong JS → Go → JS, event sistem OS (baterai, jaringan, tema)
DialogssemuaDialog pesan native di setiap platform
SystemsemuaClipboard, metrik layar, info perangkat
MobileiOS + AndroidShare sheet, keep-awake, torch, brightness, biometrics, notifikasi lokal, secure storage
HardwareiOS + AndroidHaptics, geolocation, accelerometer, proximity, text-to-speech
NativeiOS + AndroidiOS: haptics + toggle WKWebView · Android: vibrate + toast

Untuk menjalankannya sendiri:

Terminal window
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

Model aplikasi yang sama berlaku di setiap platform:

  1. Backend Go — service, event handler, dan logika aplikasi Anda dikompilasi tanpa perubahan untuk GOOS=ios dan GOOS=android.
  2. Frontend — HTML/JS/CSS yang persis sama. Paket @wailsio/runtime bekerja identik; service bindings, events, dialog, dan clipboard semua melewati transport in-process yang sama.
  3. Host WebView — di iOS WKWebView di dalam UIViewController; di Android WebView di dalam Activity. Wails menghubungkan message bridge secara otomatis.
  4. 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.

PersyarataniOSAndroid
Sistem operasimacOS sajamacOS, Linux, Windows
ToolchainXcode lengkap (bukan hanya CLI tools)Android SDK + NDK 26.3.x + JDK
Go1.25+1.25+
npm
Verifikasi denganwails3 doctorwails3 doctor

Kedua platform berbagi feature set inti yang sama:

FituriOSAndroid
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 eventsevents.IOS.*events.Android.*
HapticsIOS.Haptics.*Android.Haptics.Vibrate
Info perangkatIOS.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 / trayno-op disengajano-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, IsDesktop

Aplikasi Mobile Pertama Anda

Ambil aplikasi Wails desktop dan jalankan di iOS Simulator atau Android Emulator dalam hitungan menit.

Mulai →

Panduan iOS

Setup toolchain iOS lengkap, simulator, build perangkat, penandatanganan, konfigurasi, dan referensi API.

Panduan iOS →

Panduan Android

Setup Android SDK/NDK lengkap, emulator, penandatanganan APK, packaging Play Store, dan referensi API.

Panduan Android →