Electron Built-in AutoUpdater
因为之前做的 electron
应用开发使用的是 electron-packager 来对应用进行打包,根据官方文档的介绍,推荐使用内置的 AutoUpdater
来完成应用更新。
本文主要记录一下在使用和配置 electron 内置 AutoUpdater 过程中踩过的坑、解决了的以及没能解决的问题。虽然最后有一个问题没有能解决,并因此决定迁移去使用 electron-builder 来进行打包以及使用该项目中的自动更新。
**注:以下篇幅的前提是,你已经能成功给 windows/Mac 平台打包一个 electron app
**
总览
通过查阅 electron
官方文档关于更新这一部分的介绍,我们可以看到整个更新的流程是这样的:
而如果不是走 electron-builder 的话,其实需要我们做的是两件事情:
- 配置一个服务器来 serve 更新
- 在客户端检索、下载和应用相应的更新
下面的篇幅里会按时间顺序,在这两个方面记录和还原在使用和配置 electron 内置 AutoUpdater 过程中踩到的坑。之后会再开一篇文章记录使用和配置 electron-builder
的过程以及两者之间的对比。
配置 一个服务器来 serve 更新
根据官方文档的介绍,electron 已经提供了几个选择:
- Hazel - 使用
Github Releases
来管理和发布更新 - Nuts - 使用
Github Releases
来管理和发布更新,并支持private repository
- electron-release-server - 自建服务器来管理和发布更新
- Nucleus - maintained by
Atlassian
由于我们的应用是走 Gitlab private
来做代码管理,并且暂无开源打算,所以我们会使用 electron-release-server
来管理应用的发布和更新。
配置 electron-release-server
配置 electron-release-server
的目的就是提供一个管理和提供我们 electron app 版本的服务器,以便我们的开发人员上传、管理 app 版本,以及客户端下载、更新版本。
配置的主要过程是根据 官方文档 进行的,下面将罗列我配置的步骤、遇到的坑以及解决的问题。我们也 fork
了这个项目并将相应更改应用到了这个 fork 中。
步骤
- 根据 部署文档 里的要求,将项目中的
config/local.template
复制成config/local.js
作为项目配置文件 - 安装和配置 PostgreSQL,linux 环境的话根据操作系统(CentOS 或者 Ubuntu)都可以找到比较好的教程,这里我使用的是 Ditital Ocean 上的教程
- 根据 数据库文档 里的描述,将配置好的 PostgreSQL 参数按文档填入,需要注意的是要将配置文件里的
dirname
也填上。 - 保险起见,将
port
属性也 comment out - 上述步骤做完后,可以运行命令
npm start
来在本地运行
以上是项目中提供的步骤,但实际运行中会发现有很多问题在文档中没有提到的:
docker.js
的问题
完成上述配置后,直接运行 npm start
会遇到这个错误:
Details:TypeError: Cannot read property 'split' of undefined
at Object. (/Users/zhexuanliu/Desktop/mesh/electron-release-server/config/docker.js:28:67)
复制代码
这里的问题是出在 config/docker.js
这个文件里。如果需要使用 Docker
的话,建议做的就是在 package.json
里将 DATABASE_URL
环境变量加上。
由于我们这里不打算使用 Docker
,我们的处理方法就是将这个文件移除即可。
解决上面这个问题后,我能成功将这个项目跑起来,并通过 localhost:1337
来访问版本管理的界面,但接下来又遇到了一个问题:
上传应用文件一直失败
具体来说就是,通过版本管理的界面上传程序(可以参考 项目中的上传文档),按上述步骤部署后,不管是运行在本地还是服务器上,完成上传之后都会提示上传失败。
查阅了项目 issues
及各个社区都没有相关答案,我在 github
里也提了 issue,但无人回答。所以最后我更改了一下他的代码,来解决这个问题。
更改的内容我也 comment 在了这个 issue 中。
客户端检测并应用更新
完成上述步骤后, electron-release-server
遍基本部署完毕了。访问管理网页并上传 asset 后,asset 会自动立刻出于 serving
状态。
接下来我们要做的是去调整和配置客户端程序,以能够检测、应用更新。
CodeSign
由于客户端程序进行更新检测、应用都是需要走操作系统的更新流程的(Mac 的则是 AppStore),因此,对更新这个流程的测试只能在正式环境中进行,而且这个应用程序需要完成 Code Sign
这个步骤。具体内容可以参照文档
完成 Code Sign
的步骤在文档中的讲解和介绍都比较清晰了,其本质就是两步:
- 获取
signing certificate
- 使用
signing certificate
对应用进行签字认证
这里稍微提一下的是,由于我们发布的应用是要在 AppStore 外下载的,所以在苹果这里的签名,我们需要的是
- Developer ID Application: Developer ID Application: * (*)
- Developer ID Installer: Developer ID Installer: * (*)
复制代码
获取到 signing certificate
后,只需要安装 electron-osx-sign 然后运行以下代码即可
electron-osx-sign
复制代码
CodeSign - Windows
待续
Detect and Apply Updates
这一部分比较简单,根据 electron 官方文档 里的记录操作即可。