在 Xcode 项目中构建所有目标(或方案)

Posted

技术标签:

【中文标题】在 Xcode 项目中构建所有目标(或方案)【英文标题】:Build all targets (or schemes) in Xcode project 【发布时间】:2017-10-27 22:30:27 【问题描述】:

我有一个包含许多目标的 Xcode 项目。其中六个是使用构建阶段下的运行脚本构建最终发布产品(静态库、框架)的聚合。我可以单独构建它们,但我找不到任何方法来点击“一个按钮”来构建它们。

方法#1

首先我尝试从命令行使用 -alltargets,如下所示:

xcodebuild -project MyProject.xcodeproj -alltargets

因此,我的测试目标出现错误,声称它们不是为测试而构建的。我不知道这意味着什么,因为他们通常会正确“测试”。以这种方式尝试时会有所不同。但从技术上讲,它包括我不感兴趣的目标。如果它有效,我不会介意。

方法#2

接下来我尝试制作一个聚合,它有一个单独构建每个聚合目标的运行脚本,如下所示:

xcodebuild -project MyProject.xcodeproj -target FirstAggregateTarget
xcodebuild -project MyProject.xcodeproj -target SecondAggregateTarget
xcodebuild -project MyProject.xcodeproj -target ThirdAggregateTarget
xcodebuild -project MyProject.xcodeproj -target FourthAggregateTarget
xcodebuild -project MyProject.xcodeproj -target FifthAggregateTarget
xcodebuild -project MyProject.xcodeproj -target SixthAggregateTarget

从 Xcode 的角度来看,它没有出现任何错误,但是有几个聚合没有正确构建。我猜想,各个聚合中的运行脚本不知何故受到***聚合的影响。

方法#3

接下来,我尝试制作一个新的“RELEASE_PRODUCTS”方案,在构建部分列出了六个聚合。有了这个,我得到了这样的错误:

还有其他一些关于构建产品未在预期位置找到的模糊错误。

方法#4

接下来我创建了一个完全在 Xcode 之外运行的脚本,如下所示:

#!/bin/bash

# Builds all release products

xcodebuild -project MyProject.xcodeproj -target FirstAggregateTarget

xcodebuild -project MyProject.xcodeproj -target SecondAggregateTarget

xcodebuild -project MyProject.xcodeproj -target ThirdAggregateTarget

xcodebuild -project MyProject.xcodeproj -target FourthAggregateTarget

xcodebuild -project MyProject.xcodeproj -target FifthAggregateTarget

xcodebuild -project MyProject.xcodeproj -target SixthAggregateTarget

这似乎是唯一有效的方法。但我希望我能在 Xcode 中让它工作,如果我愿意的话,最好是我可以从命令行点击的东西,因为这样我就不必离开 IDE,它可以报告成功或失败。

【问题讨论】:

【参考方案1】:

你可以制作一个依赖于其他六个的虚拟目标。在“构建阶段”选项卡中使用目标依赖项

【讨论】:

我喜欢你的思维方式。我觉得这也应该有效,但它不适合我。我收到错误“Rm:...:目录不为空”。我认为问题必须与具有其他聚合的聚合有关,该聚合具有运行脚本作为依赖项。在那种情况下一定不能正常工作,因为我知道像这样的依赖项在其他情况下肯定有效。【参考方案2】:

灵感by sansumbrella's answer in another forum。

在您的项目中创建一个新目标(我选择使用 CLI 工具,因为我的项目是基于 CLI 的)。

根据sansumbrella,您可以创建一个应用程序并删除它的plist。我的方法不依赖于任何特殊(或不存在)的 plist。

    为您的目标命名,例如 ALL,满足其余字段,然后按“完成”。

    点击新目标的Build Phases链接并:

      删除 Compile Sources 中的条目,如果你按照我的方式进行操作,它将是 main.c。 打开Target Dependencies并通过单击+ 或将目标拖到此空间来添加所有其他目标。

当您将此目标选为活动架构时,您现在可以构建清理整个项目。

【讨论】:

以上是关于在 Xcode 项目中构建所有目标(或方案)的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 4 - 专用配置设置:构建设置和方案定义

有没有办法在 Xcode 9 中更改每个方案的 .xcconfig 文件?

在 Xcode 中有单独的测试目标方案吗?

在方案中设置构建变量而不是目标

Xcode 5:一个方案中的多个测试目标:“模拟器已在使用”

XCode 4 中的标头搜索路径