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就意味着选择了运行目标。

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术狗|博客
原文地址:《Xcode 工程解析—Project、Target、Workspace、Scheme》 发布于2019-10-12

分享到:
赞(0)

评论 抢沙发

5 + 2 =


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

长按图片转发给朋友

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录