【问题标题】:Jenkins web download corrupts mac app code signingJenkins 网络下载损坏了 mac 应用程序代码签名
【发布时间】:2015-06-20 02:12:35
【问题描述】:

我看到一个奇怪的代码签名/文件传输问题,但没有找到任何关于原因的线索,想知道是否其他人有想法。

我有一个运行 jenkins 的 Mac OS X 构建服务器,它可以很好地构建和签署 mac 组件和应用程序。其中包括属于 Final Cut Pro X 插件的应用。

当我使用这些 FCPX 应用程序通过浏览器(从 Jenkins 构建页面)下载构建系统生成的 zip 文件时,解压缩后该应用程序将无法启动 - 它说它来自未知开发人员,就好像它不是'没有代码签名。

然而,如果我以另一种方式获得相同的构建输出 zip - 通过 sftp 下载或通过 afp-mounting 构建机器文件系统 - 它工作得很好。

它最初肯定是在构建系统上进行代码签名的,因为安装程序(在构建系统的下游构建)部署了完全代码签名的应用程序。

为什么通过浏览器从 jenkins 下载 zip 会破坏应用的代码签名?我已经从几个浏览器(Chrome、Firefox、Safari)上尝试过,它总是一样的。我怀疑这是应用程序包位或 sim 的问题。除了下载被打包在一个 zip 档案中,所以这无关紧要。它是使用 OS-native /usr/bin/zip 命令创建的(不是 ant 或 python 或其他可能不熟悉捆绑的版本)。

【问题讨论】:

    标签: macos jenkins code-signing zip


    【解决方案1】:

    所以事实证明这是 OS X 看门人的错 - 它似乎与 jenkins 没有任何关系。操作系统向 zip 添加了一个隔离属性,该属性在解压缩时与应用程序包一起标记,这似乎导致它将应用程序视为未签名,即使它已签名。

    这似乎是 OS X 中的一个错误。由于应用程序已签名并且网守设置是允许已签名的应用程序,因此不应使用此隔离属性来搞砸应用程序。该应用程序运行良好,如果通过浏览器下载以外的任何方式部署,则将其视为已签名。

    有一些解决方法,其中一些是同事发现的。

    一种是通过浏览器以外的其他方法下载应用程序 - 我使用了 sftp、构建系统卷的 afp 挂载和来自 python 脚本的 http 请求,所有这些都有效。

    另一个是下载后去掉隔离设置:

    xattr -dr com.apple.quarantine my_file.zip
    

    还有一个是使用 7z 代替原生 unzip / Archive Manager 来解压存档。

    【讨论】:

    • 您有没有想出更好的解决方案?您如何将应用程序分发给用户?当我将它发送给 beta 测试人员从 S3 服务器下载时,我遇到了同样的问题 - codesign 和 spctl 都说它是有效的,但是当隔离属性被设置时,它还是失败了!
    • 我遇到了同样的问题,但我让用户从我的服务器下载压缩和解压缩我的 .app 文件,然后添加该属性并且不让我的代码签名正常工作。我不知道如何为我的用户解决这个问题。有没有人对此有任何答案。为什么苹果让事情变得如此愚蠢!?!?!?!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2011-01-31
    相关资源
    最近更新 更多