不用但一定要懂 ---- iOS 之 Xcode 工程管理

Xcode Target

  • Target 指定要构建的product,并包含从 productworkspace中的一组文件构建product的说明。一个Target定义单个product;它将构建product所需的输入(源文件和处理这些源文件的说明)组织到构建系统中。project可以包含一个或多个Target,每个Target生成一个product

  • 构建product的说明采用了构建设置和构建阶段的形式,你可以在Xcode project编辑器中检查和编辑它们。Target继承project生成设置,但您可以通过在Target级别指定不同的设置来重写任何project设置。一次只能有一个执行Target;Xcode方案指定活动Target

  • Target及其创建的product可以与另一个Target相关。如果一个Target需要另一个Target的输出来进行构建,那么就说第一个Target依赖于第二个Target。如果两个Target在同一个workspaceXcode可以发现这个依赖关系,在这种情况下,它会按照需要的顺序构建product。这种关系称为隐式依赖关系。你也可以在你的构建设置中指定显式的Target依赖,你可以指定两个Xcode期望有隐式依赖的Target实际上是不依赖的。例如,您可以构建一个library和一个application,它们在同一个workspace链接到该libraryXcode可以发现这种关系,并自动首先构建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的构建目录覆盖。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容