Electron自动更新在Mac上总是失败怎么办?
我用Electron做了一个桌面应用,集成了electron-updater来做自动更新。Windows上测试没问题,但Mac用户反馈一直卡在“checking for updates”,日志里也没报错。我签名和公证都做了,发布到GitHub Releases的版本也打了tag,不知道是不是配置哪里有问题?
这是我的main.js里的更新逻辑:
const { app, BrowserWindow } = require('electron');
const { autoUpdater } = require('electron-updater');
app.whenReady().then(() => {
autoUpdater.checkForUpdatesAndNotify();
autoUpdater.on('update-available', () => {
console.log('有新版本');
});
});
第一个问题是没设置feedUrl。 autoUpdater根本不知道去哪找更新包,Windows能跑是因为你可能用的是本地测试或者打包时自动带了配置。Mac上必须显式设置:
第二个问题是事件监听顺序错了。 你是先调用checkForUpdatesAndNotify(),然后再设置监听器,这时候事件早就发完了,你当然收不到。必须先监听,再检查更新。
完整写法是这样的:
加上error监听器后,你再跑一次,看控制台具体报什么错。Mac上常见的问题还有:
1. 签名不匹配 - Mac对代码签名要求很严,autoUpdater的版本必须和当前安装的版本用同一套证书签名
2. 公证问题 - 虽然你做了公证,但有时候electron-builder生成的zip包结构不对会导致验证失败
3. tag没同步 - GitHub Releases的tag必须和package.json里的version一致
你先加上feedUrl和error监听跑一次,看日志里具体报什么错。