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

问题描述 投票:4回答:1

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

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

[与应用程序一起,这是在带有代码签名的DMG中发货的。直到卡塔琳娜(Catalina),这一切正常。

现在在Catalina上,我们已对所有可执行文件,dylib,应用程序(包括嵌套在顶级应用程序框架中的应用程序),框架和DM本身进行了代码签名。当我们对其进行公证时,生成的JSON日志不会列出任何问题。但是,当我运行任何可执行文件这取决于我们的dylibs

时,会弹出一个对话框,告诉我“无法识别开发人员”。即使已签名并经过公证也可以。使用-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,但这没有帮助
  • 我们有一个移植到Mac的多平台命令行可执行文件和库。文件布局为/ Applications /(公司文件夹)/(我们的UI).app(产品名称)/ bin / ......

    macos code-signing macos-catalina osx-gatekeeper
    1个回答
    0
    投票

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

    © www.soinside.com 2019 - 2024. All rights reserved.