官方文档里面的介绍: Project、Target、Workspace、Scheme。官方文档还是写的很容易理解的, 比翻译的好一些, 看了几篇文章, 觉得写得不是太明白, 所以又自己总结了一下,下面就简单来介绍一下。
Xcode Project
简单来说就是一个项目,我们新建一个工程的时候你会发现就会有个Project。它其实是一个包含了所有文件、资源和构建信息的一个存储库。 包含了一个或者多个Target,而这些Target制定了如何构建Products。默认情况下,一个Project定义的build settings对于所有的Target都是一样的,你也可以针对某个Target进行定制,target的build settings将覆盖项目构建设置。
一个Project文件包含了以下的信息:
参考的资源文件:
* 源代码(包括头文件和实现文件)
* Libraries和frameworks , 内部的和外部的(导入的)
* 资源文件
* 图片文件
* nib文件用于在结构导航器中组织源文件的组(scheme)
项目级 - 构建配置文件(config)。 您可以为项目指定多个构建配置; 例如,您可能已经为项目调试和发布构建设置。
Targets, 每一个target 的制定文件
* 一个产品build时候的引用
* 产品需要build的源文件的引用build 配置文件, 包含依赖的其他target和其他build setting, target 没有单独设置build setting 的时候就默认集成 project的 配置.
执行的环境用来调试还是测试工程, 指明执行环境
* 可执行文件 当你run 或者debug 的时候
* 可执行文件的命令行参数 ,如果有 (这里我也不懂是指的什么, 后续知道了会补上, 有知道的大神也可以写在评论, 学习一下)
* 程序运行时的环境变量, 就是环境配置(例如
#ifdef Online_CreditPlatForm 线上环境配置
#elif Daily_CreditPlatFor 日常环境配置
#elif Pre_CreditPlatForm 预发环境配置
#else 默认环境配置
#endif
)
一个project可能是单独的一个,也可能是一个工作空间。
Xcode Target
一个Project可以有多个Target。而且Target是继承自Project的,也就是说如果你在Project中配置了某个东西,那么所有的Target都会生效;但是反之则不会生效。
一个target 可以依赖其他target, 同一个project 或者 workspace 中, Xcode 可以在运行时自己发现这个依赖,你也可以不build setting 中进行自己的设置.
Xcode Scheme
首先你知道你在哪里可以设置Scheme
如果你现在有一个产品,你要做不同的环境出来,包括线上、预发、日常等等。这个时候你就可以来建立多个Scheme来实现。你先选中Scheme里面的默认的第一个,然后右击弹出一个小列表:(Duplicate、Delete、Project Editor Help),顾名思义,Duplicate就是复制的意思,你可以选择一个Scheme进行复制,然后通过修改其General、Build Settings以及Build Phases来进行定制化修改,在Build Settings里面有一个Preprocessor Macros的选项,你可以直接设置定义宏的方式来对不同的Scheme进行区分,比如我的:
#ifdef Online_CreditPlatForm
线上环境配置
#elif Daily_CreditPlatForm
日常环境配置
#elif Pre_CreditPlatForm
预发环境配置
#else
默认环境配置
#endif
选择不同的Scheme run就可以了。不用每次都去修改ip配置。此外,你还可以对每个Scheme进行其他的配置,比如icon、Display Name等等。
Scheme名字是按照我的意愿写的,而直接复制的名字后面是copy copy2等等,这样很不友好,而且不方便识别,你可以按照下面的步骤进行修改名称:
首先,打开Manage Schemes…弹出如下的界面:
然后选中你要改名的Scheme,然后按Enter键,输入你想要的名字就行了比如我直接设置成了OCLintDemo_pre。
然后,在Scheme里面选中你要修改名字的,同样的方法设置成OCLintDemo_pre:
如果你觉得刚才创建Target对应的plist文件名字也不太友好,如图:
可以在指定Target里面Build Settings里面的Packaging中Info.plist File里修改为自己想要的(OCLintDemo-pre-Info):
XcodeWorkspace
如果你的开发过程中用到了Cocoapods,那么你就是已经用到了Workspace,因为你使用Cocoapods之后,你打开的那个文件就是 xxxx.xcworkspace。简单理解他就是一个Xcode文件,它包含了一个project组合,他们能够一起工作。
Xcode Scheme
看Scheme之前,你必须要先了解了Target,要不然请直接忽略Scheme。一个Scheme定义了要build的target的集合,定义了一个当building的时候的配置,定义了一个测试的集合。这里需要注意一点,那就是当你Archive要发布到AppStore的时候,需要将Archive设置为Release
总结
简单来说就是:一个workspace可以包含多个project,一个project可以包含多个target,Scheme包含了所有的target集合, 可以指定编译有效的target。