xcode创建一个工程的多个taget,便于测试和发布多个版本
背景:很多时候,我们需要在一个工程中创立多个target,也就是说我们希望同一份代码可以创建两个应用,放到模拟器或者真机上,或者是,我们平时有N多人合作开发,当测试的时候,在A这里装了一遍测A写的那块,当需要测试B写的代码时,我们需要到B那里去装一遍,如果只有一个target的话,那么A的将会被覆盖
















- NSString*BundleIdentifier =[[[NSBundlemainBundle]infoDictionary]objectForKey:@"CFBundleIdentifier"];// Do any additional setup after loading the view, typically from a nib.
if ([BundleIdentifierisEqualToString:@"yohunl.TestTarget2"])
{
//处理代码
NSLog(@"TestTarget2-Info.plist");
}
else {
//处理代码
NSLog(@"TestTarget-Info.plist");
}第二种方式,定义一个编译器宏,来进行区分,在打开TestTarget2,
#ifdef TARGET2
//target2的处理代码
NSLog(@"TARGET2");
#else
NSLog(@"TARGET1");
#endif

#ifdef TESTTARGET2
//target2的处理代码
NSLog(@"TESTTARGET2");
#else
NSLog(@"TARGET1");
相信很多人都注意到XCode中, 有个Target的概念. 这在很多地方都有所体现, 比如打开一个工程后, 左侧的列表中有Targets一项, 而在工程界面的顶部菜单中, project里面也有多个涉及到Target的项目, 那么这个Target到底是什么呢?
Apple的人是这样说的:“ Targets that define the products to build. A target organizes the files and instructions needed to build a product into a sequence of build actions that can be taken.”
简单的理解的话, 可以认为一个target对应一个新的product(基于同一份代码的情况下). 但都一份代码了, 弄个新product做啥呢? 折腾这个有意思么?
其实这不是单纯的瞎折腾, 虽然代码是同一份, 但编译设置(比如编译条件), 以及包含的资源文件却可以有很大的差别. 于是即使同一份代码, 产出的product也可能大不相同.
我们来举几个典型的应用多Targets的情况吧, 比如完整版和lite版; 比如同一个游戏的20关, 30关, 50关版; 再或者比如同一个游戏换些资源和名字就当新游戏卖的(喂喂, 你在教些什么...)。
以上copy的。
这里不是要讨论如何制作这样的工程,而是选择做与不做。
最近的工作主题时维护制作两个不同版本的代码,相当是完整版和简版的两个项目。
现在我们的处理是放在两个不同目录,以前两个项目是由不同的框架组成,现在经过升级后,很多基础功能都是一样的,但也还是保留放在两个不同地方维护。我一边做一边在想,为什么一样的代码却要放在两个目录下,那时已经发现的bug,只有一个地方得到修复了,这边还是没有的。实现同样的功能,却使用了两份不同的代码和框架。
我理想的情况是,我们只有一个工程,这个工程应该就是一个完整工程,它包含了多个target,编译一次它同时或者单独输出各个不同版本的target即可。
但是,这次升级,我把iphone和ipad的代码和在一起,后来自己测试时,我却有些犹豫了。版本做成,iphone4.0运行的好好的,上ipad,崩了,上iphnoe3.0,起不来。于是代码中出现好多重复的这样的代码
If (isipad)
xxx
else
xxx
我开始在犹豫了。现在只是iphone和ipad放在一起,如果把两个不同版本的target放在一起,那也许更惨了。3.0编译的,要测试ipad的,iphone3,iphnoe4;4.0编译的同样也是。一次改动,所有的都要测试,那维护起来该有多么的小心翼翼,如履薄冰啊。而且代码也变得越来越脏了。
面对经常遇到复杂而又频繁多变的无聊小需求,把鸡蛋放到一个篮子里,或许真不是一个好的选择。相反的我倒是觉得也许现在没有将这两个工程和在一起是一个正确的选择。
取舍之间,我还是比较倾向于合并在一起维护。因为每一次出现一个小的适配,如果忘记两个地方都修改,出现一个又一个深藏的bug,最后应该是满目疮痍。
以前听说在做s60的软件都是单独几种设备适配一个版本,也就是说,需要维护同样的很多分代码,这对于我来说简直是噩梦。
不过做软件就是这样吧,该合的合,该分的还是需要分清楚的,一定要分清楚。
xcode创建一个工程的多个taget,便于测试和发布多个版本的更多相关文章
- 《转》xcode创建一个工程的多个taget,便于测试和发布多个版本
背景:很多时候,我们需要在一个工程中创立多个target,也就是说我们希望同一份代码可以创建两个应用,放到模拟器或者真机上,或者是,我们平时有N多人合作开发,当测试的时候,在A这里装了一遍测A写的那块 ...
- Node.js学习笔记(6)——使用Express创建一个工程
前提是搭建好了环境,node,npm,express:(推荐全局安装) 开始用express创建一个基础工程: express –t ejs microblog 进入文件夹之后 npm-install ...
- Xcode创建子工程以及工程依赖
https://www.jianshu.com/p/f2bc7d155a86 阅读 7858 视频地址 如果文章不详细,点击看操作视频 项目需求:代码抽层,业务逻辑和数据处理要高度抽离,模块化,需要将 ...
- 使用IDEA创建一个SSM工程(非maven)
说在前面的话 直到现在从Eclipse向IDEA转的人越来越多,但是IDEA的项目创建让人摸不清头脑,因此这里我创建一个非maven的ssm工程,供大家练练手,进一步的了解IDEA在项目中的使用. 创 ...
- windows下无法创建django工程的问题
环境:python2.7 django1.7 安装好django后,将C:\Python27\Lib\site-packages\Django-1.7.7-py2.7.egg\django\bin; ...
- IOS开发之小实例--使用UIImagePickerController创建一个简单的相机应用程序
前言:本篇博文是本人阅读国外的IOS Programming Tutorial的一篇入门文章的学习过程总结,难度不大,因为是入门.主要是入门UIImagePickerController这个控制器,那 ...
- 使用Express创建一个简单的示例
1.安装Express 使用npm包安装工具来安装Express安装包,打开npm命令行,输入: npm install -g express 2.创建一个工程 本示例是在windows下创建的,项目 ...
- 用django创建一个简单的sns
用django创建一个简单的sns 1.首先创建一个工程newsns django-admin.py startproject newsns 在工程目录下新建一个文件夹templates,在该文件夹下 ...
- Django命令行相关命令 以及创建一个空白网页的步骤
django相关命令行命令: django.admin.py是Django的一个用于管理任务的命令行工具,manage.py是对django-admin.py的简单包装,每个Django Projec ...
随机推荐
- poj 3669 火星撞地球问题 bfs算法
题意:火星撞地球,你要跑到一个永远安全的地方,求最短时间 思路:bfs+预处理 这题的数据量比较大,所以需要进行预处理 对每个位置设上时间(被撞的最早时间) 未被撞的设为-1 for (int j = ...
- optimize table在优化mysql时很重要
一个表的数据量有1000W条,那么查看这么表占据的硬盘空间时会发现,数据本身是300M,索引是200M 这个时候,删除掉500W条数据,这个时候数据本身150M,而索引还是200M左右 你删除数据时, ...
- 认识Function.prototype.call
一.前言 大家先预计一下以下四个函数调用的结果吧! var test = function(){ console.log('hello w ...
- canvas 动画库 CreateJs 之 EaselJS(下篇)
本文来自网易云社区 作者:田亚楠 继承 对应原文:Inheritance 我们可以继承已有的「显示对象」,创建新的自定义类.实现方法有很多种,下面介绍其中之一. 举例:实现一个继承于 Containe ...
- LoadRunner 手动关联
步骤: 1.同样的流程录制两遍,保存在不同的项目中, 2.点击Tools >> Compare with Script 3.选择要比对的脚本 3.找辨识码 4.打开辨识码所在网页,查看源代 ...
- SDOJ 2605 闲荡
描述 L 饭后无聊,便在 BugTown 里闲荡. BugTown 共有 N 栋房屋和 M 条有向道路.每栋房屋都有一个非负整数 vi 作为标识. BugTown 有一个特性十分神奇:从任意一个房屋离 ...
- Leetcode 446.等差数列划分II 子序列
等差数列划分II 子序列 如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列. 例如,以下数列为等差数列: 1, 3, 5, 7, 9 7, 7, 7, 7 3, -1, ...
- 【Istio】error initializing configuration '/etc/istio/proxy/envoy-rev0.json': malformed IP address: istio-statsd-prom-bridge
今天遇到一个问题,istio的组件一直在重启,查看log大概是这个样子 --03T07::.935580Z info Epoch starting --03T07::.936317Z info Env ...
- PHPSTORM+Thinkphp3.2模板标签替换Thinkphp5.1公式
FORMAT: purpose: find: replace 替换<php>标签 <php>(.*)</php> {php}$1{/php} 替换<if &g ...
- Jenkins+GitHub+maven
介绍: http://192.168.193.128:8115/jenkins/ 用户名:admin密码:admin电子邮箱:admin@admin.com root/12345678添加新用户: t ...