Electron自动更新在Mac上总是失败怎么办?

UI诗语 阅读 12

我用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('有新版本');
  });
});
我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
シ国玲
シ国玲 Lv1
你的代码有两个致命问题,导致Mac上根本跑不起来。

第一个问题是没设置feedUrl。 autoUpdater根本不知道去哪找更新包,Windows能跑是因为你可能用的是本地测试或者打包时自动带了配置。Mac上必须显式设置:

autoUpdater.setFeedUrl({
provider: 'github',
owner: '你的GitHub用户名',
repo: '你的仓库名'
});


第二个问题是事件监听顺序错了。 你是先调用checkForUpdatesAndNotify(),然后再设置监听器,这时候事件早就发完了,你当然收不到。必须先监听,再检查更新。

完整写法是这样的:

const { app, BrowserWindow } = require('electron');
const { autoUpdater } = require('electron-updater');

// 先设置feedUrl
autoUpdater.setFeedUrl({
provider: 'github',
owner: '你的用户名',
repo: '你的仓库名'
});

// 先监听所有事件
autoUpdater.on('checking-for-update', () => {
console.log('检查更新中');
});

autoUpdater.on('update-available', (info) => {
console.log('有新版本:', info.version);
});

autoUpdater.on('update-not-available', () => {
console.log('当前是最新版本');
});

autoUpdater.on('error', (err) => {
console.error('更新出错:', err.message); // 加这个你才能看到错误
});

autoUpdater.on('download-progress', (progress) => {
console.log(下载进度: ${progress.percent.toFixed(1)}%);
});

autoUpdater.on('update-downloaded', () => {
console.log('下载完成,重启后自动安装');
});

app.whenReady().then(() => {
// 最后才调用检查
autoUpdater.checkForUpdatesAndNotify();
});


加上error监听器后,你再跑一次,看控制台具体报什么错。Mac上常见的问题还有:

1. 签名不匹配 - Mac对代码签名要求很严,autoUpdater的版本必须和当前安装的版本用同一套证书签名
2. 公证问题 - 虽然你做了公证,但有时候electron-builder生成的zip包结构不对会导致验证失败
3. tag没同步 - GitHub Releases的tag必须和package.json里的version一致

你先加上feedUrl和error监听跑一次,看日志里具体报什么错。
点赞
2026-03-18 11:07