为 M1 mac 签署 Electron 构建会导致渲染器崩溃

2024-06-20

一段时间以来,我一直在使用 Electron-Builder 对我们的 Electron 应用程序进行英特尔构建,对它们进行签名,并且能够毫无问题地运行它们。

我现在正在尝试进行 M1/arm 构建,但事实证明签署该构建会导致渲染器崩溃。不签署构建不会导致崩溃。这对于 intel 构建来说不是问题。 (无论构建机器是intel还是arm,以及随后是否调用notarize都一致)

我在应用程序启动期间看到以下内容(特别注意顶部的 v8 致命错误,这是这里主要关注的问题):

[...]
<--- Last few GCs --->


<--- JS stacktrace --->

[22739:0331/171516.826773:FATAL:v8_initializer.cc(820)] 
render-process-gone { reason: 'crashed', exitCode: 5 }
[...]
Error sending from webFrameMain:  Error: Render frame was disposed before WebFrameMain could be accessed
    at EventEmitter.n.send (node:electron/js2c/browser_init:169:417)
    at EventEmitter.b.send (node:electron/js2c/browser_init:165:2494)
    at c.<anonymous> (/Users/armelchesnais/Documents/Rave/desktop/dist/mac-arm64/Rave-blue.app/Contents/Resources/app/main.prod.js:2:587569)
    at c.emit (node:events:390:28)
    at c.emit (node:domain:475:12)
    at c.doCheckForUpdates (/Users/armelchesnais/Documents/Rave/desktop/dist/mac-arm64/Rave-blue.app/Contents/Resources/app/main.prod.js:2:993643)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at w.retries (/Users/armelchesnais/Documents/Rave/desktop/dist/mac-arm64/Rave-blue.app/Contents/Resources/app/main.prod.js:2:588005)
Error sending from webFrameMain:  Error: Render frame was disposed before WebFrameMain could be accessed
    at EventEmitter.n.send (node:electron/js2c/browser_init:169:417)
    at EventEmitter.b.send (node:electron/js2c/browser_init:165:2494)
    at BrowserWindow.<anonymous> (/Users/armelchesnais/Documents/Rave/desktop/dist/mac-arm64/Rave-blue.app/Contents/Resources/app/main.prod.js:2:632050)
    at BrowserWindow.emit (node:events:390:28)
    at BrowserWindow.emit (node:domain:475:12)

因此,我将无法分发该应用程序的arm/M1版本。 我不知道签名如何影响仅在一种架构上的渲染器崩溃。

我该如何解决这个问题?

  • 电子 v17.1.2
  • 电子构建器 23.0.2

我不确定我们是否遇到了与您相同的问题,但以下步骤为我们的用户解决了此类问题。

在我们的例子中,这是由本机依赖项引起的。这.node本机依赖项的文件被视为单独的可执行文件,预计在正常情况下进行签名。当它们不存在时发生的沙箱似乎只发生在配备新 M1 芯片的机器上。

我不确定所有这些更改是否必要,因为我们没有配备 M1 芯片的机器。我会在缩小答案时更新这个答案,但由于我们缺乏硬件,这可能需要一段时间。

根据我的研究,我们实施了以下三项更改:

  1. 确保您的entitlements.plist至少具有以下内容。还要确保复制默认的属性plist for electron-notarize如果你使用它。
  <dict>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
  </dict>

Source https://github.com/electron-userland/electron-builder/issues/3940#issuecomment-511492360

  1. 指定两者的权利文件entitlements and entitlementsInherit (See docs https://www.electron.build/configuration/mac.html)

  2. 添加以下内容asarUnpack https://www.electron.build/configuration/configuration.html

asarUnpack: ['**/*.node']

如果这有帮助,请告诉我!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 M1 mac 签署 Electron 构建会导致渲染器崩溃 的相关文章

随机推荐