Обзор мобильных платформ
Создавайте приложения для iOS и Android на той же кодовой базе Go, что и настольное приложение
Wails v3 работает на iOS и Android, используя тот же main.go и тот же фронтенд, которые вы уже создаёте для настольных платформ. Не требуется ни отдельный мобильный проект, ни промежуточный слой для совместного использования кода, ни переписывание: бинарный файл Go компилируется для целевой мобильной платформы, а нативный WebView отображает существующий фронтенд.
Хост на основе WKWebView и UIKit. Ресурсы предоставляются через пользовательскую схему wails:// — без открытых портов. Требуется macOS с полной версией Xcode.
Android WebView и WebViewAssetLoader. Код Go компилируется в libwails.so с помощью NDK. Работает в macOS, Linux и Windows.
Посмотрите в действии: пример Kitchen Sink
Лучший способ понять доступные возможности — изучить Kitchen Sink: единое приложение Wails, которое одинаково работает на iOS, Android и настольных платформах из одной кодовой базы:
| Вкладка | Платформы | Что демонстрирует |
|---|---|---|
| Привязки | все | Вызовы сервисов из JS в Go, возвращающие значения, структуры и ошибки |
| События | все | Часы Go → JS, ping/pong JS → Go → JS, системные события ОС (заряд батареи, сеть, тема) |
| Диалоговые окна | все | Нативные диалоговые окна сообщений на каждой платформе |
| Система | все | Буфер обмена, параметры экрана, сведения об устройстве |
| Мобильные функции | iOS + Android | Системное меню «Поделиться», предотвращение перехода в спящий режим, фонарик, яркость, биометрия, локальные уведомления, защищённое хранилище |
| Аппаратные функции | iOS + Android | Тактильная обратная связь, геолокация, акселерометр, датчик приближения, синтез речи |
| Нативные функции | iOS + Android | iOS: тактильная обратная связь + переключатели WKWebView · Android: вибрация + всплывающее уведомление |
Чтобы запустить пример самостоятельно:
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
Как это работает
На всех платформах используется одна и та же модель приложения:
- Бэкенд Go — ваши сервисы, обработчики событий и логика приложения без изменений компилируются для
GOOS=iosиGOOS=android. - Фронтенд — в точности те же HTML/JS/CSS. Пакет
@wailsio/runtimeработает одинаково; привязки сервисов, события, диалоговые окна и буфер обмена используют один и тот же внутрипроцессный транспорт. - Хост WebView — на iOS это
WKWebViewвнутриUIViewController, а на Android —WebViewвнутриActivity. Wails автоматически настраивает мост обмена сообщениями. - Внутрипроцессное предоставление ресурсов — ресурсы предоставляются непосредственно из памяти Go, а не с сервера localhost. Нет открытых портов, обращений через loopback-интерфейс и дополнительной задержки.
Поведение, зависящее от платформы, находится в файлах, защищённых условиями //go:build ios или //go:build android, благодаря чему общий код остаётся чистым.
Краткий обзор предварительных требований
| Требование | iOS | Android |
|---|---|---|
| Операционная система | Только macOS | macOS, Linux, Windows |
| Набор инструментов | Полная версия Xcode (не только инструменты командной строки) | Android SDK + NDK 26.3.x + JDK |
| Go | 1.25+ | 1.25+ |
| npm | ✅ | ✅ |
| Команда проверки | wails3 doctor |
wails3 doctor |
Поддерживаемые возможности
Обе платформы поддерживают один и тот же базовый набор возможностей:
| Возможность | iOS | Android |
|---|---|---|
| Привязки сервисов (JS → Go) | ✅ | ✅ |
| События (в обоих направлениях) | ✅ | ✅ |
| Диалоговые окна сообщений | ✅ UIAlertController | ✅ AlertDialog |
| Диалоговые окна открытия файлов | ✅ UIDocumentPicker | ✅ Storage Access Framework |
| Диалоговые окна сохранения файлов | ❌ вместо этого записывайте в песочницу | ❌ вместо этого записывайте в песочницу |
| Буфер обмена | ✅ UIPasteboard | ✅ ClipboardManager |
| Параметры экранов и безопасных областей | ✅ | ✅ |
| События жизненного цикла | ✅ events.IOS.* |
✅ events.Android.* |
| Тактильная обратная связь | ✅ IOS.Haptics.* |
✅ Android.Haptics.Vibrate |
| Сведения об устройстве | ✅ IOS.Device.Info() |
✅ Android.Device.Info() |
| Нативные вкладки (iOS) | ✅ UITabBar | — |
| Всплывающие сообщения Toast (Android) | — | ✅ Android.Toast.Show |
| Несколько окон | ❌ только первое окно | ❌ только первое окно |
| Геометрия окна, меню и область уведомлений | намеренно ничего не делают | намеренно ничего не делают |
Правила тегов сборки
При написании платформозависимого кода важно учитывать два правила:
iosподразумеваетdarwin— файл с тегом//go:build darwinтакже будет компилироваться для iOS. Чтобы предназначить код только для macOS, используйте//go:build darwin && !ios.androidподразумеваетlinux— файл с тегом//go:build linuxтакже будет компилироваться для Android. Чтобы предназначить код только для настольной версии Linux, используйте//go:build linux && !android.
Во время выполнения runtime.GOOS возвращает соответственно "ios" и "android".
Определение платформы во время выполнения
Теги сборки предназначены для кода, который можно скомпилировать только на определённой платформе. Для обычного ветвления в общем коде используйте application.System — эта возможность доступна в каждой сборке (теги сборки не нужны), поэтому один и тот же файл работает везде:
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
}Доступны: IsMobile(), IsDesktop(), IsServer() (тег сборки server) и IsPlatform(application.PlatformMacOS | PlatformWindows | PlatformLinux | PlatformIOS | PlatformAndroid | PlatformServer).
Во фронтенде соответствующие вспомогательные функции находятся в @wailsio/runtime:
import { System } from "@wailsio/runtime";
if (System.IsMobile()) { /* iOS or Android */ }
if (System.IsIOS()) { /* … */ } // also IsAndroid, IsMac, IsWindows, IsLinux, IsDesktopСледующие шаги
Возьмите настольное приложение Wails и за несколько минут запустите его в iOS Simulator или Android Emulator.
Полная настройка набора инструментов iOS, симулятор, сборки для устройств, подписание, конфигурация и справочник API.
Полная настройка Android SDK/NDK, эмулятор, подписание APK, подготовка пакетов для Play Store и справочник API.