Xcode中的Target
Xcode中的Target,主要包含下面几点知识:
Target依赖
Build Phase
Build Rule
Target依赖
Target的依赖关系表示一个Target要构建成功,必先依赖于其他Target的构建成功。
一个Target可以依赖同一个工程里面的另一个Target,也可以依赖不同工程里面的Target。依赖不同工程里面的Target,叫做跨工程依赖(cross-project dependency)。
想要实现跨工程依赖,最简单的方法是先将被依赖的工程文件(.xcodeproj文件)拖到当前工程中,然后配置被依赖的Target。
Build Phase
Build Phase定义了一个Target需要构建成功,需要经历的步骤。
一个Target构建的时候,从上到下执行Build Phase。因此Build Phase的顺序时很重要的,比如,你不能没有编译就链接。但是,Xcode也允许我们改变Build Phase的顺序,只要将你想调整的Build Phase拖到想要的位置即可。
对于Build Phase,着重介绍一下Run Script。在Run Script中,Input Files并不是传递给脚本的参数,Output Files也不是告诉Xcode在哪里产生输出文件,Input Files和Output Files的作用,仅仅是告诉Xcode,当Input Files修改日期比Output Files新时,就需要运行脚本。如果Input Files和Output Files有一个不指定,那么脚本每次都会执行。因此,指定输入文件和输出文件,Xcode并不会自动读入文件,并输出文件到指定位置,这些都需要你在脚本里面完成。同时,在脚本里面,可以访问build settings当中的变量。
Build Rule
Build Rule定义了对于某一个类型的文件,需要进行的特殊处理。比如,你可能需要对于.c文件用自己定义个编译器编译,那么,就可以通过Build Rule来达到;如果一中文件类型需要转换成另一种文件类型,也可以使用Build Rule。
Build Rule分位系统定义的Build Rule和自定义的Build Rule,自定义的Build Rule优先级总是大于系统定义的Build Rule。Xcode在匹配Build Rule时,总是根据Build Rule定义的顺序,匹配第一个符合定义的Build Rule,这就是说,如果有两个完全相同的Build Rule,那么在前的Build Rule将被匹配。
一个Build Rule被同一个Target的所有Build Phase所共享,无法为同一个Target的不同Build Pahse定义不同的Build Rule。
在执行Build Rule的脚本的时候:
1 当前目录被设置为project folder(即包含工程文件.xcodeproj的文件夹)
2 许多与输入文件和输出文件有关的环境变量被设置,可以再脚本中使用,相关环境变量(只是一部分)如下表:

对于Build Rule中的输出文件,如果你的目的是将输出文件写到Target的build产物中,那么输出文件应该指定为TARGET_BUILD_DIR,如果你的输出文件只是作为中间文件,那么输出文件应该指定为 DERIVED_FILES_DIR。指定输出文件的目的,是为了告诉Xcode到哪里寻找这些输出文件,以便后续利用。举个例子,如果一个Build Rule将XML编译成LEX文件,而后续的Build Rule会降LEX文件编译成.c文件,那么,Xcode就会根据第一个Build Rule指定的LEX输出文件位置,作为第二个Build Rule的输入。
Xcode中的Target的更多相关文章
- 转一篇Xcode中利用target编译不同版本的文章
http://www.cocoachina.com/ios/20160331/15832.html 主要说的是,不用自己定义debug宏,而是在xcode的编译配置文件中,设定debug宏,这样,不用 ...
- iOS开发时,在Xcode中添加多个Targets进行版本控制
在iOS开发中,很可能有以下场景:需要开发多个版本,或因需区分收费版,免费版,或因为网络环境需要区分测试版,发布版,或因渠道不同需要区分企业版,AppStore版等等.解决办法无非就是CheckOut ...
- XCode中Architecturs配置及常见问题
http://lanvige.github.io/2014/03/19/architecturs-in-xcode/ XCode 5.1升级后因arm64和CocoaPods的原因,痛了一天,终于解决 ...
- iOS 在 Xcode 中重命名项目名称
本教程使用的 Xcode 版本是Xcode 6.3.1,网上有好多的教程,都是在 Xcode 4 上做的讲解,现以本文章讲解一下如何在 Xcode 6.3.1 中重命名你的项目名称,包括你的应用名称. ...
- 如何找出Xcode中不同版本Swift的路径
我们知道Xcode中可能包含不知一个Swift的版本,那么我们如何找到它们对应的路径呢? 熟悉unix shell命令的童鞋都知道有一个find指令,在我们已知Xcode路径时,我们可以在其中找到Sw ...
- OC Xcode中常见的错误
在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...
- Xcode中的文件类型
文件类型 Xcode中的文件类型,总共4种类型: 1 普通文件(File) 2 Group(在Xcode中就是黄色的文件夹) 3 Folder(在Xcode中就是蓝色的文件夹) 4 Framework ...
- xcode中的预定义宏
[xcode中的预定义宏] 1.SRCROOT,是定义本target的proj的路径. 2.OBJROOT,对象文件根路径,对象文件(即obj文件)就是中间的临时文件.中间文件输出目录的名字以“pro ...
- 在XCode中使用XCTest
测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编 ...
随机推荐
- ROS計算圖級(通訊架構)
查看节点构成的计算图 rqt_graph 节点node就是运行了的可执行文件
- 【PHP函数】json_decode() ---- 对 JSON 格式的字符串进行解码
json_decode() --- 对 JSON 格式的字符串进行解码 1.用法: mixed json_decode ( string $json [, bool $assoc = false [, ...
- HDU 1251 统计难题(字典树入门模板题 很重要)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- 统计单词出现的最多次数(Trie树)
A Time Limit: 60ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 给出n(1<= n && n <= 2*10^6) ...
- JavaScript跨源资源共享
CORS(跨 源资源共享)基本思想,就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应式应该成功还是失败 IE对CORS的实现 IE8引入了XDR类型,与XHR类似,但可以实现安 ...
- Java类是如何默认继承Object的?
原:https://juejin.im/post/5ca1e8ade51d454e6a300048 前言 学过Java的人都知道,Object是所有类的父类.但是你有没有这样的疑问,我并没有写exte ...
- 【OC底层】KVC原理
定义 KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性 常见的API有: - (void)setValue:(id)value forKeyPath: ...
- 记Macbook Pro配合FT232使用PN532模块
0x00实话. 被自己傻到 在linux下使用 libusb + libnfc 这两个库就可以配合串口直接使用pn532模块 当时配置文件是写在 /etc/nfc 目录下的 而我在OS X 下居然也想 ...
- LOOP AT GROUP语法熟悉
SELECT * FROM EKKO INTO TABLE @DATA(LT_EKKO) UP TO 100 ROWS. SORT LT_EKKO BY LIFNR ERNAM. LOOP AT LT ...
- ubuntu 装 mysql
sudo apt-get install mysql-server mysql-client