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

时间:2017-10-27 22:30:28

标签: ios xcode build xcodebuild xcode-project

我有一个包含许多目标的Xcode项目。其中六个是使用Build Phases下的Run Scripts构建最终发布产品(静态库,框架)的聚合。我可以单独制作它们,但是我找不到任何方法可以点击一个按钮"建立所有这些。

方法#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"在构建部分中列出了六个聚合的方案。有了这个,我得到了这样的错误:

enter image description here

还有其他一些模糊的错误,关于构建产品未被发现的地方。

方法#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,它可以报告成功或失败

2 个答案:

答案 0 :(得分:0)

你可以制作一个取决于其他六个的虚拟目标。在Build Phases选项卡中使用Target Dependencies

答案 1 :(得分:0)

灵感by sansumbrella's answer in another forum

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

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

  1. 为目标指定一个名称,例如 ALL ,满足其余字段的要求,然后按“完成”。

  2. 单击新目标的Build Phases链接,然后:

    1. 删除编译源中的条目,如果您按照我的方式进行操作,则该条目将为main.c
    2. 打开目标依赖项并通过单击+或将目标拖到该空间中来添加所有其他目标。

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