You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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": [
          "**/*"
        ]
      }
    ]
  }

核心原因

  1. Gatekeeper 拦截:macOS安全机制会阻止未签名、签名无效或未公证的应用跨设备运行。
  2. 图标格式错误:使用Windows平台的.ico格式图标,不符合macOS应用要求。
  3. 构建环境缺失依赖:VirtualBox虚拟机环境可能缺少Xcode命令行工具等必要构建组件,导致打包不完整。
  4. 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,提问作者Фёдор

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:14:59