Project、Target、Workspace and Scheme
前言
今天有人问我Target和Project是什么关系?额。。。学习iOS开发都知道Target和Project的关系。这里我就简单的做了一个总结,而且加入的Scheme和Workspace。如果不当的地方,欢迎指教。
开始
废话不多说,如果你的英语还ok(强烈建议看官方文档),你可以直接看这里:Project、Target、Workspace、Scheme。下面就简单来介绍一下各位。
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集合。
Project、Target、Workspace and Scheme的更多相关文章
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性
本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Int ...
- Java注解之Retention、Documented、Target、Inherited介绍
先看代码,后面一个个来解析: @Retention(RetentionPolicy.RUNTIME) @Target(value = {ElementType.METHOD, ElementType. ...
- 代码提交时让svn忽略classpath、target、.project等
在用eclipse操作时,经常用到svn的与资源同步这个操作,但是打开的时候会有很多生成的class文件,其实这些并不需要提交的,因为svn原则上是用来管理源代码的.每次资源同步时看到很多class文 ...
- this、target、currentTarget
this:绑定事件所触发行为的对象 target:最开始冒泡的的对象 currentTarget:事件触发行为的对象 this == target currentTarget和this 是target ...
- Xcode相关概念:Target、Project、Scheme、Workspace
创建并编译Xcode工程时,有几个常用概念想在这里记一下. Xcode Target: 定义:A target defines a single product; .... 理解:输出文件,等同于VS ...
- Eclipse--Web项目中 .classpath、mymetadata、project文件的功用
Web项目中 .classpath..mymetadata..project文件的作用 创建Web Project时,会自动生成这个三个文件. 一..mymetadata文件 1.部署项目用的,把项目 ...
- 【核心】project(idea文件)、module(iml文件)到SSM集成、热部署、Tomcat启动、MAVEN依赖冲突
http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/project-composition-introduce.html 在 Inte ...
- GOROOT、GOPATH、GOBIN、project目录 _(转)
前言:我觉得java程序员学golang很容易上手.关于GOROOT.GOPATH.GOBIN这些环境变量的设置,我隐约感觉到了java的影子(尽管我是一个C++程序员),唯一和java不同的是不能设 ...
- Drone 中的概念:webhooks、workspace、cloning、pipelines、services、plugins、deployments
webhooks 跳过提交 包含/跳过分支 branches workspace base 属性 path 属性 cloning pipelines 构建步骤 并行执行 group 条件执行 when ...
随机推荐
- android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果
需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果, 总在找事情做的产品经理又提出了奇葩的需求.之前在通知栏显示 ...
- Android自定义Dialog(美化界面)
前言:在做项目的时候,发现dialog界面太丑陋,从csdn上下载了一份自定义dialog的源码,在他的基础上对界面进行美化...有需要的朋友可以直接拿走 效果图如下: 主要代码: /** * 自定义 ...
- 【记录】WCF IIS 404
WCF IIS 发布报"404错误": 修改 Web.config 如下: <system.webServer> <handlers> <remove ...
- 趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别(转载)
从头讲讲编码的故事.那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起.嗯,也许这样开始比较好…… 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...
- Opencv摄像头实时人脸识别
Introduction 网上存在很多人脸识别的文章,这篇文章是我的一个作业,重在通过摄像头实时采集人脸信息,进行人脸检测和人脸识别,并将识别结果显示在左上角. 利用 OpenCV 实现一个实时的人脸 ...
- 记一次由于Java泛型类型擦除而导致的问题,及解决办法
中所周知,Java中的泛型并不像C++.C#一样是真正的泛型,其泛型是通过类型擦除来实现的.具体什么是类型擦除,可以参看这篇博文:http://icyfenix.iteye.com/blog/1021 ...
- C#文件相同性判断
在进行开发时,对文件进行上传和下载是较为普遍的行为,为了防止在文件操作过程中,出现同一文件多次操作,需要对文件进行相同性比较: 1.获取文件的绝对路径,针对window程序和web程序都可使用: // ...
- C# 中实现单例模式
文章目录 简介 不安全线程的单例模式 简单安全线程带锁 双重检查 - 带锁 安全初始化 安全并且懒汉式静态初始化 带泛型的懒汉式单例 异常 提高效率 总结 简介 单例模式是软件工程中广为人知的设计模式 ...
- “全能”选手—Django 1.10文档中文版Part4
第一部分传送门 第二部分传送门 第三部分传送门 3.2 模型和数据库Models and databases 3.2.2 查询操作making queries 3.3.8 会话sessions 2.1 ...
- 六、CsrfViewMiddleware
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. 你这可 ...