XCTest:如果我只是对我的测试目标进行更改,我如何防止 Xcode 不必要地重新编译我的项目

XCTest: How do I prevent Xcode from needlessly recompiling my project if I'm only making changes to my test Target

我的 Xcode 项目在源文件数量和代码行数方面非常大。 当我只更改 XCTest 代码,并在单个测试、单个测试文件甚至整个测试套件上点击 运行 时,Xcode 会首先重新编译我的主机应用程序,即使主机应用程序中没有文件发生变化。每次我对任何测试文件进行任何更改时,它都会这样做。

这对编写测试提出了效率挑战,因为测试代码中的小调整需要很长时间才能重新 运行 和重新验证。 (每 运行 超过 3 分钟 - 是的,这是一个很大的项目,我们已经采取了许多措施来减少构建时间,通过检查构建日志等...)

使用 Xcode 10.3 和 Swift 4.2

测试正在使用:

@testable import MyModuleName

如果我只更改了测试,有什么方法可以防止 Xcode 重新构建整个项目?

我发现了问题。

我们在项目的构建阶段部分下有一些自定义脚本,它们实际上更改了代码库中的一些可编译资产。我们还有一个 Carthage 依赖复制阶段。

从构建阶段注释掉这两个阶段使得整个项目在仅更改测试时不会重新编译。这些脚本实际上是在对可编译代码进行更改,使 XCode 强制重新编译。

故事的寓意:检查构建阶段是否有任何可能修改源代码的步骤,包括可能是目标一部分的资源文件。我们将在未来尝试以更自动化的方式执行此操作,而不必注释掉这些构建步骤。