Wails v3 Alpha Release - v3.0.0-alpha.101
Added
- iOS: native message dialogs (UIAlertController) and open file/files/directory dialogs (UIDocumentPickerViewController); save dialogs return an explicit error
- iOS: clipboard support via UIPasteboard
- iOS: real screen metrics via UIScreen (points, pixels, scale, safe-area work area)
- iOS: device builds (
IOS_PLATFORM=device), code-signing identity / provisioning profile / entitlements support,.ipapackaging, anddeploy-devicevia devicectl - iOS: configurable minimum iOS version (
ios.minIOSVersionin build/config.yml) - iOS:
wails3 doctorreports Xcode and iOS SDK availability on macOS - iOS: system events — battery, network, theme, screen-lock and low-memory surface as
events.IOS.*and platform-neutralevents.Common.*application events - iOS: native mobile feature bridge (exported
application.IOS*) — share sheet, open URL, keep-awake, torch, safe-area insets, brightness, app info, orientation lock, status bar, biometrics (Face ID/Touch ID), local notifications and Keychain secure storage - iOS: sensors & hardware — haptics, one-shot geolocation, accelerometer, proximity, text-to-speech, storage info, power/battery state, network status, keyboard insets and screen-capture detection
- iOS: documentation (IOS.md and a docs-site guide)
- Android: native message dialogs (AlertDialog) and open file/files dialogs (Storage Access Framework, imported as cache copies); open-directory and save dialogs return an explicit error
- Android: clipboard support via ClipboardManager
- Android: real screen metrics via WindowMetrics/DisplayMetrics (dp, pixels, scale, system-bar work area)
- Android: haptics (
Android.Haptics.Vibrate), device info (Android.Device.Info) and toast (Android.Toast.Show) runtime methods - Android: typed lifecycle events (
events.Android.*, generated from events.txt) withActivityCreatedmapped toCommon.ApplicationStarted - Android: build pipeline produces installable debug and release APKs (
android:run,android:package,android:package:fat); release signing via the debug keystore by default or a real keystore throughANDROID_KEYSTORE_*env vars - Android:
wails3 doctorreports the Android SDK, NDK and JDK - Android: system events — battery, network, theme, screen-lock and low-memory surface as
events.Android.*and platform-neutralevents.Common.*application events - Android: native mobile feature bridge (exported
application.Android*) — share, open URL, keep-awake, torch, safe-area insets, brightness, app info, orientation lock, status bar, biometrics (BiometricPrompt), local notifications and EncryptedSharedPreferences secure storage - Android: sensors & hardware — haptics, one-shot geolocation, accelerometer, proximity, text-to-speech, storage info, power/battery state, network status, keyboard insets and FLAG_SECURE screen-capture blocking
- Android: documentation (ANDROID.md and a docs-site guide)
- Example: the
mobilekitchen sink gains Mobile and Hardware tabs demonstrating the native feature bridge across iOS and Android (pill tabs wrap to multiple rows) - Mobile: battery — the accelerometer, proximity sensor, torch and the example's periodic clock are paused when the app is backgrounded and restored on return (Android keeps the process running in the background, and the torch is hardware state that persists on iOS), and Android system-event receivers are only registered while the app is in the foreground
- iOS: camera capture —
application.IOSCapturePhoto/IOSCaptureVideo(UIImagePickerController → anative:captureevent with a base64 thumbnail) - iOS: background execution —
application.IOSBeginBackgroundTask/IOSEndBackgroundTask(a UIApplication background-task window) and a configurableios.backgroundModes(build/config.yml) that templatesUIBackgroundModesinto the generated Info.plist - Android: camera capture —
application.AndroidCapturePhoto/AndroidCaptureVideo(system camera via FileProvider → anative:captureevent) - Android: foreground service —
application.AndroidStartForegroundService/AndroidStopForegroundService(aWailsForegroundServicewith an ongoing notification keeps the process alive for long-running background work) - Example: a Camera tab demonstrating photo/video capture and background execution (foreground service on Android, background-task window on iOS)
Fixed
- Fix
getUserMediaalways failing withNotAllowedErroron Linux: WebKitGTK denies permission requests nobody handles, and thepermission-requestsignal was not connected. Camera/microphone are now handled per a new cross-platformWebviewWindowOptions.Permissionsmap (map[PermissionType]Permission), honored on both Linux (WebKitGTK) and Windows (WebView2). On Linux, which has no native prompt, camera/microphone default to allowed (restoringgetUserMedia) and can be turned off withPermissionDeny(#5552) - iOS:
GOOS=ioscompiles again (exportedevents.IOS, mobile method-name stubs) and production-tagged builds compile (build-tag fixes in pkg/application and several services) - iOS: Go→JS events and ExecJS now work — the page no longer loads twice at startup and the
wails:runtime:readyhandshake can no longer be lost - iOS:
ApplicationDidFinishLaunching/ApplicationStartedno longer race app startup; removed the fixed 2-second startup sleep - iOS: fixed a C-string leak on every Go→JS JavaScript execution
- iOS:
hasListenersnow reflects real listener registration - iOS: framework debug logging is compiled out of production builds
- Android:
GOOS=androidcompiles again — definedevents.Android, removed the out-of-boundsevents_android.golistener array, added the mobile method-name stub, and stopped desktop-Linux files (linux_cgo.*,events_linux.*,environment_linux.go) leaking into Android builds - Android: JS→Go bindings now work — the WebView cannot deliver
fetch()POST bodies toshouldInterceptRequest, so runtime calls route through a JavascriptInterface transport (nativeHandleRuntimeCall) instead of crashing on a nil request body - Android:
Screens.*runtime calls return real data — the ScreenManager is now populated at startup (it was never wired, soGetAllreturned nil) - Android: framework debug logging is compiled out of production builds and routes through logcat under the
Wailstag in debug builds - Android: real
hasListenersregistry, JNI reference/exception handling, and a single-load page lifecycle (no double navigation) - Fix
wails3 generate bindingsfailing with "Access is denied" on Windows when the Vite dev server is running, by syncing generated files into the output directory instead of renaming over it (#5515) - Fix intermittent fatal crash on macOS when reading screen information after a display change: the screen id and name stored pointers to autoreleased
UTF8Stringbuffers that could be freed before Go copied them (use-after-free). The strings are nowstrdup'd and freed after conversion, and screen enumeration runs in an explicit autorelease pool so it no longer leaks when called from Go goroutines (#5556) - Fix intermittent SIGSEGV on Linux when the assetserver closes a
WebKitURISchemeRequest: the finalg_object_unrefran on the assetserver goroutine, finalizing a WebKit GObject off the GTK main thread. The unref is now marshalled onto the GTK main context viag_main_context_invoke(#5557)
🤖 This is an automated nightly release generated from the latest changes on master.
Installation:
go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-alpha.101⚠️ Alpha Warning: This is pre-release software and may contain bugs or incomplete features.