electron 为M1 macs签署电子构建版本导致渲染器崩溃

e4yzc0pl  于 2022-12-16  发布在  Electron
关注(0)|答案(1)|浏览(380)

我一直在做英特尔构建我们的电子应用程序与电子建设者有一段时间,签署他们,并能够运行他们没有问题。
我现在正在尝试创建一个M1/arm构建版本,但是结果是对该构建版本进行签名会导致渲染器崩溃。不对构建版本进行签名不会导致崩溃。这对intel构建版本来说不是问题。(无论构建机器是intel还是arm,无论随后是否调用公证,都是一致的)
我在应用程序启动过程中看到以下内容(请特别注意顶部的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版本的应用程序,我不知道签名将如何影响渲染器的崩溃只在一个架构上。
我该如何解决这个问题?

  • 电子版本17.1.2
  • 电子助洗剂23.0.2
dl5txlt9

dl5txlt91#

我不确定我们是否遇到了与您相同的问题,但以下步骤为我们的用户修复了此类问题。
在我们的例子中,这是由本机依赖项引起的。本机依赖项的.node文件被视为独立的可执行文件,在正常情况下应该被签名。当它们没有被签名时,沙箱似乎只发生在装有新M1芯片的机器上。
我不确定所有这些改变是否必要,因为我们没有配备M1芯片的机器。我会在缩减时更新这个答案,但考虑到我们缺乏硬件,这可能需要一段时间。

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

1.请确保您的entitlements.plist至少具有以下内容。如果您使用electron-notarize,还请确保复制默认plist的属性。

<dict>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
  </dict>

来源
1.为entitlementsentitlementsInheritSee docs)指定权利文件
1.为asarUnpack添加以下内容

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

请一定让我知道这是否有帮助!

相关问题