使用electron-forge打包macOS应用时如何安全传递Apple ID等签名凭证
环境变量是完全安全的解决方案,这些凭证仅在你本地/CI的打包构建阶段被读取,不会嵌入到最终发布的应用安装包中,下载应用的用户完全无法获取到这些信息,无需担心泄露。
你不需要引入第三方依赖,按以下步骤操作即可:
第一步:将签名配置从package.json迁移到forge.config.js
electron-forge默认支持独立配置文件,比写在package.json里更灵活,也方便读取环境变量。如果你的项目目前还没有这个文件,在项目根目录新建即可。
第二步:选择环境变量设置方式
以下两种方式都不需要安装额外依赖:
本地临时打包场景:直接在执行打包命令时传入变量
Mac/Linux终端执行:APPLE_ID=你的Apple账号 APPLE_ID_PASSWORD=你的应用专用密码 npm run make
Windows PowerShell执行:$env:APPLE_ID="你的Apple账号" $env:APPLE_ID_PASSWORD="你的应用专用密码" npm run make该方式无需留存凭证,用完即失效,适合偶尔打包的场景。
高频本地打包场景:将变量写入本地终端配置文件持久化
打开你当前终端的配置文件(zsh对应~/.zshrc,bash对应~/.bash_profile),添加两行配置:export APPLE_ID="你的Apple账号" export APPLE_ID_PASSWORD="你的应用专用密码"保存后执行
source ~/.zshrc(对应zsh)或source ~/.bash_profile(对应bash)使配置生效,后续打包直接执行npm run make即可自动读取变量。
这类配置文件存放在你的系统用户目录下,不会被提交到项目Git仓库,安全性有保障。CI/CD自动打包场景:直接在对应CI平台的加密环境变量配置面板添加上述变量即可,所有主流CI平台都支持加密存储敏感变量,不会泄露。
第三步:在forge.config.js中读取环境变量
直接通过process.env调用你设置的变量即可,参考配置示例:
module.exports = { packagerConfig: { // 其他打包配置 osxSign: { // 签名配置可留空,自动读取系统钥匙串中的证书 }, osxNotarize: { appleId: process.env.APPLE_ID, appleIdPassword: process.env.APPLE_ID_PASSWORD, teamId: process.env.APPLE_TEAM_ID // 如有团队ID也按同样方式配置 } }, // 其他forge配置项 }
注意事项
不要在项目目录下的任何可提交文件(包括package.json、.js配置文件等)中硬编码敏感凭证,避免误提交到Git仓库造成泄露。
内容的提问来源于stack exchange,提问作者SeanRtS

