Xcode 方案构建目标中的构建顺序

Posted

技术标签:

【中文标题】Xcode 方案构建目标中的构建顺序【英文标题】:Build ordering in Xcode scheme build targets 【发布时间】:2012-04-23 18:15:19 【问题描述】:

为了为我的程序构建安装程序,我添加了一个“安装程序”Xcode 项目/目标,它将所有需要的二进制文件复制到一个临时位置,然后运行必要的逻辑来构建包。

我遇到的问题是我想将此安装程序项目直接映射到其他几个项目,以便每次尝试构建安装程序项目时都构建它们(如果需要)。

我将所有目标添加到安装程序的构建目标列表(在架构中),它们的顺序如下:

Project A
Project B
Project C
Installer (self)

但是,当我进行干净的构建时,我会看到一个构建顺序(在构建日志中),如下所示:

Project C
Installer
Project A
Project B

我需要强制执行特定的构建顺序,否则安装程序将无法使用这些文件。 Xcode 允许您在 UI 中更改这些项目的顺序,但该顺序似乎没有任何作用。有没有办法强制依赖的构建顺序?

【问题讨论】:

【参考方案1】:

Xcode 允许您在 UI 中更改这些项目的顺序,但顺序 似乎什么也没做。

就我而言,这是在方案“构建”选项卡中勾选“并行化构建”时发生的。

禁用该复选框后,Xcode 始终遵循我为目标选择的顺序。

想一想是有道理的:当启用“Parallelize Build”时,它们之间没有依赖约束的所有目标都将并行构建,这可能会导致它们的乱序完成。

另一方面,如果你希望他们的 sequential 顺序被严格遵循,嗯.. 这与 parallel 构建完全相反,因此你应该禁用它选项。

【讨论】:

IMO 这种方法比上述方法更干净。有点烦人的是它隐藏在方案中,而不是就在依赖列表本身,您可以显然更改顺序。谢谢! Xcode 11 中似乎不再遵循方案中的顺序。即使未选中并行构建。【参考方案2】:

使目标 A、B 和 C 成为安装程序目标的依赖项,这将确保 A、B 和 C 在安装程序之前构建。从项目导航器中选择您的项目文件以打开项目编辑器。从目标列表中选择安装程序目标。单击编辑器顶部的 Build Phases 按钮以显示目标的构建阶段。单击 Target Dependencies 构建阶段旁边的显示三角形。单击 + 按钮添加依赖项。

当您添加目标依赖项时,目标 A、B 和 C 将在安装程序之前构建。如果需要按特定顺序构建 A、B 和 C,则必须添加更多目标依赖项。

【讨论】:

我认为这也是正确的方法,但无法使目标依赖项正常工作。当我单击“+”按钮时,我看到消息“没有可用的项目”,如果我尝试从其中一个项目中单击并拖动其中一个 .app 产品到该空间,则没有任何反应。这可能是因为我将我的“安装程序”创建为一个空项目,但由于它本身没有代码(只是脚本),我不想从一个可执行的示例项目开始。如果您能告诉我如何将项目添加到“没有可用的项目”列表中,我将不胜感激! 目标依赖项不跨越项目。您必须将 A、B 和 C 的目标添加到安装程序的项目中,才能使用目标依赖项。在您的情况下,拥有一个具有 4 个目标的项目比拥有 4 个单独的项目效果更好。【参考方案3】:

在 Xcode 13 中,现在强烈建议不要使用手动命令,并且会收到警告。

【讨论】:

以上是关于Xcode 方案构建目标中的构建顺序的主要内容,如果未能解决你的问题,请参考以下文章

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

Xcode中构建规则中的“复制到目标”是啥?

带有主机应用程序的 Xcode 测试目标强制错误的目标进入方案的构建部分

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

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

XCode 13 警告:不推荐以手动顺序构建目标 - 检查“为命令行构建并行构建”但不存在这样的 UI 选项?