如何在持续集成上对 macOS 应用程序进行代码签名

How to code-sign a macOS App on Continuous Integration

我完成的步骤:

  1. 为我的 MacOS 应用程序创建了一个新的空白 Xcode 项目
  2. 为 CI 设置创建了 .travis.yml 文件
  3. 推送 未编辑 Xcode 项目到我的 GitHub 仓库
  4. Travis 开始构建我的项目,但它抛出错误:

    未找到签名证书 "Mac Development":未找到 "Mac Development" 签名证书匹配 ID "XXXXX" 和私钥

我的.travis.yml:

os: osx
language: swift
osx_image: xcode11.3
script: xcodebuild clean build test -project MyApp.xcodeproj -scheme "MyApp" -sdk "macOS 10.15" -destination "platform=macOS" ONLY_ACTIVE_ARCH=NO

我尝试了完全禁用代码签名的技巧 (),但这更像是一个 hack。但我想要一个干净的解决方案。

然而 Xcode 签署了我的代码,但 Travis 没有。 我怎样才能在 Travis CI 上签署我的 MacOS 应用程序? 顺便说一句:我只有一个 free Apple 开发者帐户,所以我无法从 https://developer.apple.com

下载证书

使用免费 Apple 开发者帐户签名的版本不会 运行 在未连接到您的开发者帐户的计算机上。您需要一个付费开发者帐户才能使用开发者 ID(在应用商店之外)或为 App Store 签署软件。

也就是说,对于 macOS(但不是 iOS/tvOS/etc),使用 CI 构建的二进制文件可能会被某人 运行 下载到禁用 Gatekeeper 的机器(在仅限 10.15, 推荐),或使用 文件 > 打开 命令或上下文菜单的 打开命令启动应用程序(带有警告)。

在 CI 环境中,在没有签名的情况下构建然后在稍后添加签名是相当普遍的(例如,这可以防止意外运送未经最终测试的二进制文件,或允许公司限制谁可以构建官方二进制文件以及在什么情况下)。

需要说明的是,没有签名证书和密钥,您无法签署应用程序。