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语言,用的最多的是在算法设计上,那时候最常做的事情就是编 ...
随机推荐
- 关于WebSocket长链接的详细介绍iOS
http://www.cocoachina.com/ios/20181030/25327.html
- 使用jquery操作元素的css样式(获取、修改等等)
//1.获取和设置样式 $("#tow").attr("class")获取ID为tow的class属性 $("#two").attr(&qu ...
- 利用java代码生成keyStore
在前面的章节中介绍了如何利用KeyTool工具生成keyStore:传送门. 但是很多时候,在javaWeb项目中,比如给每个用户加上独特的数字签名,那么我们需要在创建用户的时候,给其生成独一无二的k ...
- traefik-Ingress边缘路由器落地到微服务
1.理解Ingress 简单的说,ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上.Ingress相当于nginx.apache等负载均衡方 ...
- .Net操作Excel公式实现
//传入Excel公式,获取公式计算结果private string GetValue(string formula) { string result = ""; try { Ob ...
- json_decode($str,true)的结果为null
//$result为传进来的json值 $result = $this->params['auth_result']; //html_entity_decode进行HTML 实体转换为字符 // ...
- 关于"为什么说Arduino是玩具?"的回答
最开始从51入门.之后MSP.ARM.FriendARM等等和使用keil(MDK).iar等工具.之后Arduino.Raspberry Pi的人想说: "说'Arduino是玩具,和Ar ...
- 目标反射回波检测算法及其FPGA实现 之三:平方、积分电路及算法的顶层实现
目标反射回波检测算法及其FPGA实现之三: 平方.积分电路及算法的顶层实现 前段时间,接触了一个声呐目标反射回波检测的项目.声呐接收机要实现的核心功能是在含有大量噪声的反射回波中,识别出发射机发出的激 ...
- 【转】如何内网搭建NuGet服务器
原文:http://www.cnblogs.com/zhangweizhong/p/7755332.html NuGet 是.NET程序员熟知的工具,它可以直接安装开源社区中的各个公用组件,可以说是非 ...
- 20155229 《信息安全系统设计基础》 Mypwd实现
Mypwd 内容 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 学习pwd命令 通过man pwd查看 pwd命 ...