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 会再去唤起客户端。