【问题标题】:Electron-notarize problem not signing all binaries电子公证问题未签署所有二进制文件
【发布时间】:2021-01-17 22:55:10
【问题描述】:

我在电子公证方面遇到了奇怪的问题。 我按照此页面上的教程进行操作:https://kilianvalkhof.com/2019/electron/notarizing-your-electron-application/

这似乎很彻底,所以我不知道我错过了什么。 在 notarize.js 之前一切正常:

require('dotenv').config();
const { notarize } = require('electron-notarize');

exports.default = async function notarizing(context) {
  const { electronPlatformName, appOutDir } = context;  
  if (electronPlatformName !== 'darwin') {
    return;
  }

  const appName = context.packager.appInfo.productFilename;

  return await notarize({
    appBundleId: 'com.oriolgomez.beatstar',
    appPath: `${appOutDir}/${appName}.app`,
    appleId: process.env.APPLEID,
    appleIdPassword: process.env.APPLEIDPASS,
  });
};

公证日志如下所示: { “logFormatVersion”:1, “jobId”:“de0d8e6d-2f5b-4937-b2eb-124b0e831281”, “状态”:“无效”, "statusSummary": "存档包含严重的验证错误", “状态码”:4000, "archiveFilename": "beatstar.zip", "上传日期": "2020-10-02T08:02:04Z", “sha256”:“e85e189e57f04af30f21e2040580830167a7f704ea6ab70b8f315e3cc9cb6a80”, “票务内容”:空, “问题”: [ { “严重性”:“错误”, “代码”:空, "路径": "beatstar.zip/beatstar.app/Contents/MacOS/beatstar", "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, "path": "beatstar.zip/beatstar.app/Contents/Frameworks/beatstar Helper (GPU).app/Contents/MacOS/beatstar Helper (GPU)", "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, “路径”:“beatstar.zip/beatstar.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework”, "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, “路径”:“beatstar.zip/beatstar.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libEGL.dylib”, "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, “路径”:“beatstar.zip/beatstar.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libswiftshader_libEGL.dylib”, "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, “路径”:“beatstar.zip/beatstar.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libvk_swiftshader.dylib”, "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, “路径”:“beatstar.zip/beatstar.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libGLESv2.dylib”, "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, “路径”:“beatstar.zip/beatstar.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libswiftshader_libGLESv2.dylib”, "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, “路径”:“beatstar.zip/beatstar.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib”, "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, “路径”:“beatstar.zip/beatstar.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Helpers/chrome_crashpad_handler”, "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, “路径”:“beatstar.zip/beatstar.app/Contents/Frameworks/Squirrel.framework/Versions/A/Squirrel”, "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, “路径”:“beatstar.zip/beatstar.app/Contents/Frameworks/Squirrel.framework/Versions/A/Resources/ShipIt”, "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, “路径”:“beatstar.zip/beatstar.app/Contents/Frameworks/ReactiveCocoa.framework/Versions/A/ReactiveCocoa”, "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, “路径”:“beatstar.zip/beatstar.app/Contents/Frameworks/Mantle.framework/Versions/A/Mantle”, "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, "path": "beatstar.zip/beatstar.app/Contents/Frameworks/beatstar Helper.app/Contents/MacOS/beatstar Helper", "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, "path": "beatstar.zip/beatstar.app/Contents/Frameworks/beatstar Helper (Plugin).app/Contents/MacOS/beatstar Helper (Plugin)", "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” }, { “严重性”:“错误”, “代码”:空, "path": "beatstar.zip/beatstar.app/Contents/Frameworks/beatstar Helper (Renderer).app/Contents/MacOS/beatstar Helper (Renderer)", "message": "二进制文件没有使用有效的 Developer ID 证书签名。", “docUrl”:空, “架构”:“x86_64” } ] }

【问题讨论】:

  • 这对于那个库来说似乎很具体。您可能还想在github project 中打开一个问题。我看到的第一件事就是这个错误消息The binary is not signed with a valid Developer ID certificate.你使用了正确的开发者证书吗?
  • 另外,为了更好地了解您在做什么 - 您能否将您的电子生成器配置添加到您的问题中?
  • ``` appId: "com.oriolgomez.beatstar" "directories": { "output": "dist", "buildResources": "build", } "afterSign": "build/notarize .js" nodeGypRebuild: false npmRebuild: false win: target: - target: zip arch: - ia32 mac: "hardenedRuntime" : true "gatekeeperAssess": false "entitlements": "build/entitlements.mac.plist" "entitlementsInherit": “build/entitlements.mac.plist” 目标:-目标:dmg 拱:-x64 电子版本:10.1.3```
  • 我没有在 macOS 上开发,所以我无能为力。 electron-builder 有documented 环境变量CSC_NAMECSC_KEYCHAIN。和他们一起玩可能会让你走得更远。
  • 如果您可以使用“编辑”按钮将最后评论的内容添加到您的问题中,那就太好了。评论会定期删除,因此这些信息可能会丢失。

标签: electron


【解决方案1】:

我不知道我遇到这个的原因是否和你的一样,但这是我发现的,以防这对其他人有帮助。

在手动对您的应用进行公证(使用 electron-notarize)之前,请确保您用于签署应用的证书类型正确无误。你特别需要一个Developer ID Application 证书(最后一个):

我之前一直在使用Apple Distribution,因此公证失败。您看到的文件列表可能是 Apple 检查的前几个文件,它们使用的证书类型不正确(不要引用我的话),所以它失败了。

无论哪种方式,一旦我生成了Developer ID Application 证书,就以这种方式定义我的权利:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.allow-dyld-environment-variables</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
  </dict>
</plist>

并在我的package.jsonbuild 部分中使用了这个配置:

    "mac": {
      "category": "public.app-category.developer-tools",
      "icon": "assets/icon.png",
      "hardenedRuntime": true,
      "gatekeeperAssess": false,
      "entitlements": "assets/mac/entitlements.plist",
      "entitlementsInherit": "assets/mac/entitlements.plist"
    },
    "afterSign": "./scripts/notarizeApp.js",

我能够让公证工作。

这就是我的 notarizeApp 脚本的样子,FWIW:

const path = require('path')
var notarize = require('electron-notarize')

module.exports = async function (params) {
  // Notarization only applies to macOS
  if (process.platform !== 'darwin') {
    return
  }

  let appId = '<your-app-id>'
  let appPath = path.join(
    params.appOutDir,
    `${params.packager.appInfo.productFilename}.app`
  )

  try {
    console.log(`  • Notarizing`)
    await notarize.notarize({
      appBundleId: appId,
      appPath: appPath,
      appleId: process.env.APPLE_ID_EMAIL,
      appleIdPassword: process.env.APPLE_ID_PASSWORD,
    })
  } catch (error) {
    console.error(error)
  }
}

这个应用程序对于检查公证是否成功(Taccy)非常有用: https://eclecticlight.co/taccy-signet-precize-alifix-utiutility-alisma/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2021-02-12
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多