electron - 电子中的节点画布——“映射文件没有 cdhash,完全未签名?代码必须至少是临时签名的。”
问题描述
我正在使用节点画布制作电子应用程序。
我通过以下命令生成了一个应用安装程序:
$ electron-builder --mac --x64 --config ./build_mac.js
build_mac.js
const config = {
"appId": "jp.maplat.editor",
"asarUnpack": [
"assets/mac/canvas"
],
"directories": {
"output": "dist"
},
"files": [
"assets/mac",
"backend",
"css",
"frontend/dist",
"html",
"img",
"locales",
"package.json",
"package-lock.json",
"tms_list.json"
],
"afterSign": "script/notarize/notarize.js",
"mac": {
"icon": "assets/mac/icon_mac.icns",
"target": [
"dmg"
],
"hardenedRuntime": true,
"gatekeeperAssess": false,
"entitlements": "script/notarize/entitlements.mac.plist",
"entitlementsInherit": "script/notarize/entitlements.mac.plist",
},
"win": {
"icon": "assets/win/icon_win.ico",
"target": "nsis"
},
"nsis":{
"oneClick": false,
"allowToChangeInstallationDirectory": true
}
};
module.exports = config;
但安装电子应用程序后,该应用程序在 Web 控制台上输出以下错误消息:
未捕获的错误:dlopen(/Applications/MaplatEditor.app/Contents/Resources/app.asar.unpacked/assets/mac/canvas/build/Release/canvas.node,1):未加载库:/usr/local/opt/ pixman/lib/libpixman-1.0.dylib 引用自:/Applications/MaplatEditor.app/Contents/Resources/app.asar.unpacked/assets/mac/canvas/build/Release/canvas.node 原因:找不到合适的图像。确实发现:/usr/local/opt/pixman/lib/libpixman-1.0.dylib:(/usr/local/opt/pixman/lib/libpixman-1.0.dylib)中的代码签名在使用库验证的过程中无效: 映射文件没有 cdhash,完全无符号?代码必须至少是临时签名的。
如何解决这个问题?我觉得有2个问题,
- 如何签署这个dylib?
- 这个 dylib 看起来安装在“/usr/local/opt”下,它不在应用程序文件夹中。这是正确的预期行为吗?
有人对此有答案吗?
解决方案
解决此问题的解决方案是将所有 dylib(除了在“/usr/lib”或“/System/Library/Frameworks”下)放在受电子控制的文件夹下。
在我的项目中是这样的: https ://github.com/code4history/MaplatEditor/tree/master/assets/mac/canvas/build/Release
但是仅仅放置 dylib 是行不通的,因为每个 dylib 都有关于链接到其他库的信息。
您可以使用“otool”命令检查从每个 dylib 链接的库,并可以使用“install_name_tool”命令覆盖它。
https://github.com/code4history/MaplatEditor/blob/master/mac_canvas_dylib
在这个 URL 中,您可以找到我为我的项目所做的工作。
推荐阅读
- powershell - 如何运行与 PowerShell 别名同名的命令?
- javascript - 未捕获的类型错误:无法读取 null Chrome 2020 的属性“clientHeight”
- html - 输入元素高度大于字体大小
- javascript - 按顺序检索对象的条目
- docker - 如何在 Kubernetes 内部调用 Redis?删除旧 Redis 服务的问题
- flutter - 如何使一行可点击?扑
- ssis - ODBC 源版本 clsid {9EAC76F9-8D61-4F12-9E7B-529CF31765A1} 与此版本的 DataFlow 不兼容。"
- python - numpy矩阵链乘法是否优化?
- python-3.x - Tensorflow GPU:错误说.dll文件未找到,但它确实存在
- java - 在Android中定义相同的ID可以吗?