Electron macOS应用仅在构建设备可用,其他设备无法启动求助
解决Electron macOS应用跨设备无法启动问题
问题描述
在VirtualBox的macOS Catalina环境开发Electron应用,分别使用electron-builder和electron-forge制作DMG安装包。本地设备可正常安装运行,但其他Mac设备上,用户完成安装后无法启动应用,提示“无法打开应用app_name”,甚至最简空白窗口应用也存在该问题。
配置信息
electron-forge 配置
module.exports = { packagerConfig: {}, rebuildConfig: {}, makers: [ { name: '@electron-forge/maker-dmg', config: { format: 'ULFO' } } ], };
electron-builder 配置
"build": { "files": [ "**/*", "!node_modules/" ], "appId": "lib", "win": { "target": [ "nsis" ] }, "nsis": { "oneClick": false, "uninstallDisplayName": "Remove Library", "shortcutName": "Library", "menuCategory": true, "allowToChangeInstallationDirectory": true, "license": "license.md", "language": "0x046D", "multiLanguageInstaller": true, "unicode": true, "installerIcon": "icon.ico", "uninstallerIcon": "icon.ico" }, "mac": { "target": "dmg", "icon": "icon.ico", "asarUnpack": "**/*.node", "arch": [ "universal" ] }, "extraFiles": [ { "from": "license.md", "to": "license.md", "filter": [ "**/*" ] } ], "extraResources": [ "./src/extraResources/**", { "from": "tor", "to": "tor", "filter": [ "**/*" ] } ] }
核心原因
- Gatekeeper 拦截:macOS安全机制会阻止未签名、签名无效或未公证的应用跨设备运行。
- 图标格式错误:使用Windows平台的
.ico格式图标,不符合macOS应用要求。 - 构建环境缺失依赖:VirtualBox虚拟机环境可能缺少Xcode命令行工具等必要构建组件,导致打包不完整。
- Universal架构构建不完整:虚拟机环境下可能无法正确生成兼容x86_64和arm64的通用包。
解决方案
1. 配置代码签名(必做)
electron-builder 配置修改
更新package.json中的build字段,添加签名及权限配置:
"build": { // 保留原有配置 "mac": { "target": "dmg", "icon": "icon.icns", // 替换为.icns格式图标 "asarUnpack": "**/*.node", "arch": ["universal"], "hardenedRuntime": true, "gatekeeperAssess": false, "entitlements": "entitlements.plist", "entitlementsInherit": "entitlements.plist", "identity": "你的本地签名身份" // 从终端命令获取:security find-identity -v -p codesigning } }
在项目根目录创建entitlements.plist:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.cs.allow-jit</key> <true/> <key>com.apple.security.cs.allow-unsigned-executable-memory</key> <true/> <key>com.apple.security.cs.disable-executable-page-protection</key> <true/> </dict> </plist>
electron-forge 配置修改
更新forge配置文件,添加签名配置:
module.exports = { packagerConfig: { osxSign: { identity: "你的本地签名身份", entitlements: "entitlements.plist", entitlementsInherit: "entitlements.plist", hardenedRuntime: true }, osxNotarize: false // 无开发者账号时关闭公证 }, rebuildConfig: {}, makers: [ { name: '@electron-forge/maker-dmg', config: { format: 'ULFO' } } ], };
2. 替换为macOS兼容图标
将应用图标转换为.icns格式(可通过在线工具或Xcode创建),并更新配置文件中的图标路径。
3. 完善构建环境
在VirtualBox的Catalina环境中安装Xcode命令行工具:
xcode-select --install
确保构建时依赖齐全,避免打包出不完整的应用包。
4. 临时调试方案(仅用于测试)
若用户无法立即配置签名,可在目标设备上临时允许运行:
- 打开「系统设置」→「隐私与安全性」
- 在「安全性」区域找到被阻止的应用,点击「仍要打开」
内容的提问来源于stack exchange,提问作者Фёдор
相关产品推荐
相关产品推荐

