Внести изменения

Редактировать эту документацию

Переведите документацию или откройте весь проект на своём компьютере.

Ничего не будет опубликовано, пока вы не решите отправить свою работу.

Обзор мобильных платформ

Создавайте приложения для iOS и Android на той же кодовой базе Go, что и настольное приложение

Wails v3 работает на iOS и Android, используя тот же main.go и тот же фронтенд, которые вы уже создаёте для настольных платформ. Не требуется ни отдельный мобильный проект, ни промежуточный слой для совместного использования кода, ни переписывание: бинарный файл Go компилируется для целевой мобильной платформы, а нативный WebView отображает существующий фронтенд.

iOS

Хост на основе WKWebView и UIKit. Ресурсы предоставляются через пользовательскую схему wails:// — без открытых портов. Требуется macOS с полной версией Xcode.

Руководство по iOS →

Android

Android WebView и WebViewAssetLoader. Код Go компилируется в libwails.so с помощью NDK. Работает в macOS, Linux и Windows.

Руководство по Android →

Посмотрите в действии: пример Kitchen Sink

Лучший способ понять доступные возможности — изучить Kitchen Sink: единое приложение Wails, которое одинаково работает на iOS, Android и настольных платформах из одной кодовой базы:

Mobile Kitchen Sink — GitHub Привязки · События · Диалоговые окна · Тактильная обратная связь · Геолокация · Биометрия · Уведомления · Защищённое хранилище · и многое другое — всё из одного файла main.go
В нём представлены все основные мобильные API на 7 вкладках, и оно также работает на настольных платформах. Вкладки **Мобильные функции** и **Аппаратные функции** скрываются на настольных платформах посредством проверки платформы во фронтенде; при сборке для настольных платформ сторона Go не регистрирует обработчики мобильных событий `common:*`. Это рекомендуемый подход к выпуску одной кодовой базы для всех платформ.
Вкладка Платформы Что демонстрирует
Привязки все Вызовы сервисов из JS в Go, возвращающие значения, структуры и ошибки
События все Часы Go → JS, ping/pong JS → Go → JS, системные события ОС (заряд батареи, сеть, тема)
Диалоговые окна все Нативные диалоговые окна сообщений на каждой платформе
Система все Буфер обмена, параметры экрана, сведения об устройстве
Мобильные функции iOS + Android Системное меню «Поделиться», предотвращение перехода в спящий режим, фонарик, яркость, биометрия, локальные уведомления, защищённое хранилище
Аппаратные функции iOS + Android Тактильная обратная связь, геолокация, акселерометр, датчик приближения, синтез речи
Нативные функции iOS + Android iOS: тактильная обратная связь + переключатели WKWebView · Android: вибрация + всплывающее уведомление

Чтобы запустить пример самостоятельно:

bash
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

Как это работает

На всех платформах используется одна и та же модель приложения:

  1. Бэкенд Go — ваши сервисы, обработчики событий и логика приложения без изменений компилируются для GOOS=ios и GOOS=android.
  2. Фронтенд — в точности те же HTML/JS/CSS. Пакет @wailsio/runtime работает одинаково; привязки сервисов, события, диалоговые окна и буфер обмена используют один и тот же внутрипроцессный транспорт.
  3. Хост WebView — на iOS это WKWebView внутри UIViewController, а на Android — WebView внутри Activity. Wails автоматически настраивает мост обмена сообщениями.
  4. Внутрипроцессное предоставление ресурсов — ресурсы предоставляются непосредственно из памяти 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 — эта возможность доступна в каждой сборке (теги сборки не нужны), поэтому один и тот же файл работает везде:

go
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:

js
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

Полная настройка набора инструментов iOS, симулятор, сборки для устройств, подписание, конфигурация и справочник API.

Руководство по iOS →

по Android

Полная настройка Android SDK/NDK, эмулятор, подписание APK, подготовка пакетов для Play Store и справочник API.

Руководство по Android →

Редактировать страницу

Последнее обновление: