macos - 如何确定 Gatekeeper 拒绝签名的可执行文件的原因?

标签 macos code-signing macos-catalina osx-gatekeeper

我们有一套多平台的命令行可执行文件和库,可以移植到 Mac。文件布局是

  • /应用程序/
  • (公司文件夹)/
  • (我们的用户界面).app
  • (产品名称)/
  • 仓/
  • ...执行...
  • 库/
  • ...dylibs...
  • (其他)/...

  • 这是在一个经过代码签名的 DMG 中提供的,就像应用程序一样。这在 Catalina 之前工作正常。

    现在在 Catalina 上,我们已经对所有可执行文件、dylib、应用程序(包括嵌套在顶级应用程序框架中的那些)、框架和 DM 本身进行了代码签名。当我们对其进行公证时,生成的 JSON 日志没有列出任何问题。但是,当我运行我们的任何可执行文件时 这取决于我们的 dylib 之一 我收到一个弹出窗口,告诉我“无法识别开发人员”。即使它已经签署和公证了。使用 -dvvv 选项运行 codesign 包括以下内容:
  • SHA-256 哈希选择
  • 以 Apple 根 CA
  • 终止的授权条目列表
  • 团队标识符条目
  • 时间戳
  • 运行时间:10.13.0

  • 问题 我该如何解决这个问题,或者至少让 Gatekeeper 告诉我为什么它不接受这个文件?也许是一个日志,或者相当于 spctl --assess 的文件而不是应用程序?

    观察
  • 这只发生在
  • 操作系统是 Catalina
  • 它在/Applications 文件夹下
  • 在/Applications 之外(例如,在桌面上的文件夹中)它只在某些时候发生(有时它声称第一次尝试时无法加载 dylib,然后在稍后尝试时成功)
  • 可执行文件依赖于我们的一个或多个 dylib(独立的运行正常)
  • 可执行文件设置了 com.apple.quarantine xattr
  • 我试图在干净和下载(即隔离-xattr'd文件)之间混合'n'match,并且只有在隔离可执行文件时才会出现问题;它不关心非隔离的可执行文件是否加载了隔离的 dylib
  • 签名操作是通过带有参数“--deep --strict --timestamp --options runtime”的协同设计完成的,然后验证
  • 编辑:我已经对此进行了更新,以包括一些强化运行时权利来修复另一个构建问题,但它并没有帮助解决这个问题
  • 可执行文件通过@rpath 依赖于dylib(由otool -L 报告)
  • 编辑:在每种情况下,我都尝试用@executable_path/../lib 替换@rpath,但这并没有帮助
  • 最佳答案

    苹果还没有添加到他们的文档中的另一个花絮;如果您分发的是 dylib 而不是完整的应用程序包,则无法将公证结果装订到其中。到目前为止,所以documented , Catalina 应在安装软件时在线验证公证。

    但是,经过公证的 dylib 将在构建机器上被拒绝 除非您将其添加到容器(即 zip/dmg)中,否则请删除原始副本,然后在公证被完全接受后再次从 zip 中提取它(即您已收到成功电子邮件)。似乎只有在创建文件时才检查公证。

    您始终可以在 XCode 中运行它,但不能单独运行它,而无需删除和替换二进制文件。

    关于macos - 如何确定 Gatekeeper 拒绝签名的可执行文件的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58749789/

    相关文章:

    iphone - 我们如何使用别人的 Enterprise 程序对 iPhone 应用程序进行签名?

    java - 是否可以使用更新的证书重新签署 Java applet?

    openssl - 如何使用 osslsigncode 执行代码签名

    java - bundle 的 Java 应用程序被识别为 32 位,它可以在 macOS 10.15 Catalina 下运行吗?

    Android Studio 无法打开现有项目

    macos - 如何在 Mojave/Catalina 下从后台(基于 launchctl)进程录制音频?

    macos - 尽管 header 注释,在 Swift 中采用 NSTextFinderBarContainer 协议(protocol)会强制变量初始化

    linux - 在 Win7/Mac OS X/Ubuntu 文件系统上,单个文件夹中最多可以保存多少个文件?

    python - 无需退出 Python 脚本即可完全清除 Mac OS X 上的终端

    Python:在没有 OpenCV 的情况下访问相机