用于在 Travis CI 上进行测试的代码签名 macOS 应用程序

Posted

技术标签:

【中文标题】用于在 Travis CI 上进行测试的代码签名 macOS 应用程序【英文标题】:Code Signing macOS App for Testing on Travis CI 【发布时间】:2020-03-18 07:38:03 【问题描述】:

我正在尝试在 Travis CI 上向我的 macOS 应用程序添加自动化测试,但无法确定代码签名。


我的(私有)GitHub 存储库设置为在我推送到 master 时触发 Travis 构建作业。

对于 ios 项目,Xcode 为模拟器平台构建/运行/测试项目,因此测试不需要代码签名(当然,使用 distribution 身份签名是部署构建所必需的. 但我只想运行单元测试)。

但是对于 macOS 应用,没有“模拟器”:代码是在开发机器本身上构建和运行的

This article 解释了如何将 distribution 代码签名工件添加到 Travis 的机器,以便它可以为 iOS 构建/签名分发二进制文件。

我已经修改了那里解释的步骤以使用 ma​​cOS 开发工件而不是 iOS 分发。解密我的工件并将它们安装在 Travis 机器上的脚本似乎没有问题。

问题

但是,与分发不同,开发 配置文件包含允许运行构建的特定设备列表;就我而言,我的个人资料显然只包含我本地机器的设备 ID。显然,我无法获取 Travis 使用的 mac 的设备 ID,即使可以,构建显然每次都在不同的机器上运行。

如何在 Travis CI 上构建和单元测试 macOS 应用程序?

【问题讨论】:

【参考方案1】:

TL;博士:

我通过完全禁用代码签名解决了代码签名问题(运行单元测试不需要它),正如this brilliant answer @robmayoff 中所述。

细节

我仍然需要代码签名来在本地测试我的应用程序(它使用权利来读取/写入用户选择的文件和文件夹)。所以我通过克隆Debug在Xcode中创建了一个新配置,命名为UnitTest

我为此配置禁用了代码签名并将开发团队设置为“无”。

接下来,我创建了一个专用的方案(当然是共享的),它使用UnitTest 配置进行构建和测试。我必须在 App 目标和 Tests 目标中都这样做(我放弃了 UI 测试,因为它们需要启用可访问性才能运行,而远程计算机没有这些权限)。我必须这样做,因为我无法让 xcbuild 工具使用UnitTests 配置。

我的 Travis 构建还没有完全成功完成,但我已经克服了大部分障碍(包括代码签名)。

希望这对某人有所帮助!

更新

我终于让 Travis CI 成功构建和测试我的应用程序。题外话,但我的代码有以下问题:

macOS 10.15 的部署目标(Travis 上的最新可用图像是 10.14) 该项目链接到 CryptoKit.framework(仅从 10.15 开始可用!);必须用 CommonCrypto 中的类似功能替换它。

不知何故,上述问题并没有阻止构建应用程序,只是运行测试。我收到 CryptoKit.framework 的“找不到图像”错误。

【讨论】:

以上是关于用于在 Travis CI 上进行测试的代码签名 macOS 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Xcodebuild-由于代码签名错误,Travis CI 无法归档使用 cocoapods 的项目?

在 CI (Travis/Jenkins) 环境中使用 xcodebuild (Xcode 8) 和自动签名

golang Travis CI Webhooks签名验证

Travis-CI 可以运行 Codeception 测试吗?

Swift 测试在本地通过,但在 Travis-CI 上构建失败

webpack配置篇(三十五):持续集成和Travis CI