Project & Targets

Targets

http://blog.sina.com.cn/s/blog_682dc7810100pv8t.html

http://www.shangxueba.com/jingyan/1843732.html

在xcode当中有一个东西叫targets,苹果的官方文档是这样说的:

A target specifies a product to build and contains the instructions for building the product from a set of files in a project or workspace. A target defines a single product; it organizes the inputs into the build system—the source files and instructions for processing those source files—required to build that product. Projects can contain one or more targets, each of which produces one product.(省略若干字)

简单翻译过来就是一个target详细说明了要构建的产品,包含了一个工程或工作目录中的文件当中的指令,貌似还是不太清楚。在谷歌搜了一下,发现这个关于target的解释还是不错的:

A target basically defines what it is you are building and how you are building it. You can add more targets if you would like to build more than one thing. This usually makes sense if you need to build several related things from the same project. For instance, you might want one target for a full, paid version of an application, and another target for a reduced, free version of an application. Both targets would include much of the same code and resources, but some of the settings would be different and you might have different files included with each.

意思就是如果你想将一个应用分为付费完整版和免费简化版,这两个版本大部分代码是一样的,只有个别的设置和包含的文件不同,你就可以建一个application然后弄两个targets分别对应两个版本。

下面举个简单的例子来说明在iOS7.0和iOS6.1(以及更低版本)之间的适配问题(用的是xcode5.0,里边有6.1和7.0两个版本的sdk)

新建一个工程,默认的development target,base sdk以及模拟器的版本都是7.0,在AppDelegate中的didFinishLaunchingWithOptions方法里写下

self.window.tintColor = [UIColor redColor];

然后运行,这样是没有任何错误的。接下来将development target,base sdk以及模拟器的版本都改成6.1(注意默认的xcode是没有6.1的sdk的,需要自己另外导入)。然后运行,就会报错:

也就是说tintColor属性在iOS6.1中根本就没有,在编译时候就会出错。这时候如下加上判断语句也是没有用的,照样报错

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {        self.window.tintColor = [UIColor redColor];    }

遇见这种情况只能加上预处理语句,这样写:

#ifdef __IPHONE_7_0    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {        self.window.tintColor = [UIColor redColor];    }#endif

这样编译通过就不会报错了……这是因为在sdk6.1下的usr/include下边有一个Availability.h文件,里边定义了一大堆宏,其中关于iphone的有

#define __IPHONE_2_0    20000#define __IPHONE_2_1    20100#define __IPHONE_2_2    20200#define __IPHONE_3_0    30000#define __IPHONE_3_1    30100#define __IPHONE_3_2    30200#define __IPHONE_4_0    40000#define __IPHONE_4_1    40100#define __IPHONE_4_2    40200#define __IPHONE_4_3    40300#define __IPHONE_5_0    50000#define __IPHONE_5_1    50100#define __IPHONE_6_0    60000#define __IPHONE_6_1    60100#define __IPHONE_NA      99999  /* not available */

而sdk7.0里边多了一行

#define __IPHONE_7_0    60100



Project

http://book.2cto.com/201307/27017.html

http://book.2cto.com/201307/26992.html

2.5 设置产品属性

在前面讲解应用生命周期时,为了禁止应用在后台运行,我们将HelloWorld-Info.plist文件中的Application does not run in background属性修改为YES(即UIApplicationExitsOnSuspend = YES),这项操作就属于产品属性的设置。在Xcode中,产品与Target直接相关,而Target与Project直接相关。

2.5.1 Xcode中的Project和Target

打开HelloWorld工程时,我们会看到如图2-30所示的界面。产品属性包括Project和Target两块内容。一个工程只有一个Project,但可以有一个或多个Target。

图2-30 Xcode的Project和Target

我们所创建的HelloWorld只有一个Target,下面我们为之前使用故事板实现的HelloWorld工程增加一个Target。

首先,依次选择File→New→Target菜单项,此时会弹出一个模板选择对话框,如图2-31所示。

图2-31 选择Target模板对话框

这里选择的模板与新建工程时选择的模板完全一样,然后点击Next按钮,将出现如图2-32所示的对话框。

根据情况逐一设定后,点击Finish按钮,现在我们已经成功为HelloWorld新增了一个Target。查看左边的导航面板,可以发现右边有两个Target,并同时生成一套完整的文件——main.m、AppDelegate、ViewController和MainStoryboard.storyboard,它们独立于原来的Target而存在,如图2-33所示。

图2-32 Target的一些选项设定图2-33 新创建Target

要指定运行哪一个Target,可以通过选择不同的Scheme来实现。如图2-34所示,在Xcode的左上角选择HelloWorld_Storyboard→iPhone 6.0 Simulator,就可以在iPhone 6.0 Simulator上运行HelloWorld_ Storyboard Target了。

图2-34 选择Scheme

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容