iOS:[译]Xcode Concepts--概念Target、Project、Build Setting、Workspace、Scheme

--源文:https://developer.apple.com/library/ios/featuredarticles/XcodeConcepts/Concept-Targets.html

------------------Target------------------

           一个Target确定了一个product to build,包括一些instruction(怎么从一个project或者workspace的一堆文件导出一个产品)。一个Target对应一个product,它管理着一个product的build system的“输入”(一堆源文件和一些处理这些源文件的instruction)。一个project可以包含多个target,每一个targe生成一个product。

            构建一个product的instruction表现形式是build settings and build phases(可以在Xcode Project  editor里面查看、编辑)。一个Target的build settings 继承project的build settings,但是重写覆盖project setting。同一时间里只有一个active Target ,由Xcode Scheme指定。

  一个Target和它的product可以和其他Target联系,如果一个target build需要另一个target的“输出”,可以说成第一个target依赖第二个。如果这俩个target在同一个workspace,Xcode会发现他们的依赖关系,从而build the products按照特定的顺序。这样的关系被称为“ implicit dependency.” 你也可以为俩个targets指定明确的target 依赖关系在build setting里面。例如,你可能build一个library和一个链接这个library的application(同一个workspace)。Xcode可以发现这种关系并且自动build这个library first。然而,你如果要去链接library的某个版本而不是one built in the workspace,你可以在build settings里创建一个确定的依赖关系,它将会覆盖implicit dependency。

------------------Project------------------

         一个project是所有文件、资源、信息/配置的repository。一个project包含所有build your products所需的内容并且维护他们之间关系。它可以包含多个targets。一个project为所有的target定义默认的build setting(每一个target可以自定义它们的build setting,这些自定义的setting会覆盖project默认的build setting)。 

         一个project包含如下信息:

--相关源文件:1. 源代码,.h和.m;  2. library和frameworks(内部和外部) 3. 资源文件   4.IB 文件

--在structure navigator组织source files的Groups;

--Project-level  build configuration,可以有多个,例如debug和release buid setting;

--Target:即,相应的products、source files、build configuration(包括dependencies on other targets and other setting,project-level setting会被用到当 targets’ build configurations do not override them);

--用来debug和test程序的可执行环境,包括:What executable to launch when you run or debug from Xcode;命令行参数to be passed to the executable, if any;Environmental variables to be set when the program runs, if any。

          一个project可以单独存在,也可以包含在一个workspace里。

         使用Xcode scheme去指定哪个target,building configuration,executable configuration是active(当前)的。

------------------Build Setting------------------

         a build Setting是一个变量,包含着怎么build product的处理信息。例如,Xcode传给编译器的选项。   

         build settings有project level和target level俩中级别。project-level中的build setting适用项目中所有的targets,只要该build setting没有被相应的target重写。

         每一个target管理着build one product的source files。一个build 设置包含一系列build 特定product 的build settings。例如,通常有debug  和release俩中分开的build 设置。

         一个build setting在Xcode中的包含俩部分:setting title 和 definition。前者标示着该build setting并且可被用在其他的settings。后者是一个常量或者一个表达式,确定了build setting的值。一个build setting可能也有一个显示名称,在Xcode界面中显示build setting。

         另外,当你选择某个project template创建一个新的project,default build setting也相应的由Xcode生成了,你也可以为project或者某个target创建自定义build settings。一个conditional build setting的值取决于它的先决条件有没有被满足。这种机制允许你,例如,根据targeted architecture确定build a product的sdk。

------------------Workspace------------------

------Workspaces Extend the Scope of Your Workflow

           一个workspace是一个Xcode 文档,groups(组合)不同的project、文档,所以你可以同时管理多个project。一个workspace可以包含任意个Xcode project和别的文件。另外它管理着所有的文件,project和targets在一个workspace中可以有implicit和explicit 俩种relationships。

           一个工程文件(project fiel)包含着指向project中其他所有文件、building configuration、其他project信息的指针。在Xcode 3以前,工程文件是root of the group 和file structure hierarchy。尽管一个project可以和其他project联系,但是相关项目一起工作还会比较困难。大部分的工作都是局限在一个project中。在Xcode 4以后,你可以创建一个workspace去包含多个project及相关文件。

           另外提供对每个project所有文件的访问,workspace拓展了许多Xcode workflows工作范围。例如,because indexing在整个workspace里面做索引,code completion、Jump to Definition以及一些其他功能都是针对着整个workspace。因为refactoring operations在整个workspace工作,你可以refactor API在一个framework project,并且在其他的application projects用它的framework in one operation。当building时候,一个project可以适用workspace中其他project的products。

            workspace document包含着指向included projects 和其他files的指针,但是没有其他数据。一个project可以属于多个workspace。下图显示一个workspace包含俩个Xcode project (添加的.xcodeproj到workspace)加上一个document project(添加的文件夹到workspace)。

备注:workspace类似.xcodeproj文件,他不是一个文件夹,而是一个有管理、索引作用的一个文件。


------Projects in a Workspace Share a Build Directory

          默认情况下,所有的workspace中的Xcode projects are built 在同一个目录下,简称workspace build directory。每一个workspace有 它自己的build directory。因为所有projects中的文件是同一个build directory,所有这些文件对每个project都是可见的,所以,如果有多个project用同一个libraries,你不需要单独copy它们到每一个project文件夹中。

Xcode会检查build directory中的文件去发现它们implicit dependencies。例如,一个workspace中的project build了一个library,这个library被workspace中另一个project引用,Xcode会自动先build the library然后build the project,即使build configuration中没有明显的设置。如果需要的话,你可以用explicit build settings重写implicit dependencies。对于“显示依赖”(explicit dependencies),你必须创建项目引用。

          workspace中的projcet仍然保持着自己的特性。一个project是单独工作还是跟workspace中其他project有联系工作可以通过不同的打开方式,在workspace中打开还是在project中打开。因为一个project属于多个workspace,你可以随意添加多个projects,而不需要重新创建project或者workspace

         你可以使用workspace默认的build directory,也可以自己指定一个。请注意,如果一个project指定了一个build directory,这个目录会被它所在的workspace build directory重写,当你build the project。    

------------------Scheme------------------

          一个Xcode Scheme 定义了a collection of targets to build,a configuration to use when building, and a collection of tests to execute。

(备注:这个定义感觉挺准确:A scheme is a collection of settings that specify which targets to build, what build configuration to use(not the build setting), and the executable environment to use when the product specified by the target is launched。<Scheme Configuration Help>)

          你可以有许多scheme,但是同一时间只能是激活的。你可以指定是否一个scheme存储在project里,这样每一个包含他的workspace都能看到它或者只能看某一个workspace中看到。当你选择一个激活的shceme,你也需要选择一个运行目标(设备)。

 ------------------------

ps:compile、build、execute区别:编译 + 连接/生成,目标是生成可执行Exe文件 + 执行。



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值