我看到了一个奇怪的代码签名/文件传输问题,并且没有找到任何关于原因的线索,不知道是否有其他人有想法。
我有一台运行jenkins的Mac OS X构建服务器,可以很好地构建和签署mac组件和应用程序。其中包括Final Cut Pro X插件的应用程序。
当我通过浏览器(来自Jenkins构建页面)使用这些FCPX应用程序下载构建系统生成的zip文件时,解压后应用程序不会启动 - 它说它来自一个未知的开发人员,好像它没有代码签名。
然而,如果我以另一种方式获得相同的构建输出 - 通过sftp下载或通过afp-mount构建机器文件系统 - 它可以正常工作。
它最初是在构建系统上进行代码签名的,因为安装程序(在构建系统的下游构建)部署了完全代码签名的应用程序。
为什么从jenkins通过浏览器下载zip会破坏应用程序的代码签名?我已经从几个浏览器(Chrome,Firefox,Safari)尝试过,它总是一样的。我怀疑它是app bundle bits或sim的问题。除了下载包含在一个zip存档中,所以这不重要。它是使用OS-native / usr / bin / zip命令创建的(不是ant或python或其他可能非bundle-savvy版本)。
答案 0 :(得分:1)
事实证明,这是OS X看门人的错 - 它似乎与jenkins没什么关系。操作系统在zip中添加了隔离属性,在解压缩时会与应用包一起标记,这似乎会导致它将应用视为未签名,即使已签名也是如此。
这似乎是OS X中的一个错误。由于应用程序已签名且网守设置允许签名的应用程序,因此不应该使用此隔离属性搞砸应用程序。该应用程序正常工作,如果通过浏览器下载以外的任何方式进行部署,则视为已签名。
有一些解决方法,其中一些是同事发现的。
一种是通过浏览器之外的某种方法下载应用程序 - 我使用sftp,afp安装构建系统卷,以及来自python脚本的http请求,所有这些都有效。
另一种方法是在下载后剥离隔离设置:
xattr -dr com.apple.quarantine my_file.zip
另一种方法是使用7z而不是本机解压缩/ Archive Manager来解压缩存档。