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

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

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

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

Блог

Бета-версия Wails v3: новая основа для настольных приложений на Go

Бета-версия Wails v3 предлагает более прямую модель приложения, более функциональные привязки и более понятную основу для настольных приложений на Go.

leaanthonyЧтение: 7 мин

Нативное безрамочное окно Wails v3 в macOS

Сегодня мы выпускаем бета-версию Wails v3.

Wails позволяет разработчикам на Go создавать настольные приложения с помощью уже знакомых им инструментов веб-разработки для фронтенда, используя нативный WebView каждой платформы вместо встроенного браузера. v3 — это значительный шаг вперёд: версия предоставляет приложениям более прямой API, более понятную модель сборки и улучшенную основу для настольных приложений, поддержку которых пользователи давно просили добавить в Wails.

Это бета-версия, а не окончательный выпуск 3.0. API для настольных приложений стабилен, и некоторые команды уже используют v3 в рабочей среде, однако перед развёртыванием следует провести тщательное тестирование. В течение бета-тестирования мы вместе с сообществом выявляем последние проблемы совместимости и рабочих процессов. Wails v2 остаётся текущей стабильной версией и продолжит получать исправления.

Документация в период бета-тестирования

В период бета-тестирования англоязычная документация остаётся для нас эталонным источником, пока API и рабочие процессы проходят окончательную проверку. На этом этапе мы не принимаем PR с переводами. Работа над переводами возобновится до выхода общедоступной версии, когда документация станет достаточно стабильной, чтобы переводчикам не приходилось многократно переделывать свою работу.

Что входит в v3

  • Явные API приложения и окон, включая полноценную поддержку нескольких окон
  • Сервисы Go со статическим анализом исходного кода, который создаёт более информативные привязки TypeScript, сохраняя комментарии и осмысленные имена параметров
  • Сервисы, способные объединять ресурсы и скрипты фронтенда со своим серверным API, — основа для устанавливаемых и более функциональных плагинов
  • Доступная для просмотра система сборки на основе Taskfile, которую можно изучать, расширять и отлаживать
  • Серверные сборки для запуска того же приложения и сервисов без нативного окна настольного приложения
  • Современная поддержка настольных систем macOS, Windows и Linux на Intel, Apple Silicon, amd64 и arm64 там, где эти архитектуры поддерживаются
  • Экспериментальная поддержка мобильных платформ iOS и Android, доступная для ознакомления, но не подпадающая под гарантии совместимости бета-версии для настольных систем

Зачем нужна v3

Wails v2 упростила создание приложений на Go с современным веб-фронтендом. Она хорошо послужила проекту и множеству приложений. Однако среда выполнения с единственным окном и управлением через контекст, а также жёстко регламентированный процесс сборки излишне усложняли некоторые распространённые задачи разработки настольных приложений.

В основе v3 лежит другая модель. Приложения, окна, сервисы, события и возможности платформ представлены явными объектами. Благодаря этому работу фреймворка проще понимать по мере роста приложения, а такие возможности, как несколько окон, становятся обычной частью модели приложения, а не обходным решением.

Что нового

API приложения для полноценных настольных программ

В v3 стиль конфигурации v2 wails.Run(...) заменён явным жизненным циклом приложения. Вы создаёте приложение, регистрируете сервисы, создаёте окна и взаимодействуете с объектами, которым принадлежит нужная вам логика поведения.

Это устраняет значительную часть неявной передачи контекста. Операции с окнами относятся к окнам, а операции в масштабе всего приложения — к приложению. Такая модель естественнее для многооконных приложений и лучше подходит для тестирования и сопровождения крупных кодовых баз.

Отзывы тех, кто использовал v3 на этапе альфа-тестирования, были в подавляющем большинстве положительными. Разработчики особенно хорошо приняли явную модель: благодаря ей за кодом проще следить, распределение ответственности становится понятнее, а сложные настольные приложения могут развиваться, не сталкиваясь с ограничениями фреймворка.

Полноценная поддержка нескольких окон

Поддержка нескольких окон — одна из основных возможностей v3. У окон есть собственный жизненный цикл; их можно создавать, контролировать и закрывать во время выполнения. Это открывает более понятный путь к созданию настольных программ, которым нужны редакторы, инспекторы, окна настроек, инструментальные окна или несколько независимых частей пользовательского интерфейса.

Сервисы и создаваемые привязки

Сервисы Go заменяют прежнюю модель привязок. Они позволяют сохранять логику приложения в виде обычного кода Go и явно определять границу с фронтендом. Привязки создаются в виде структуры, отражающей приложение и его сервисы, благодаря чему предоставляемый фронтенду API проще находить и использовать.

В v3 эти привязки создаются с помощью статического анализа исходного кода. Поэтому генератор может сохранять сведения, добавленные разработчиками в код, включая комментарии и осмысленные имена параметров, вместо того чтобы исследовать уже собранную программу посредством рефлексии. В результате фронтенд получает более информативный и полезный API, а процесс создания привязок становится проще для понимания и сопровождения.

Сервисы также могут подключать ресурсы и скрипты фронтенда рядом со своим кодом Go. Благодаря этому все составляющие одной возможности получают единое логичное место: её серверный API, необходимые ей JavaScript или пользовательский интерфейс и точку интеграции с основным приложением. Это открывает путь к плагинам Wails, которые предоставляют богатую функциональность сразу после установки: установите плагин, подключите его сервис и используйте нужную возможность — вместо того чтобы самостоятельно собирать разрозненный набор привязок и зависимостей фронтенда. Универсальная система плагинов не входит в эту бета-версию, но v3 делает это направление практически осуществимым, в отличие от модели привязок v2.

Система сборки, которую можно изучать и адаптировать

В v3 структура сборки проекта доступна для просмотра. Вместо того чтобы скрывать все решения, связанные со сборкой, за одной командой, проекты получают стандартную структуру и конфигурацию сборки на основе Taskfile, которую можно изучать, расширять и отлаживать вместе с приложением.

Более надёжная кроссплатформенная основа для настольных приложений

Бета-версия поддерживает Windows на amd64 и arm64, macOS на Intel и Apple Silicon, а также Linux на amd64 и arm64. GTK4 с WebKitGTK 6.0 — стандартный стек для Linux; GTK3 остаётся доступным как устаревший вариант на протяжении всей серии v3.0. Поддержка мобильных платформ перспективна, но остаётся экспериментальной и не подпадает под гарантии совместимости бета-версии для настольных систем.

В этот выпуск также вошли изменения, необходимые для более надёжной повседневной работы: улучшенное поведение на разных платформах, более функциональная модель окон, более понятная диагностика, а также артефакты выпусков с контрольными суммами и сведениями о происхождении.

Переход с v2

v3 — новая основная версия, поэтому миграция представляет собой полноценный перенос, а не простую замену номера версии. Главные концептуальные изменения — жизненный цикл приложения и окон, сервисы вместо привязок, связанных с контекстом, прямые API приложения и окон вместо пакета среды выполнения v2, а также заново создаваемые привязки для фронтенда.

Мы опубликовали руководство по миграции с v2 на v3, в котором пошагово рассмотрены эти изменения, а также приведены таблица соответствия возможностей и контрольный список для тестирования. Для этой бета-версии поддерживается миграция по данному руководству вручную. Не рассчитывайте, что любой проект на v2 удастся перенести без проверки: протестируйте результат, осознанно перенесите вызовы среды выполнения и продолжайте использовать v2, пока новое приложение не будет готово.

Мы также оцениваем экспериментальный помощник по миграции. Он не входит в этот бета-выпуск, и мы будем рекомендовать его только после проверки на репрезентативных реальных проектах v2.

Откровенно о пройденном пути

Первый альфа-тег v3 был опубликован 18 января 2023 года. Это очень долгий срок для альфа-версии, и здесь недостаточно ограничиться расплывчатым признанием этого факта.

За это время проект колоссально изменился. Когда в сентябре 2021 вышла первая бета-версия Wails v2 для Windows, у репозитория было около 4000 звёзд. К выпуску v2 в сентябре 2022 их было уже около 10300. Сегодня их больше 35000. Такой рост — большая честь, но он также меняет представление о надлежащем управлении проектом: всё больше пользователей зависят от решений о выпусках, всё большему числу участников нужны понятные способы внести свой вклад, а всё большая часть работы заключается в обеспечении предсказуемости проекта, а не просто в добавлении очередной функции.

Мне не всегда удавалось адаптировать наши процессы настолько быстро и понятно, насколько требовал этот рост. Я признаю свою ответственность за это. Решение не в громких обещаниях и не в превращении каждого решения в церемонию, а в том, чтобы яснее сообщать, что поддерживается, что является экспериментальным, как принимаются решения и что мы собираемся делать дальше.

Эта работа начинается с данной бета-версии. Теперь у нас есть чётко определённые этапы бета-версии, кандидата на выпуск и общедоступного выпуска (GA); более ясные обязательства по совместимости; обновлённая политика безопасности; а также процесс WEP (Wails Enhancement Proposal) для изменений общедоступного поведения и добавления новых возможностей. По мере роста Wails мы продолжим совершенствовать дорожную карту и пересматривать модель управления проектом. Цель — сделать проект более надёжным и упростить участие в нём, а не затруднить его развитие.

Мы также перезапускаем сабреддит Wails и будем активно поддерживать его как ещё одну площадку для практических обсуждений, вопросов и отзывов по мере продвижения v3 к общедоступному выпуску.

Установите и попробуйте бета-версию

После публикации выпуска установите последнюю версию CLI v3 с помощью следующей команды:

sh
go install github.com/wailsapp/wails/v3/cmd/wails3@latest

Прежде чем создавать проект, запустите мастер пошаговой настройки. Он проверит локальную среду разработки и поможет настроить зависимости, необходимые Wails:

sh
wails3 setup

Мастер настройки Wails v3 в тёмном режиме

Создайте проект

После завершения настройки создайте проект с помощью следующей команды:

sh
wails3 init

Если вы обнаружите воспроизводимую ошибку, сообщите о ней, приложив вывод команды wails3 doctor и, если возможно, минимальный пример. Если вы хотите предложить новую возможность или изменение общедоступного поведения, вместо задачи с запросом функции создайте черновой PR с WEP. Оба способа помогают нам давать ясные ответы и поддерживать темп работы над бета-версией.

Спасибо

Wails v3 существует благодаря людям, которые тестировали незавершённые сборки, сообщали о сложных ошибках, переводили документацию, отвечали на вопросы, вносили вклад в код и продолжали побуждать проект становиться лучше. Спасибо.

И особая сердечная благодарность спонсорам, которые поддерживали Wails на протяжении всего этого долгого перехода. Ваша поддержка не просто позволяла проекту продолжать работу: благодаря ей мы смогли посвятить достаточно времени архитектуре, инструментам, тестированию и документации, которые помогли ускорить продвижение проекта к v3. Каждый тестировщик и участник помог сформировать этот выпуск, но именно спонсоры позволили уделить этой работе заслуженное внимание.

Бета-версия — это приглашение помочь нам должным образом завершить работу над v3. Попробуйте её, создавайте с её помощью приложения, сообщайте нам, где возникают сбои, и помогите сделать путь к 3.0 коротким и осторожным.