node.js - 未能正确使用电子打包程序进行代码设计或通过 npm 为基于 Electron 的 macOS 应用程序注入 plist 项目
问题描述
背景
我有一个基于电子的应用程序(MyElectronApp),我可以签名和公证(耶!)
但是,虽然它有效,但我不知道如何将新项目注入到 Electron 属性列表中或electron-package
正确构建和签名。
我如何构建 MyElectronApp
我像这样构建MyElectronApp:
npm install && npm run make
我不明白幕后发生了什么,但神奇的是,这会在out/
我的应用程序中生成一个目录,我可以通过以下方式验证代码签名:
codesign -vvv out/MyElectronApp-darwin-x64/MyElectronApp.app
像冠军一样工作。但是.....我发现我需要修改,但我找不到Info.plist
用这个过程来做的方法。我添加了我自己的权利
"config": {
"forge": {
"packagerConfig": {
"icon": "icon.ico",
"osxSign": {
"identity": "Developer ID Application: *********** (**********)",
"hardened-runtime": true,
"entitlements": "entitlements.plist",
"entitlements-inherit": "entitlements.plist",
"signature-flags": "library"
}
但我找不到任何方法将 plist 项目添加到构建的产品中。
我接下来尝试了什么
我发现我可以使用注入plist
项目,electron-packager
所以我尝试用这个来构建:
electron-packager . "MyElectronApp" --platform=darwin --arch=x64,arm64 --app-bundle-id="com.spartygw.electron" --app-version="1.0.0" --build-version="1.0.100" --extend-info my.plist
这确实有效!它生成 2 个新目录:
MyElectronApp-darwin-arm64/
MyElectronApp-darwin-x64/
Info.plist
里面确实有我的plist
合并my.plist
。不幸的是,这些都没有签名。然后我尝试使用以下代码进行协同设计:
codesign --deep --preserve-metadata=entitlements --force --options runtime --verify --sign "Developer ID Application: *********** (**********)" MyElectronApp-darwin-x64/MyElectronApp.app
检查签名:
$ codesign -vvv MyElectronApp-darwin-x64/MyElectronApp.app
--prepared:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/MyElectronApp Helper (GPU).app
--validated:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/MyElectronApp Helper (GPU).app
--prepared:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/ReactiveObjC.framework/Versions/Current/.
--validated:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/ReactiveObjC.framework/Versions/Current/.
--prepared:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/Squirrel.framework/Versions/Current/.
--validated:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/Squirrel.framework/Versions/Current/.
--prepared:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/MyElectronApp Helper (Plugin).app
--validated:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/MyElectronApp Helper (Plugin).app
--prepared:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/MyElectronApp Helper (Renderer).app
--validated:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/MyElectronApp Helper (Renderer).app
--prepared:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/Electron Framework.framework/Versions/Current/.
--validated:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/Electron Framework.framework/Versions/Current/.
--prepared:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/Mantle.framework/Versions/Current/.
--validated:/Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/Mantle.framework/Versions/Current/.
MyElectronApp-darwin-x64/MyElectronApp.app: nested code is modified or invalid
file modified: /Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/MyElectronApp Helper.app
如果我尝试签署MyElectronApp Helper.app
然后验证该组件:
$ codesign -vvv MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/MyElectronApp\ Helper.app
MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/MyElectronApp Helper.app: valid on disk
但是如果我检查整个发行版,我仍然会得到这个:
MyElectronApp-darwin-x64/MyElectronApp.app: nested code is modified or invalid
file modified: /Users/spartygw/src/electron/MyElectronApp-darwin-x64/MyElectronApp.app/Contents/Frameworks/MyElectronApp Helper.app
概括
- 所以我有一个有效的构建过程,但我不知道如何注入
plist
项目 - 我有一个构建过程,我可以在其中注入
plist
项目(电子包装器),但我无法正确地进行代码设计
任何一种解决方案都会很棒。
解决方案
推荐阅读
- php - Laravel sync() 与多维数组
- arrays - 第 k 个最大元素的 QuickSelect 与 MaxHeap
- php - PHP if in foreach 给出对象
- python - Colaboratory 中 plot_model() 的“断言错误”
- svg - 曲线线性渐变
- python-3.x - TypeError: multiply(): PySeal 库中的函数参数不兼容
- docker - Visual Code与docker容器的连接频繁重连
- python - 是否可以使用可变长度列表作为字典键?
- c# - 是否可以在 Linq 或 Lambda 表达式中包含 Where 或 Any 表达式?
- java - 带有 AppCompat 的 BottomNavigationView