我在Mac上签名时电子应用程序崩溃

时间:2019-12-22 03:18:54

标签: electron electron-builder

我正在尝试将电子应用程序与电子生成器打包在一起,电子生成器是用于发布电子应用程序的最受欢迎的库。我在Mac上,并且拥有开发者帐户。使用 electron-builder build --mac zip 命令运行构建过程时,Electron-builder会在我的Mac的钥匙串Access中自动搜索开发人员证书,并将其应用于应用程序。当我为Mac构建应用程序时,似乎对其进行了很好的构建(包括对其进行签名)。与签名相关的终端中的日志为:

signing file=dist/mac/*appname*.app identityName=Developer ID Application: *MyDeveloperName*
        (*myDeveloperNumber*) identityHash=*someLongHashString* provisioningProfile=none

但是当我尝试打开该应用程序时,它立即崩溃,并且错误报告指出了无效的签名代码:

Exception Type:        EXC_BAD_ACCESS (Code Signature Invalid)
Exception Codes:       0x0000000000000032, 0x000039e9b3542040
Exception Note:        EXC_CORPSE_NOTIFY
Termination Reason:    Namespace CODESIGNING, Code 0x2

但是开发者帐户仍然有效。如果我在构建它时不签名(将标识设置为null),它将很好地执行。

// package.json
"build": {
  "appId": "com.example.appname"
  "mac": {
    "identity": null
  }
}

当我构建并尝试执行任何电子应用程序(包括Electron入门页面上的HelloWorld应用程序)时,都会得到相同的错误结果,因此它具有通用性。

Electron-builder有一个样板,他们建议使用Webpacker,我的应用程序不需要它。如果我只是下载该样板并构建一个应用程序,则它会对其进行签名并且可以正常工作而不会出现错误。这样就可以确认这不是我的开发人员ID的问题。我宁愿不使用他们的样板,因为它增加了另一层复杂性,而且我不确定如何使已经构建的应用程序与他们的样板集成。我只希望我的应用程序签名可以在常规应用程序上使用。我是否缺少一些基本步骤?是什么原因导致此问题?

1 个答案:

答案 0 :(得分:0)

我已经开始工作了。在签名之前,我必须启用Apple的Hardened Runtime(https://developer.apple.com/documentation/security/hardened_runtime_entitlements)。强化的运行时为您的应用程序增加了限制,从而为用户提供了针对潜在漏洞的增强安全性,例如代码注入,动态链接库(DLL)劫持和进程内存空间篡改。

基本上遵循此博客中Electron-builder也链接到https://kilianvalkhof.com/2019/electron/notarizing-your-electron-application/的步骤。 由于某种原因,这在我尝试尝试前几次(在发布此问题之前)对我来说不起作用,但现在可以了。这些说明用于对应用程序进行公证,但是如果您只想对其进行签名,请遵循前两个步骤。要点是没有添加强化的运行时,签名将在应用程序启动时失败。