前言

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

开始

废话不多说,如果你的英语还ok(强烈建议看官方文档),你可以直接看这里: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集合。

Project、Target、Workspace and Scheme的更多相关文章

  1. 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性

      本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Int ...

  2. Java注解之Retention、Documented、Target、Inherited介绍

    先看代码,后面一个个来解析: @Retention(RetentionPolicy.RUNTIME) @Target(value = {ElementType.METHOD, ElementType. ...

  3. 代码提交时让svn忽略classpath、target、.project等

    在用eclipse操作时,经常用到svn的与资源同步这个操作,但是打开的时候会有很多生成的class文件,其实这些并不需要提交的,因为svn原则上是用来管理源代码的.每次资源同步时看到很多class文 ...

  4. this、target、currentTarget

    this:绑定事件所触发行为的对象 target:最开始冒泡的的对象 currentTarget:事件触发行为的对象 this == target currentTarget和this 是target ...

  5. Xcode相关概念:Target、Project、Scheme、Workspace

    创建并编译Xcode工程时,有几个常用概念想在这里记一下. Xcode Target: 定义:A target defines a single product; .... 理解:输出文件,等同于VS ...

  6. Eclipse--Web项目中 .classpath、mymetadata、project文件的功用

    Web项目中 .classpath..mymetadata..project文件的作用 创建Web Project时,会自动生成这个三个文件. 一..mymetadata文件 1.部署项目用的,把项目 ...

  7. 【核心】project(idea文件)、module(iml文件)到SSM集成、热部署、Tomcat启动、MAVEN依赖冲突

    http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/project-composition-introduce.html 在 Inte ...

  8. GOROOT、GOPATH、GOBIN、project目录 _(转)

    前言:我觉得java程序员学golang很容易上手.关于GOROOT.GOPATH.GOBIN这些环境变量的设置,我隐约感觉到了java的影子(尽管我是一个C++程序员),唯一和java不同的是不能设 ...

  9. Drone 中的概念:webhooks、workspace、cloning、pipelines、services、plugins、deployments

    webhooks 跳过提交 包含/跳过分支 branches workspace base 属性 path 属性 cloning pipelines 构建步骤 并行执行 group 条件执行 when ...

随机推荐

  1. 如何用Node编写命令行工具

    0. 命令行工具 当全局安装模块之后,我们可以在控制台下执行指定的命令来运行操作,如果npm一样.我把这样的模块称之为命令行工具模块(如理解有偏颇,欢迎指正) 1.用Node编写命令行工具 在Node ...

  2. myWaterfall - jQuery瀑布流布局插件

    myWaterfall - jQuery瀑布流布局插件 Demo http://jsfiddle.net/q3011893/p5k2ogy8/embedded/result,html,css,js/ ...

  3. 利用AE编写切图工具的一些探讨

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 这周利用晚上在家时间研究了下如何使用AE来开发切图工具.最初 ...

  4. HTTP在.NET中的一些应用和解析

    谈到HTTP协议(超文本传输协议),HTTP协议是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在 ...

  5. 浅谈2D游戏设计模式2- WZ文件详解(UI.WZ)之MapLogin.img(1)

    玩过冒险岛的人都知道有一个WZ文件,那么这个WZ文件的内部是怎么样的呢,今天我就带大家一探究竟. 说实在的,我这是第一次接触WZ文件,但是却让我很震撼,为什么很震撼,因为这个居然是用VS2010写的! ...

  6. 理解JAVASCRIPT 闭包

    最近去面试了一家企业,结果非常灰心丧气,于是周末给自己定了一个目标 学好一门,学精通一门.不求多,只求懂. 最近看到一个概念“闭包”. 什么是闭包呢? 简单一点就是:看得到多和看得到少的区别. 上面这 ...

  7. 自己动手丰衣足食之轮播图一动态修改marginTop属性实现轮播图

    引言 学习jQuery有年头了,刚开始学习时自己动手写过轮播图,放的久了以至于忘了大致思路了.现在转而做前端,抽空把jquery轮播图拿出来写一写,把各种思路都自己练习练习,这里主要使用动态修改mar ...

  8. Android之消息机制Handler,Looper,Message解析

    PS:由于感冒原因,本篇写的有点没有主干,大家凑合看吧.. 学习内容: 1.MessageQueue,Looper,MessageQueue的作用. 2.子线程向主线程中发送消息 3.主线程向子线程中 ...

  9. OpenGL新手框架

    开始学习用OpenGL,也就想显示一些点,以为挺简单的,哎,看了两天才会画三维的点,做个总结. 使用OpenGL的基本流程 int main(int argv, char *argc[]) { //初 ...

  10. 【原创】kafka admin源代码分析

    admin包定义了命令行的一些实现 一.AdminOperationException.scala 一个异常类,表示执行admin命令时候抛出的异常 二.AdminUtils.scala admin一 ...