Project、Target、Workspace and Scheme

简介: 今天有人问我Target和Project是什么关系?额。。。学习iOS开发都知道Target和Project的关系。这里我就简单的做了一个总结,而且加入的Scheme和Workspace。如果不当的地方,欢迎指教。

Project、Target、Workspace and Scheme

前言

今天有人问我Target和Project是什么关系?额。。。学习iOS开发都知道Target和Project的关系。这里我就简单的做了一个总结,而且加入的Scheme和Workspace。如果不当的地方,欢迎指教。

开始

废话不多说,如果你的英语够NB,你可以直接看这里:ProjectTargetWorkspaceScheme。下面就简单来介绍一下各位。

Xcode Project

简单来说就是一个项目,我们新建一个工程的时候你会发现就会有个Project。它其实是一个包含了所有文件、资源和构建信息的一个存储库。Project包含了用欧冠胡构建产品和维护这些元素之间关系的所有元素。它包含了一个或者多个Target,而这些Target制定了如何构建Products。并且一个Project定义的build settings对于所有的Target都是一样的,你也可以针对某个Target进行定制。
在来点官网的翻译吧。哈哈。
一个Project文件包含了以下的信息:

  • 参考的资源文件:源代码(包括头文件和实现文件)、Libraries和frameworks、资源文件、图片文件、nib文件。等等。
    一个project可能是单独的一个,也可能是一个工作空间。

Xcode Target

Target的中文名字是目标,就是王健林说的“先实现一个小目标”的那个目标。一个Project可以有多个Target。而且Target是继承自Project的,也就是说如果你在Project中配置了某个东西,那么所有的Target都会生效;但是反之则不会生效。
如果你现在有一个产品,你要做不同的环境出来,包括线上、预发、日常等等。这个时候你就可以来建立多个Target来实现。你先选中Targets里面的默认的第一个,然后右击弹出一个小列表:(Duplicate、Delete、Project Editor Help),顾名思义,Duplicate就是复制的意思,你可以选择一个Target进行复制,然后通过修改其General、Build Settings以及Build Phases来进行定制化修改,在Build Settings里面有一个Preprocessor Macros的选项,你可以直接设置定义宏的方式来对不同的Target进行区分,比如我的:


我这里面建立了三个Targets:OnLine、Daily、Pre。然后通过设置不同的宏定义来进行环境配置,其实很简单:在你设置环境的地方通过宏定义进行判断:

#ifdef Online_CreditPlatForm
线上环境配置
#elif Daily_CreditPlatForm
日常环境配置
#elif Pre_CreditPlatForm
预发环境配置
#else
默认环境配置
#endif

这样就可以直接在:

选择不同的Scheme run就可以了。不用每次都去修改ip配置。此外,你还可以对每个Target进行其他的配置,比如icon、Display Name等等。到这里你也许会发现我的Target名字是按照我的意愿写的,而直接复制的名字后面是copy copy2等等,这样很不友好,而且不方便识别,你可以按照下面的步骤进行修改名称:

  • 首先,打开Manage Schemes…弹出如下的界面:

然后选中你要改名的Scheme,然后按Enter键,输入你想要的名字就行了比如我直接设置成了OCLintDemo_pre。

  • 然后,在TARGETS里面选中你要修改名字的Target,同样的方法设置成OCLintDemo_pre:
  • 最后,如果你觉得刚才创建Target对应的plist文件名字也不太友好,如图:

可以在指定Target里面Build Settings里面的Packaging中Info.plist File里修改为自己想要的(OCLintDemo-pre-Info):


这样就修改成了自己所需要的名称。
另外,Target还可以设置依赖,有兴趣的可以了解一下。这里就不在赘述了。
所以就我个人理解而言,如果一个产品只是一些配置或者其他的东西有所差异,你可以新建多个Target进行开发,提高开发效率,也提高了打包的速度(至少不用每次添加注释和取消注释)。

Xcode Workspace

如果你的开发过程中用到了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集合。

来源

相关文章
|
4月前
解决Flutter报错The named parameter |method ‘xxxx‘ isn‘t defined.
解决Flutter报错The named parameter |method ‘xxxx‘ isn‘t defined.
151 3
|
4月前
|
存储 编译器 Go
深入理解Go Workspace的三个关键目录结构
【8月更文挑战第31天】
171 0
|
7月前
launcher中Workspace类大致分析
launcher中Workspace类大致分析
34 1
|
7月前
|
Android开发
Eclipse提示“The default workspace “xxxx” is in use or cannot be created Please choose a different on
Eclipse提示“The default workspace “xxxx” is in use or cannot be created Please choose a different on
|
存储
Creating a workspace:创建一个工作空间
Creating a workspace:创建一个工作空间
325 0
Creating a workspace:创建一个工作空间
关于catkin_init_workspace找不到命令的原因
关于catkin_init_workspace找不到命令的原因
543 3
关于catkin_init_workspace找不到命令的原因
|
Android开发
svn: E155004: There are unfinished work items in ‘D:\workspace\xxx‘; run ‘svn cleanup‘ firs
svn: E155004: There are unfinished work items in ‘D:\workspace\xxx‘; run ‘svn cleanup‘ firs
168 0
svn: E155004: There are unfinished work items in ‘D:\workspace\xxx‘; run ‘svn cleanup‘ firs
|
图形学
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
关于Unity2017 升级到 Unity2019 两个问题。 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
3194 0
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'