Übersicht für Mobilgeräte
Erstellen Sie iOS- und Android-Apps aus derselben Go-Codebasis wie Ihre Desktop-App
Wails v3 läuft auf iOS und Android und verwendet dabei dieselbe main.go und dasselbe Frontend, die Sie bereits für Desktop-Anwendungen schreiben. Es gibt weder ein separates Mobilprojekt noch eine Brücke zur gemeinsamen Codenutzung oder eine Neuentwicklung: Das Go-Binärprogramm wird für die mobile Zielplattform kompiliert, und eine native WebView rendert Ihr vorhandenes Frontend.
WKWebView und UIKit-Host. Assets werden über ein benutzerdefiniertes wails://-Schema bereitgestellt – ohne offene Ports. Erfordert macOS mit vollständiger Xcode-Installation.
Android WebView und WebViewAssetLoader. Go wird über das NDK als libwails.so kompiliert. Funktioniert unter macOS, Linux und Windows.
In Aktion: das Kitchen-Sink-Beispiel
Am besten erkennen Sie die Möglichkeiten anhand von Kitchen Sink – einer einzelnen Wails-App, die aus einer Codebasis identisch auf iOS, Android und Desktop-Plattformen läuft:
| Registerkarte | Plattformen | Gezeigte Funktionen |
|---|---|---|
| Bindings | alle | JS-→-Go-Dienstaufrufe, die Werte, Structs und Fehler zurückgeben |
| Ereignisse | alle | Go-→-JS-Uhr, JS-→-Go-→-JS-Ping/Pong, Betriebssystemereignisse (Akku, Netzwerk, Design) |
| Dialoge | alle | Native Meldungsdialoge auf jeder Plattform |
| System | alle | Zwischenablage, Bildschirmmetriken, Geräteinformationen |
| Mobil | iOS und Android | Teilen-Menü, Ruhezustand verhindern, Taschenlampe, Helligkeit, Biometrie, lokale Benachrichtigungen, sicherer Speicher |
| Hardware | iOS + Android | Haptik, Geolokalisierung, Beschleunigungssensor, Näherungssensor, Sprachausgabe |
| Nativ | iOS + Android | iOS: Haptik + WKWebView-Umschalter · Android: Vibration + Toast-Benachrichtigung |
So führen Sie das Beispiel selbst aus:
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
Funktionsweise
Auf jeder Plattform gilt dasselbe Anwendungsmodell:
- Go-Backend – Ihre Dienste, Ereignishandler und Anwendungslogik werden unverändert für
GOOS=iosundGOOS=androidkompiliert. - Frontend – exakt dasselbe HTML, JavaScript und CSS. Das Paket
@wailsio/runtimefunktioniert identisch; Dienstbindungen, Ereignisse, Dialoge und die Zwischenablage werden über denselben prozessinternen Transport geleitet. - WebView-Host – unter iOS eine
WKWebViewinnerhalb einerUIViewController, unter Android eineWebViewinnerhalb einerActivity. Wails richtet die Nachrichtenbrücke automatisch ein. - Prozessinterne Bereitstellung von Assets – Assets werden direkt aus dem Go-Arbeitsspeicher bereitgestellt, nicht von einem localhost-Server. Keine offenen Ports, kein Loopback, keine zusätzliche Latenz.
Plattformspezifisches Verhalten befindet sich in Dateien, die durch //go:build ios oder //go:build android geschützt sind. So bleibt Ihr gemeinsam genutzter Code übersichtlich.
Voraussetzungen auf einen Blick
| Anforderung | iOS | Android |
|---|---|---|
| Betriebssystem | Nur macOS | macOS, Linux, Windows |
| Toolchain | Vollständiges Xcode (nicht nur die CLI-Tools) | Android SDK + NDK 26.3.x + JDK |
| Go | 1.25+ | 1.25+ |
| npm | ✅ | ✅ |
| Überprüfen mit | wails3 doctor |
wails3 doctor |
Unterstützte Funktionen
Beide Plattformen unterstützen dieselben Kernfunktionen:
| Funktion | iOS | Android |
|---|---|---|
| Service-Bindings (JS → Go) | ✅ | ✅ |
| Ereignisse (in beide Richtungen) | ✅ | ✅ |
| Meldungsdialoge | ✅ UIAlertController | ✅ AlertDialog |
| Dialoge zum Öffnen von Dateien | ✅ UIDocumentPicker | ✅ Storage Access Framework |
| Dialoge zum Speichern von Dateien | ❌ stattdessen in die Sandbox schreiben | ❌ stattdessen in die Sandbox schreiben |
| Zwischenablage | ✅ UIPasteboard | ✅ ClipboardManager |
| Bildschirm- und Safe-Area-Metriken | ✅ | ✅ |
| Lebenszyklusereignisse | ✅ events.IOS.* |
✅ events.Android.* |
| Haptisches Feedback | ✅ IOS.Haptics.* |
✅ Android.Haptics.Vibrate |
| Geräteinformationen | ✅ IOS.Device.Info() |
✅ Android.Device.Info() |
| Native Tabs (iOS) | ✅ UITabBar | — |
| Toast-Meldungen (Android) | — | ✅ Android.Toast.Show |
| Mehrere Fenster | ❌ nur das erste Fenster | ❌ nur das erste Fenster |
| Fenstergeometrie, Menüs und Tray | bewusste No-Op-Implementierungen | bewusste No-Op-Implementierungen |
Regeln für Build-Tags
Beachten Sie beim Schreiben von plattformabhängigem Code zwei wichtige Regeln:
iosimpliziertdarwin– eine mit//go:build darwingekennzeichnete Datei wird auch für iOS kompiliert. Verwenden Sie//go:build darwin && !ios, um ausschließlich macOS anzusprechen.androidimpliziertlinux– eine mit//go:build linuxgekennzeichnete Datei wird auch für Android kompiliert. Verwenden Sie//go:build linux && !android, um ausschließlich Desktop-Linux anzusprechen.
Zur Laufzeit gibt runtime.GOOS jeweils "ios" beziehungsweise "android" zurück.
Plattformerkennung zur Laufzeit
Build-Tags sind für Code vorgesehen, der nur auf einer bestimmten Plattform kompiliert werden kann. Verwenden Sie für gewöhnliche Verzweigungen in gemeinsam genutztem Code application.System. Dieses Objekt ist in jedem Build verfügbar (keine Build-Tags erforderlich), sodass dieselbe Datei überall funktioniert:
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
}Verfügbar sind IsMobile(), IsDesktop(), IsServer() (das Build-Tag server) und IsPlatform(application.PlatformMacOS | PlatformWindows | PlatformLinux | PlatformIOS | PlatformAndroid | PlatformServer).
Das Frontend enthält die entsprechenden Hilfsfunktionen in @wailsio/runtime:
import { System } from "@wailsio/runtime";
if (System.IsMobile()) { /* iOS or Android */ }
if (System.IsIOS()) { /* … */ } // also IsAndroid, IsMac, IsWindows, IsLinux, IsDesktopNächste Schritte
Bringen Sie eine Wails-Desktop-App innerhalb weniger Minuten im iOS-Simulator oder Android-Emulator zum Laufen.
Vollständige Einrichtung der iOS-Toolchain sowie Simulator, Geräte-Builds, Signierung, Konfiguration und API-Referenz.
Vollständige Einrichtung von Android SDK und NDK sowie Emulator, APK-Signierung, Play-Store-Paketierung und API-Referenz.