一段时间以来,我一直在使用 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版本。
我不知道签名如何影响仅在一种架构上的渲染器崩溃。
我该如何解决这个问题?
我不确定我们是否遇到了与您相同的问题,但以下步骤为我们的用户解决了此类问题。
在我们的例子中,这是由本机依赖项引起的。这.node
本机依赖项的文件被视为单独的可执行文件,预计在正常情况下进行签名。当它们不存在时发生的沙箱似乎只发生在配备新 M1 芯片的机器上。
我不确定所有这些更改是否必要,因为我们没有配备 M1 芯片的机器。我会在缩小答案时更新这个答案,但由于我们缺乏硬件,这可能需要一段时间。
根据我的研究,我们实施了以下三项更改:
- 确保您的
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
-
指定两者的权利文件entitlements
and entitlementsInherit
(See docs https://www.electron.build/configuration/mac.html)
-
添加以下内容asarUnpack https://www.electron.build/configuration/configuration.html
asarUnpack: ['**/*.node']
如果这有帮助,请告诉我!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)