不用但一定要懂 ---- iOS 之 Xcode 工程管理
Xcode Target
-
Target
指定要构建的product,并包含从product
或workspace
中的一组文件构建product
的说明。一个Target
定义单个product
;它将构建product
所需的输入(源文件和处理这些源文件的说明)组织到构建系统中。project
可以包含一个或多个Target
,每个Target
生成一个product
。 -
构建
produc
t的说明采用了构建设置和构建阶段的形式,你可以在Xcode project编辑器中检查和编辑它们。Target
继承project
生成设置,但您可以通过在Target
级别指定不同的设置来重写任何project
设置。一次只能有一个执行Target
;Xcode
方案指定活动Target
。 -
Target
及其创建的product
可以与另一个Target
相关。如果一个Target
需要另一个Target
的输出来进行构建,那么就说第一个Target
依赖于第二个Target
。如果两个Target
在同一个workspace
,Xcode
可以发现这个依赖关系,在这种情况下,它会按照需要的顺序构建product
。这种关系称为隐式依赖关系。你也可以在你的构建设置中指定显式的Target
依赖,你可以指定两个Xcode
期望有隐式依赖的Target
实际上是不依赖的。例如,您可以构建一个library
和一个application
,它们在同一个workspace
链接到该library
。Xcode
可以发现这种关系,并自动首先构建library
。但是,如果您实际上想要链接到library
的版本,而不是workspace
中构建的版本,那么您可以在构建设置中创建一个显式依赖项,它会覆盖这个隐式依赖项。
Xcode Project
Xcode
项目是构建一个或多个软件产品所需的所有文件、资源和信息的仓库。project
包含用于构建产品的所有元素,并维护这些元素之间的关系。它包含一个或多个Target
,这些Target
指定如何构建产品。project
为项目中的所有Target
定义默认settings
(每个Target
还可以指定自己的生成settings
,这将覆盖项目生成settings
)。
一个Xcode
项目文件包含以下信息:
-
引用源文件:
- 源代码,包括头文件和实现文件
- Libraries 和 frameworks, internal 和 external
- Resource文件
- Image文件
- nib文件
-
用于在结构导航器中组织源文件的组
-
Project
级构建配置。可以为项目指定多个生成配置;例如,您可能有一个Project
的调试和发布设置。 -
Target
,其中每个Target
指定:- 对
Project
构建的一个产品的引用 - 对构建该产品所需的源文件的引用
- 可用于构建该产品的构建配置,包括对其他
Target
和其他settings
的依赖关系;当Target
的生成配置不覆盖它们时,将使用项目级生成设置
- 对
-
可用于调试或测试程序的可执行环境,可指定每个可执行环境:
- 当你从Xcode运行或调试时要启动什么可执行文件
- 传递给可执行文件的命令行参数(如果有的话)
- 在程序运行时设置的环境变量(如果有)
Project
可以独立存在,也可以包含在workspace
中。
你可以使用Xcode方案来指定在给定的时间内哪个Target
、构建配置和可执行配置是活动的。
Build Settings
构建Settings
是一个变量,它包含关于产品构建过程的某个特定方面应该如何执行的信息。例如,构建Settings
中的信息可以指定Xcode传递给编译器的选项。
可以在项目或Target
级别指定生成Settings
。每个项目级生成Settings
都应用于项目中的所有Target
,除非被特定Target
的生成Settings
显式覆盖。
每个Target
组织构建一个产品所需的源文件。生成配置指定一组用于以特定方式生成Target
产品的生成Settings
。例如,对于产品的调试和发布版本,通常有单独的构建配置。
Xcode中的构建设Settings
有两部分:Settings
标题和定义。生成Settings
标题标识生成Settings
,可以在其他Settings
中使用。构建Settings
定义是一个常量或Xcode在构建时用来确定构建Settings
值的公式。构建Settings
也可以有一个显示名称,用于在Xcode用户界面中显示构建Settings
。
当你从项目模板创建新项目时,除了Xcode提供的默认构建Settings
外,你还可以为你的项目或特定Target
创建用户自定义的构建Settings
。还可以指定条件生成Settings
。条件生成Settings
的值取决于是否满足一个或多个先决条件。例如,这种机制允许您指定用于基于Target
体系结构构建产品的SDK。
Xcode Scheme
Xcode方案定义了一组要构建的Target
,一组在构建时使用的配置,以及一组要执行的测试。
您可以有任意多个方案,但每次只能有一个是活动的。您可以指定方案是否应该存储在项目中(在这种情况下,它在包括该项目的每个工作空间中都可用),或者存储在工作空间中(在这种情况下,它仅在该工作空间中可用)。当您选择一个活动方案时,您也选择了一个运行Target
(即,为其构建产品的硬件架构)。
Xcode Workspace
Workspace
是一个Xcode文档,它把项目和其他文档分组,这样你就可以一起处理它们。 一个Workspace
可以包含任意数量的Xcode项目,以及你想包含的任何其他文件。 除了组织每个Xcode项目中的所有文件,Workspace
还提供了包含的项目和它们的目标之间隐式或显式的关系。
Workspace
扩展您的工作流程的范围
项目文件包含指向项目中所有文件的指针,以及生成配置和其他项目信息。 在Xcode 3和更早的版本中,项目文件总是组和文件结构层次结构的根文件。 虽然一个项目可以包含对其他项目的引用,但在Xcode 3中处理相关的项目是复杂的; 大多数工作流程都局限于单个项目。 在Xcode 4及以后的版本中,你可以选择创建一个Workspace
来保存一个或多个项目,以及其他你想要包含的文件。
除了提供对每个Xcode项目中所有文件的访问,Workspace
还扩展了许多重要的Xcode工作流的范围。 例如,由于索引是在整个工作空间中完成的,所以代码完成、跳转到定义以及所有其他内容感知特性都可以无缝地通过工作空间中的所有项目工作。 因为重构操作跨工作空间的所有内容进行,所以您可以在一个框架项目和几个使用该框架的应用程序项目中在一个操作中重构API。 在构建时,一个项目可以使用Workspace
中其他项目的产品。
Workspace
文档包含指向所包含的项目和其他文件的指针,但不包含其他数据。 一个项目可以属于多个工作空间。 图中显示了一个包含两个Xcode项目(Sketch和TextEdit)和一个文档项目(Xcode4TransGuideDocPlan)的工作空间。
Workspace
中的项目共享生成目录
默认情况下,Workspace
中的所有Xcode项目都构建在同一个目录下,称为Workspace
构建目录。每个Workspace
都有自己的构建目录。因为Workspace
中所有项目中的所有文件都在同一个构建目录中,所以所有这些文件对每个项目都是可见的。因此,如果两个或多个项目使用相同的库,则不需要将它们分别复制到每个项目文件夹中。
Xcode检查构建目录下的文件,以发现隐含的依赖关系。例如,如果一个包含在Workspace
中的项目构建了一个库,而这个库又被同一个Workspace
中的另一个项目链接起来,Xcode会在构建另一个项目之前自动构建这个库,即使构建配置没有明确说明这个依赖关系。如果需要,您可以使用显式的构建设置覆盖这些隐式依赖项。对于显式依赖项,必须创建项目引用。
工作空间中的每个项目都有自己独立的标识。要在不影响(或被影响)工作空间中的其他项目的情况下处理项目,您可以在不打开工作空间的情况下打开项目,或者可以将项目添加到另一个工作空间。因为一个项目可以属于多个工作空间,所以您可以在任意数量的组合中处理项目,而不必重新配置任何项目或工作空间。
您可以使用Workspace
的默认构建目录,也可以指定一个。请注意,如果项目指定了构建目录,则该目录将被构建项目时项目所在的任何Workspace
的构建目录覆盖。