Electron 的跨平台构建


前言

先说结论, 可能可以在 Mac 下统一构建,但麻烦。建议还是分多平台原生构建,一是方便签名,二是方便测试。

Mac 下统一构建

electron-builder 可以实现构建 nsis, forge 默认构建 Squirrel.Windows, 需要安装 Wrapper command 'wine64' not found on the system. Run brew install —cask wine-stable to install 64-bit wine on macOS via Homebrew.

无法对 win 做 EV 签名

这个有一些魔法,比如有个朋友写了一个程序, 在 mac 下构建后, 再发给 win 的机器去只做签名, 然后再发回来, 这样就可以了。

netless-io/sign-server: SignTool.exe as a server., 使用示例: flat/desktop/main-app/scripts/pack/sign.js at main · netless-io/flat, 通过 API 把文件发过去了。

Windows 下

无法构建 MacOS

会提示 Build for macOS is supported only on macOS, please see https://electron.build/multi-platform-build

Electron Build Service · Issue #2359 · electron-userland/electron-builder

参考的项目

不过你可以看下 electron fiddle 的 签名 CI fiddle 使用的是 EV,并且可以在 CI 中无交互式完成

electron/fiddle: :electron: 🚀 The easiest way to get started with Electron, 这个项目是基于 forge 构建的, 配置文件是: fiddle/forge.config.ts at main · electron/fiddle

forge 关于 windows 的签名是这样的: Signing a Windows app - Electron Forge, 是配置在 @electron-forge/maker-squirrel 中的, Squirrel.Windows - Electron Forge。底层使用的是 electron/windows-installer: Build Windows Installers for Electron apps, 配置参数完整的在这里: Options | Electron Forge

但是好像没有写 EV 签名的介绍: How to the code sign the App using EV Certificate ? · Issue #3212 · electron/forge, 难道是: signWithParams 中传递的 process.env.CERT_FINGERPRINT, 这个如果写的话, 是会传递给 signtools 的, signtools 会再去唤起客户端。