Atualizando Aplicativos
Existem várias maneiras de fornecer atualizações automáticas para seu aplicativo Electron. A maneira mais fácil, suportada oficialmente é utilizando o framework embutido Squirrel e o módulo autoUpdater do Electron.
Utilizando armazenamento de objeto em nuvem (serverless)
Para um fluxo serverless simples, o módulo autoUpdater do Electron pode verificar se existem atualizações disponívels apontando para uma URL estática que contenha os últimos metadados de versionamento.
Quando uma nova versão está disponível, o metadado precisa ser publicado para o armazenamento em nuvem juntamente da versão em si. O formato dos metadados é diferente para macOS e Windows.
Publicando metadados de versionamento
Com o Electron Forge, você pode lançar atualizações de arquivos estáticos publicando artefatos de metadados diretamente do ZIP Maker (macOS) com o comando macUpdateManifestBaseUrl
e do Squirell.Windows Maker (Windows) com remoteReleases
.
Veja o artigo do Forge Atualizações automáticas do S3 para um exemplo completo.
Publicações manuais
No macOS, o Squirell.Mac pode receber atualizações lendo o arquivo releases.json
com o seguinte formato JSON:
{
"currentRelease": "1.2.3",
"releases": [
{
"version": "1.2.1",
"updateTo": {
"version": "1.2.1",
"pub_date": "2023-09-18T12:29:53+01:00",
"notes": "Theses are some release notes innit",
"name": "1.2.1",
"url": "https://mycompany.example.com/myapp/releases/myrelease"
}
},
{
"version": "1.2.3",
"updateTo": {
"version": "1.2.3",
"pub_date": "2024-09-18T12:29:53+01:00",
"notes": "Theses are some more release notes innit",
"name": "1.2.3",
"url": "https://mycompany.example.com/myapp/releases/myrelease3"
}
}
]
}
No Windows, o Squirell.Windows pode receber atualizações lendo o arquivo RELEASES gerado durante o processo de build. Este arquivo detalha o pacote delta .nupkg
para o qual atualizar.
B0892F3C7AC91D72A6271FF36905FEF8FE993520 electron-fiddle-0.36.3-full.nupkg 103298365
Estes arquivos devem ficar no mesmo diretório da sua versão, dentro de uma estrutura de pastas que esteja de acordo com a plataforma e arquitetura do seu aplicativo.
Como por exemplo:
my-app-updates/
├─ darwin/
│ ├─ x64/
│ │ ├─ my-app-1.0.0-darwin-x64.zip
│ │ ├─ my-app-1.1.0-darwin-x64.zip
│ │ ├─ RELEASES.json
│ ├─ arm64/
│ │ ├─ my-app-1.0.0-darwin-arm64.zip
│ │ ├─ my-app-1.1.0-darwin-arm64.zip
│ │ ├─ RELEASES.json
├─ win32/
│ ├─ x64/
│ │ ├─ my-app-1.0.0-win32-x64.exe
│ │ ├─ my-app-1.0.0-win32-x64.nupkg
│ │ ├─ my-app-1.1.0-win32-x64.exe
│ │ ├─ my-app-1.1.0-win32-x64.nupkg
│ │ ├─ RELEASES
Lendo os metadados de versionamento
A maneira mais fácil de consumir os metadados é instalando o update-electron-app, um módulo Node.js que configura o autoUpdater e exibe ao usuário uma janela de diálogo nativa.
For static storage updates, point the updateSource.baseUrl
parameter to the directory containing your release metadata files.
const { updateElectronApp, UpdateSourceType } = require('update-electron-app')
updateElectronApp({
updateSource: {
type: UpdateSourceType.StaticStorage,
baseUrl: `https://my-bucket.s3.amazonaws.com/my-app-updates/${process.platform}/${process.arch}`
}
})
Using update.electronjs.org
A equipe do Electron mantém update.electronjs.org, um webservice gratuito e de código aberto que os aplicativos Electron podem usar para se auto-atualizar. O serviço é destinado para apps Electron que atendem os seguintes critérios:
- O app roda no macOS ou no Windows
- O app tem um repositório GitHub público
- Builds são publicadas em GitHub Releases
- Builds are code-signed (macOS only)
A forma mais fácil de usar este serviço é instalando o update-electron-app, um módulo Node.js pre-configurado para ser usado com update.electronjs.org.
Instale o módulo usando seu gerenciador de pacotes Node.js de preferência:
- npm
- Yarn
npm install update-electron-app
yarn add update-electron-app
Em seguida, importe o pacote do atualizador no arquivo principal do projeto:
require('update-electron-app')()
Por padrão, este módulo irá verificar atualizações na inicialização do aplicativo, e a cada dez minutos. Quando uma atualização for encontrada, ela será baixada automaticamente em segundo plano. Quando o download é concluído, uma caixa de diálogo será exibida permitindo que o usuário reinicie o aplicativo.
Se precisar personalizar sua configuração, você pode passar argumentos para o update-electron-app ou usar o serviço de atualização diretamente.
Usando outros serviços de atualização
Se você estiver desenvolvendo um aplicativo Electron privado, ou se não é publicado versões no GitHub Releases, pode ser necessário executar o seu próprio servidor de atualização.