- 浏览: 257993 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (174)
- android (5)
- android代码片段 (10)
- ios (102)
- 程序员 (5)
- 人生 (1)
- UITextField (2)
- UINavigationController (2)
- iPhone开发 (87)
- cocos2d (8)
- Object-c (1)
- Xcode4 (4)
- Mac (1)
- ASIHTTPRequest (1)
- UITableView (9)
- UIImageView (2)
- CATransition (1)
- CCMenu (1)
- UIView (2)
- UIScrollView (1)
- NSString (1)
- Git (2)
- UISwitch (1)
- UIImage (1)
- 拉伸 (1)
- delegate (1)
- NSTimer (1)
- Crash (1)
- Log (1)
- TabBar (1)
- UITabBarController (1)
- UITextView (1)
- iPad (1)
- app (1)
- test (1)
- 数据库 (1)
最新评论
-
cccoooccooco:
测了下,效率很高啊。谢谢分享。
字符串替换算法【java】 -
zkai309:
你好,
我们是ios手游《富豪传奇》的开发商,你开发的糗事囧 ...
如何判断自己是否到了该辞职的时候 -
xyxdasnjss:
吃饱了就饿 写道以后会用到
设备判断 iphone3? iphone4? iphone5? -
吃饱了就饿:
以后会用到
设备判断 iphone3? iphone4? iphone5? -
xyxdasnjss:
zhihaoshi 写道ios 5.0 中用什么方法判断 iO ...
ios 判断设备的GPS功能是否开启
http://www.cocoachina.com/bbs/read.php?tid=10884&keyword=targets
啥叫多Targets, 有啥用!
相信很多人都注意到XCode中, 有个Target的概念.
这在很多地方都有所体现, 比如打开一个工程后, 左侧的列表中有Targets一项, 而在工程界面的顶部菜单中, project里面也有多个涉及到Target的项目, 那么这个Target到底是什么呢?
Apple的人是这样说的:
引用Targets that define the products to build. A target organizes the files and instructi***** needed to build a product into a sequence of build acti***** that can be taken.
简单的理解的话, 可以认为一个target对应一个新的product(基于同一份代码的情况下). 但都一份代码了, 弄个新product做啥呢? 折腾这个有意思么?
其实这不是单纯的瞎折腾, 虽然代码是同一份, 但编译设置(比如编译条件), 以及包含的资源文件却可以有很大的差别. 于是即使同一份代码, 产出的product也可能大不相同.
我们来举几个典型的应用多Targets的情况吧, 比如完整版和lite版; 比如同一个游戏的20关, 30关, 50关版; 再或者比如同一个游戏换些资源和名字就当新游戏卖的(喂喂, 你在教些什么...)
Targets之间, 什么相同, 什么不同!
既然是利用同一份代码产出不同的product, 那么到底不同Target之间存在着什么样的差异呢?
要解释这个问题, 我们就要来看看一个Target指定了哪些内容.
从XCode左侧的列表中, 我们可以看到一个Target包含了Copy Bundle Resources, Compile Sources, Link Binary With Libraries. 其中
Copy Bundle Resources 是指生成的product的.app内将包含哪些资源文件
Compile Sources 是指将有哪些源代码被编译
Link Binary With Libraries 是指编译过程中会引用哪些库文件
通过Copy Bundle Resources中内容的不同设置, 我们可以让不同的product包含不同的资源, 包括程序的主图标等, 而不是把XCode的工程中列出的资源一股脑的包含进去.
而这还不是一个target所指定的全部内容. 每个target可以使用一个独立, 不同的Info.plist文件.
我们都知道, 这个Info.plist文件内定义了一个iPhone项目的很多关键性内容, 比如程序名称, 最终生成product的全局唯一id等等.
而且不同的target还可以定义完整的差异化的编译设置, 从简单的调整优化选项, 到增加条件编译所使用的编译条件, 以至于所使用的base SDK都可以差异化指定.
创建第二个Target!
为什么是第二个? 因为第一个就是创建好工程后的默认Target呀! (废话这么多, 拖走...)
创建target有多种方法, 我们可以从现有的target上复制出一份, 然后略加改动, 也可以完全新建一个target出来. 但其实说穿了, 两个方法大同小异
首先我们来看看利用复制的方法创建target
利用复制创建target
我们在XCode左侧的列表中, 展开 Targets 项, 在现有的target上, 右键选择 "Duplicate", 或者选中现有target后, 在顶部菜单的Edit内选择"Duplicate"也可以.
此时我们就得到了一个新的target, 而在Resource里面也会得到一个 xxxx copy.plist. 这个新的target与原有的target是完全一致的, 余下的就是一些差异化的修改, 这个我们后面再说
创建全新的target
类似复制的方法, 我们可以在左侧的列表中很多地方按下右键菜单, 都可以看到Add中会有"New Target..."一项, 而在工程顶部菜单的Project内, 也可以看到这个"New Target..."的身影.
点击后, 首先会让你选择target的类型, 既然我一直所指的都是程序本身, 那么自然选择Application了(至于其他的嘛, 有兴趣的自己研究吧, 比如我们可以把程序中的部分提取成一个Static Library).
Next后, 会让你输入一个新的Target的名字, 而不像复制的方法中, 默认生成 xxxxx copy这样的target名.
但是这样生成出的Target几乎是空的. Copy Bundle Resources, Compile Sources, Link Binary With Libraries里面都没有任何内容. 编译设置也是完全原始的状态.
可以通过拖拽内容到这些target的设置中, 以及调整编译选项来完成Target的配置.
Target中部分内容的修改方法!
其实这段的部分内容, 在非多Targets的工程中也可能会用得到.
由于修改基本都是在工程/编译设置中完成, 因此没有特殊情况, 就不再声明了, 打开target对应的工程/编译设置的方法可以采用在该target上右键, 选择get info来做到.
生成的product名称的修改: Packing段内的Product Name一项
Info.plist文件名: Packing段内的Info.plist File一项, 比如复制出来的target觉得那个xxxxx copy.plist太傻就可以在这里改
条件编译: 增加一个User-Defined Setting(Target "xxxx" Info的build页的左下角那个齿轮中可以看到这个内容), 在Other C Flag里面填入, 比如要定义一个叫做LITE_VERSION的define值, 我们可以写上 "-DLITE_VERSION" 或 "-DLITE_VERSION=1". 那么在程序中就可以用
#if defined(LITE_VERSION)
#else
#endif 这样的条件编译来部分差异化代码了
也许有些朋友记得我在代码区贴过的检测破解版的代码, 其中有一种检测方法就是看info.plist是文本还是二进制的, 那么我们能否建议一个模拟破解的target, 直接生成文本的info.plist以便测试呢?
当然可以, 在packing段内, 有一项叫"Info.plist Output Encoding", 默认值是Binary, 我们只要选成xml, 那么生成出的product.app内的info.plist就直接是文本样式的了.
另外, 向Copy Bundle Resources, Compile Sources, Link Binary With Libraries内添加/删除文件, 可以在要改动的文件上, 选择get info, 并且切换到Target页, 勾选要引用这个文件的target即可. 比如icon.png可以指定给默认target, 而icon_lite.png指定给lite verion的target
大致就是如此吧, 懒得抓图了. 各位将就吧. 想到什么需要补充的, 我会加入
发表评论
-
在webapp中判断native app是否安装并直接打开
2015-08-31 18:15 883http://www.baidufe.com/item/cc5 ... -
iOS之ARC下的Block
2015-04-15 14:37 646http://www.cnblogs.com/tekkama ... -
UITableView 隐藏多余的Cell的分割线
2015-02-02 14:39 1600- (void)setExtraCellLineHidden ... -
UILabel顶端对齐
2014-09-10 10:15 770http://shfzhzhr.iteye.com/blog ... -
iOS7滑动返回
2014-06-24 11:48 963http://blog.csdn.net/wmqi10/ar ... -
UIView (Additon)
2014-06-19 22:23 823#import <UIKit/UIKit.h> ... -
UIColor (XYCategory)
2014-06-19 22:13 545#import <UIKit/UIKit.h> ... -
OC MD5
2014-06-19 21:50 830#import <Foundation/Foundat ... -
IOS判断设备是否已越狱(isJailbroken)
2014-06-03 21:17 743@interface UIDevice (Helper) ... -
iOS6 Xcode5 去掉Icon高亮
2014-05-25 11:13 0我昨天刚遇到这个问题,已经解决。请按照下图红色矩形所圈处的信 ... -
iOS使用NSClassFromString
2014-03-07 11:24 969http://www.cocoachina.com/b/?p ... -
iOS7 开发相关
2013-10-22 10:17 12611.UITableView reloadData 之 ... -
iPad横版开发时,宽高是反的
2013-08-14 18:01 1122最近刚开始做iPad版应用,但发现横版的时候宽高是反的,很别 ... -
UITextView 带有PlaceHolder
2013-07-31 13:23 1495#import <UIKit/UIKit.h> ... -
UITableView 只更新某行
2013-07-22 10:10 1060如果全部更新的话 用reloadData方法 如果 ... -
Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
2013-07-15 10:56 946http://blog.csdn.net/totogo201 ... -
new 与 alloc/init的区别
2013-07-11 14:47 766http://blog.csdn.net/abby_shee ... -
自定义UITableViewCell上的delete按钮
2013-06-28 10:35 1112//通过UITableViewDelegate方法可以实现删 ... -
判断是否是 emoji表情
2013-06-28 09:42 2415+ (BOOL)stringContainsEmoji:(N ... -
UITableView小结
2013-06-18 10:03 1673UITableViewDataSource # ...
相关推荐
其中一个关键特性就是Targets,这个概念在Xcode中扮演着多版本构建的核心角色。本文将深入探讨如何利用Xcode的Targets实现不同版本的项目构建,以及这一功能在实际开发中的应用。 首先,我们需要理解什么是Xcode的...
missing 4 file,Microsoft.CompactFramework.CSharp.targets,Microsoft.CompactFramework.Build.Tasks.dll,Microsoft.CompactFramework.Common.targets, Microsoft.CompactFramework.VisualBasic.targets 直接...
### 关于Targets文件的知识点解析 #### 一、文件概览 在提供的文件信息中,我们看到这是一个名为“Targets文件”的文档,它被转换为了文本格式以便于打开查看。此文件主要用于定义定制化的构建目标(targets)以及...
Workflow.VisualBasic.Targets
在这款IDE中,导入工程是开发流程中的一个重要步骤,下面将详细介绍如何在Wind River Workbench 3.3中进行这一操作。 1. **启动Wind River Workbench 3.3** 首先,你需要确保已经正确安装了Wind River Workbench ...
支持framework v2.0.50727和framework v3.5,复制到相应文件夹即可。 framework2.0文件夹:C:\Windows\Microsoft.NET\Framework\v2.0.50727 framework3.5文件夹: C:\Windows\Microsoft.NET\Framework\v3.5 ...
从给定文件中提取的知识点可以围绕雷达目标跟踪、多反射点跟踪技术、卡尔曼滤波算法、三维空间跟踪、群跟踪算法的设计与实现以及性能评估等方面展开。 首先,文件标题和描述指向的主要技术是“雷达目标跟踪”,特别...
在"Targets"选项卡中,可以看到添加的所有目标。可以为每个目标设置编译规则,例如编译哪些文件、跳过哪些文件。确保每个目标的设置都符合其对应平台的需求。 5. **构建工程** 完成所有设置后,点击工具栏上的...
博世力士乐RC Targets
把文件替换到这里C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\vxx.0\CodeAnalysis /\/\xx=v10,v11,v12,v13,v14,v15
The 100 Best Targets for Astrophotography [electronic book] : A Monthly Guide for CCD Imaging with Amateur Telescopes / by Ruben Kier. 章节: 一:THE 100 BEST ASTROPHOTOGRAPHY TARGETS January: Mostly ...
iOS Project和Targets配置详解 iOS 项目开发中,配置 Project 和 Targets 是非常重要的一步骤。这两者是 Xcode 项目的核心组件,对项目的开发和编译至关重要。下面,我们将详细介绍 Project 和 Targets 的配置。 ...
- `install(TARGETS SubProject1 DESTINATION lib)`:安装库到指定目录(在实际部署时有用)。 - 如果使用`Qt`,还需包含`find_package(Qt5 REQUIRED COMPONENTS Widgets Core)`来查找`Qt`库,并使用`target_link_...
"cmake-cmake使用示例之Imported-Targets.zip"这个压缩包文件显然是一个关于CMake中Imported Targets特性的示例。Imported Targets是CMake处理外部库或已编译组件的一种方式,这对于依赖第三方库或者链接系统库的...
在iOS和macOS开发中,Xcode的Targets是构建系统的核心组成部分,它允许开发者为不同的平台、设备或项目目标创建多个版本的同一应用程序。通过合理利用Targets,开发者可以有效地管理和控制项目的编译、链接和打包...