Настройка автоматического обновления 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 увидит, что есть новая версия и начнет её скачивать. Как только обновление будет готово к установке, пользователь получит уведомление.
Интересен такой вопрос. Видел у Discord окно обновления. Можно ведь сделать подобное окно, с загрузкой обновления? (фото примера, подкрепил) Если Discord сделал, думаю это не проблема. Было бы круто, статью прочитать, именно от вас)
да, при загрузке обновления мы можем в колбеке рассчитать прогресс в процентах, показать скорость и рассчитать оставшееся время. когда-нибудь я напишу продолжение статьи, где заодно покажу экшн для сборки приложения сразу на гитхабе после создания нового тега
JÄÄKAAPPI, благодарю за вашу статью. Было бы действительно интересно почитать на эту тему. Интересно, как это будет работать. Сам занимаюсь разработкой десктоп приложений на C++. Давно смотрел в сторону Electron js только руки не доходили. Как прочитал статью, появилось желание научится им пользоваться. Подписался
Спасибо большое, буду следить за vc в ожидании статьи.
а под винду можно написать?
да, конечно. код будет тот же самый
Для чего обычно выкладывают app на GitHub? Чтобы зарекомендовать себя, что именно этот, человек создатель этого app? P.s сам никогда не использовал GitHub.
для того, чтобы разработка велась максимально открыто, чтобы сторонние разработчики могли подключиться к работе и что-то исправить или добавить. ну и да, конечно, ссылочка с очередным проектом в резюме будет не лишней