我们有一个移植到Mac的多平台命令行可执行文件和库。文件布局为
- /应用程序/
- (公司文件夹)/
- (我们的UI).app
- (产品名称)/
- bin /
- ...执行官...
- lib /
- ... dylibs ...
- (其他东西)/ ...
- bin /
- (公司文件夹)/
它和应用程序一起都在经过代码签名的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,但这没有帮助