Настройка автоматического обновления Electron-приложения
В этой небольшой заметке я покажу, как легко из обычного Electron-приложения сделать автообновляемое.
Обновления приложения будут храниться на странице с релизами в репозитории проекта на GitHub. Это удобно и бесплатно.
Статья разделена на 4 этапа:
- создаем тестовое приложение;
- настраиваем сборку;
- публикуем релиз на GitHub;
- добавляем функцию автообновления.
Собираем тестовое приложение
Начнем с файла package.json.
И установим electon как дев-зависимость.
Теперь нам надо создать основной скрипт src/main.js.
Структура проекта сейчас выглядит так.
Запускаем приложение.
Теперь научимся собирать и публиковать приложение.
Сборка приложения
Для сборки я предпочитаю использовать утилиту electron-builder. Она работает практически без дополнительных настроек, и легко конфигурируется.
Также добавим её в дев-зависимости.
В настройках пакета создадим скрипт dist для сборки приложения.
Соберем приложение для текущей системы (macOS).
electron-builder создаст директорию dist для сборок релиза. Добавим её в .gitignore файл.
Содержимое директории с релизами выглядит так
Теперь вы можете установить приложение из dmg-файла, как это обычно и происходит. Но пока это делать незачем — дождемся автообновлений.
Цифровая подпись кода
Автообновление не будет работать, если вы не подпишите свое приложение правильно. Подробная информация об этом есть на в официальной документации Electron: Code Signing.
Пока приложение находится в стадии разработки, можно использовать бесплатный сертификат. Для этого открываем настройки Xcode, раздел "аккаунты", управление сертификатами и создаем новый.
Этот сертификат не нужно никуда подставлять. Electron сам увидит и использует его по назначению.
Публикация
Следующий шаг — публикация релиза на GitHub. Без дополнительных настроек приложение будет собрано и загружено как черновик на страницу релизов проекта в репозитории.
Получение токена доступа к аккаунту
Откройте настроки вашего профиля на GitHub.
Settings > Developer settings > Personal access tokens > Generate new token.
Отметьте раздел repo для того, чтобы Electron с этим ключом мог публиковать релизы в репозитории.
Новый токен будет создан и показан вам всего один раз. Сохраните его в безопасное место, если планируете использовать повторно.
Этот токен необходимо помещать в переменную в открытой консоли, где вы выполняете сборку и публикацию приложения. Для этого выполните в консоли следующую команду. Не забудьте заменить токен на свой.
Если вы забыли установить токен в переменную, вы увидите ошибку.
Загрузка приложения на GitHub
Добавим ещё пару команд в конфигурационный файл пакета.
yarn ship — сборка и публикация релиза для текущей ОС
yarn ship:all — сборка и публикация релизов для macOS, Windows и Linux
Выполните команду yarn ship. Приложение будет собрано и загружено в черновик нового релиза.
На странице релизов появился черновик. Вы можете отредактировать название с описанием и опубликовать.
Настойка автообновления
Теперь, когда вы умеете публиковать релизы, пора настроить автообновление.
Есть несколько пакетов, которые помогут вам проверять, скачивать и устанавливать обновления приложения.
- update-electron-app самый простой метод получать обновления и уведомлять пользователя о готовности их установить;
- electron-updater более гибкий метод, позволяющий работать с событиями процесса обновления (checking-for-update, update-available, update-not-available, download-progress, error и т.д.).
update-electron-app
Установите пакет
И вызовите его в коде приложения.
Файл main.js будет выглядеть так.
Тестирование
Поднимите версию приложения до 0.0.2. Соберите его и опубликуйте с подключенным автообновлением. Затем установите его и запустите.
Приложение будет проверять информацию о доступных обновления на сервере каждые 10 минут на этой странице:
В нашем случае это:
Теперь вы можете ещё раз поднять версию (до 0.0.3, например), собрать и опубликовать новое приложение.
Через несколько минут ваше запущенное приложение версии 0.0.2 увидит, что есть новая версия и начнет её скачивать. Как только обновление будет готово к установке, пользователь получит уведомление.