如何确定Gatekeeper为什么拒绝签名的可执行文件?

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

  • /应用程序/
    • (公司文件夹)/
      • (我们的UI).app
      • (产品名称)/
        • bin /
          • ...执行官...
        • lib /
          • ... dylibs ...
        • (其他东西)/ ...

它和应用程序一起都在经过代码签名的DMG中发货。直到卡塔琳娜娜为止一切正常。

现在在Catalina上,我们对所有可执行文件,dylib,应用程序(包括嵌套在顶级应用程序框架中的应用程序),框架和DM本身进行了代码签名。当我们对其进行公证时,生成的JSON日志不会列出任何问题。但是,当我运行依赖于其中一个dylib的任何可执行文件 时,会弹出一个对话框,告诉我“无法识别开发人员”。即使已签名并经过公证也可以。使用-dvvv选项运行codesign包括以下内容:

  • SHA-256哈希选择
  • 以Apple Root CA结尾的授权条目列表
  • TeamIdentifier条目
  • 时间戳
  • 运行时:10.13.0

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

观察

  • 这仅在以下情况下发生
    • 操作系统是Catalina
    • 它在/ Applications文件夹下
    • 在/ Applications之外(例如,在桌面上的文件夹中),它仅在某些情况下发生(有时它声称dylib不能在第一次尝试时加载,然后在稍后尝试时成功)
    • 可执行文件取决于我们的一个或多个dylib(独立的dylib运行正常)
    • 可执行文件已设置com.apple.quarantine xattr
      • 我试图在干净文件和下载文件(即隔离文件)之间混合使用'n'匹配项,并且仅在可执行文件被隔离时才会出现问题。不在乎非隔离的可执行文件是否加载隔离的dylib
  • 通过带有args“ --deep --strict --timestamp --options runtime”的codesign完成签名操作,然后进行验证
    • 编辑:我已经对其进行了更新,以包括一些强化的运行时权利来解决另一个构建问题,但是这并没有帮助
  • 可执行文件通过@rpath依赖于dylib(由otool -L报告)
    • 编辑:在每种情况下,我都尝试用@executable_path /../ lib替换@rpath,但这没有帮助
leekikong1986 回答:如何确定Gatekeeper为什么拒绝签名的可执行文件?

Apple尚未在其文档中添加的另一个花絮;如果您分发的是dylib而不是完整的应用程序捆绑包,则无法将公证结果作为主要内容。到目前为止,documented和Catalina应该已在安装软件后在线验证公证。

但是,经过公证的dylib将在构建计算机上被拒绝,除非您将其添加到容器(即zip / dmg)中,然后删除原始副本,然后在公证已被完全接受(即您已收到成功电子邮件)。看来仅在创建文件时才检查公证。

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

本文链接:https://www.f2er.com/3144493.html

大家都在问