Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何确定Gatekeeper拒绝已签名可执行文件的原因?_Macos_Code Signing_Macos Catalina_Osx Gatekeeper - Fatal编程技术网

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

Macos 如何确定Gatekeeper拒绝已签名可执行文件的原因?,macos,code-signing,macos-catalina,osx-gatekeeper,Macos,Code Signing,Macos Catalina,Osx Gatekeeper,我们有一套多平台的命令行可执行文件和库,可以移植到Mac。文件布局为 /应用程序/ (公司文件夹)/ (我们的UI.app) (产品名称)/ 垃圾箱/ …可执行文件 解放党/ …dylibs (其他材料)/ 这是在一个DMG中发布的,该DMG与应用程序一样经过代码签名。在卡塔琳娜之前,这一切都很顺利 现在在Catalina上,我们已经对所有可执行文件、dylibs、应用程序(包括嵌套在顶级应用程序框架中的应用程序)、框架和DM本身进行了代码设计。当我们对其进行公证时,生成

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

  • /应用程序/
    • (公司文件夹)/
      • (我们的UI.app)
      • (产品名称)/
        • 垃圾箱/
          • …可执行文件
        • 解放党/
          • …dylibs
        • (其他材料)/
这是在一个DMG中发布的,该DMG与应用程序一样经过代码签名。在卡塔琳娜之前,这一切都很顺利

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

  • SHA-256哈希选择
  • 以Apple根CA结尾的权限条目列表
  • 团队标识符条目
  • 时间戳
  • 运行时间:10.13.0
问题我如何解决这个问题,或者至少让守门员告诉我为什么它不接受这个文件?可能是一个日志,或者是一个spctl的等价物——评估文件而不是应用程序

观察

  • 这只发生在
    • 操作系统是Catalina
    • 它位于/Applications文件夹下
    • 在/应用程序之外(例如,在桌面上的文件夹中),这种情况有时会发生(有时它声称第一次尝试时无法加载动态库,如果稍后尝试,则会成功)
    • 可执行文件取决于一个或多个DYLIB(独立的运行正常)
    • 可执行文件设置了com.apple.tr
      • 我曾尝试在干净文件和下载文件(即隔离xattr文件)之间混合使用“n”匹配,只有隔离可执行文件时才会出现问题;它不在乎非隔离的可执行文件是否加载隔离的动态库
  • 签名操作是通过使用args“-deep--strict--timestamp--options runtime”的代码签名完成的,然后进行验证
    • 编辑:我已经更新了它,包括一些强化的运行时权限,以修复另一个构建问题,但它对这个问题没有帮助
  • 可执行文件通过@rpath依赖于dylibs(由otool-L报告)
    • 编辑:在每种情况下,我都尝试过用@executable\u path/./lib替换@rpath,但都没有用

苹果公司还没有在他们的文档中添加一个小道消息;如果您正在分发动态库而不是完整的应用程序包,则无法将公证结果装订到其中。到目前为止,So和Catalina应在安装软件时在线验证公证

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


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

DYLIB是否使用与主应用相同的身份签名?是,加载失败时,控制台日志中可能会写入一些信息。公证日志是否显示了您期望的所有文件?我想在“票务内容”下面。