首页 > 解决方案 > 未能正确使用电子打包程序进行代码设计或通过 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

概括

任何一种解决方案都会很棒。

标签: node.jsnpmelectroncode-signingelectron-packager

解决方案


推荐阅读