Xcode 工程解析---Project、Target、Workspace、Scheme

project

译自apple 官方文档中的 Xcode Project

Xcode中的project是一个包含了所有文件、资源以及构建一个或者多个product所需信息的一个仓库。project包含编译product所用的所有元素,并帮我们组织这些元素之间的关系。一个project可以包含一个或者多个target,target指定了如何编译product。project定义了其内部所有target的默认编译配置(每个target可以通过重新设置(重写)编译配置来定义自己的特殊编译配置)。

project包含了以下信息:

1、对如下源文件的引用:
    (1)代码的.h文件和.m文件
    (2)Libraries 和 frameworks
    (3)Resource files(资源文件,如文本,xml,plist等)
    (4)图片
    (5)Interface Builder files(xib、storyboard等)

2、用来组织资源文件的group(比如哪个文件放在哪个文件夹路径下)

3、project级别的编译配置,比如你对debug、release两种环境的分别设置。

4、targets的配置,这些配置指定了:
    (1)工程编译的引用
    (2)工程编译所需要的资源文件的引用
    (3)工程编译的编译配置,包括对其他target和配置的依赖关系,还包括没有target重写(覆盖)的project级别的编译配置

5、用于debug和测试程序的执行环境,这些执行环境指定了:
    (1)xcode在run或debug时的可执行文件
    (2)传递给可执行文件的命令行参数(若有)
    (3)程序运行时设置的环境变量(若有)

一个project可以独立存在,也可以包含在一个workspace下。
你可以用Xcode schemes来指定当前的target、编译配置、可执行文件配置。

target

译自apple 官方文档中的 Xcode Target

target指定了要编译的product, 并包含’用project 或 workspace里中的一系列文件来编译一个product的说明‘。一个target只能定义一个product,target将输入(包括编译product所需的源文件和处理这些源文件的说明)组织到构建系统中。一个project可以包含一个或多个target,每个target可以对应产生一个product。

上面的编译一个product的说明的表现形式就是我们xcode里的build settings和 build phases。

一个target和由它产生的product可以关联其他的target。如果一个target的编译依赖于另外一个target的输出,我们就说前者依赖于后者;如果这两个target在同一个workspace中,Xcode就能识别这个依赖;这种依赖关系我们称之为隐式依赖(implicit dependency)。你也可以在build settings明确指定target依赖关系,也可以将Xcode中的隐式依赖指定为无依赖关系,比如,你可以同时编译处于同一workspace中的library和链接这个library的application,Xcode会识别library和application的关系,然后先编译library,但是如果你的本意是想要链接这个library的version而不是library本身,你可以在build settings中创建一个显式的依赖来覆盖这个隐式依赖。

workspace

译自apple 官方文档中的 Xcode Workspace

workspace是一种xcode文件,用于分组projects和其他文件,便于我们使用它们。workspace可以包含多个project和其他你想要引入的文件。除了组织各个project中所有的文件之外,workspace还提供存在于projects和它们对应targets之间的隐式和显式关系。

一个project可以属于多个workspace。

默认情况下,workspace中的projects编译在同一目录下,我们称之为workspace build directory,每个workspace都有各自的编译目录。因为同一workspace下的每个project中的所有文件都在同一编译目录下,所以这些文件彼此之间是相互可以引用的。因此,如果workspace中的多个projects使用了相同的libraries的时候,我们就不需要给每个工程都拷贝一个。

workspace中每个project依然都是独立的。如果你想单独的使用这个project,并且不希望影响其他project,或者被其他project影响,你可以直接打开这个project而不是通过workspace,或者你也可将这个project添加到其他workspace中。一个project可以同时从属于多个workspace,所以你可以在任意的组合中使用这个project,而不需要去重新配置project或者workspace。

你可以使用workspace中默认的编译目录,也可以自己指定一个。注意,如果你为一个project指定了一个编译目录,那么当你编译这个project时,这个目录会被此project所属的任何workspace的编译目录所覆盖。

scheme

译自apple 官方文档中的 Xcode Scheme

scheme定义了可以用于编译若干target,以及编译这些target时的一些配置和要执行的测试。我们可以定义多个scheme,但是每次只能使用其中一个。我们可以设置scheme保存在project中还是workspace中。如果保存在project中,那么任意包含了这个project的workspace都可以使用。如果保存在workspace中,那么只有这个workspace可以使用。选择了scheme就意味着选择了运行目标。

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