《转》xcode创建一个工程的多个taget,便于测试和发布多个版本

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

还有些时候,我们需要确定到底是A的问题还是B的代码出了问题,这时候都需要建立一个工程能够编译多个版本出来,下文就介绍怎么在一个工程中编译多个版本

好了,闲话不多少,下面正式开始:

我们建立一个默认的应用来演示做法:

建立后的应用如下:

可以看到,上面只有一个target:即TestTarget,为了方便演示,我们给它加上一个多语言,让它在模拟器上的名字是中文

我们在工程的InfoPlist.strings中增加一句:CFBundleDisplayName="测试正式版”;

这样在模拟器中安装后显示的是

好了,前序工作已经可以了

1.新增一个target,因为这里我们是建立一个和原来基本一致的target,所以,我们这里可以选择复制来新建一个target

当你选择复制后,会多出两个文件,如下

还会在scheme那里多出一个和这个target相关的scheme

2.

上面的名字太难看,我们改个名字,改了名字后,你会发现

重新选择我们更改后名字的Info plist文件 TestTarget2-info.plist文件(文件名最好是包含info.plist,这个是一个约定,便于以后寻找这个文件)

我们将那个scheme也更改一下

还有生成的product的名字也要改一下,切换到TestTargetTest2的Build Settings下,搜索product name,将product name改成我们需要的名字(注意,这个名字只是我们生成的app的名字,不一定是最后的显示的名字,最后显示的名字还要看用户是否在InfoPlist.strings文件中设置了CFBundleDisplayName="测试1";)

3.切换到TestTargetTarget2这个scheme,运行,

看看模拟器中,你会发现

    模拟器中有两个测试1了,

有些同学在这里并没有生成两个 图标,这个应该是他将两个target的Bundle Identifier都设成了一样的,这个如果一样的话,那生成的target会覆盖上一次的

4.上面已经生成了两个target,并且也在模拟器上运行成功了,问题来了,我们怎么知道哪个是哪个呢,两个的名字是一样的,不要担心,这个问题很好解决的

由于共用了一个InfoPlist.stirngs文件,所以,才会出现两个target在模拟器上都显示为 测试1,知道了问题所在,那么下面我们就解决它,很显然,我们应该针对TestTargetTest2再建立一个InfoPlist.stirngs,

由于我们只是需要名字显示不同,其它都不需要改变的,所以我们可以直接进行复制,将工程目录下的所有的语言的 InfoPlist.strings文件复制一份,建立一个新的文件夹(注意,需要将所有语言的InfoPlist.strings都复制一份,因为多语言嘛,语言的文件夹也要有)

如图

由于我们这里,只有一种语言,

,所以我们targetTest2中只有一个en.lproj文件夹,将targetTest2文件夹下的InfoPlist.strings中的

将刚添加的文件加到工程中来

添加完后,将原来那个Infoplist.stirngs的target中的targetTest2去掉如下图:

将目录targetTest2下的Infop.stirngs中的内容修改成 测试2

5.先选TestTarget这个scheme,运行,在模拟器上会出现 测试1,切换scheme为TestTarget2,运行,在模拟器上将生成 测试2

切换scheme如图

一切正确后在模拟器上将会显示

6.作为附录,其实也比较重要的是,我们很多target共用的代码,资源等,有时候我们在代码中需要区分到底是哪个target,比如说,我们生成的第二个target是一个受限版本,我们需要提示用户(比如是功能受限的免费版本),怎么在代码中区分呢?

有如下三个方式

第一种方式,利用CFBundleIdentifier来判断

  1. 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,

注意,上面的 -D是需要的,一般我们对于这种定义宏都大写的

在代码中可以

#ifdef TARGET2
    //target2的处理代码
    NSLog(@"TARGET2");
#else
    NSLog(@"TARGET1");
#endif

第三种方式,这种不需要增加-D的

增加预编译宏

在代码中

#ifdef TESTTARGET2
    //target2的处理代码
    NSLog(@"TESTTARGET2");
#else
  
    NSLog(@"TARGET1");

#endif

以上三种方式都可以的

附录二:参考文献

http://finbarrbrady.com/2010/03/building-for-multiple-targets-in-xcode/ 英文

http://www.reigndesign.com/blog/building-flockwork-creating-targets-for-free-and-full-versions-in-a-single-xcode-project/ 英文

http://www.omegasoftweb.com/omega/blog.cfm?p=43 英文

http://blog.csdn.net/ysysbaobei/article/details/10951991 中文

转:http://blog.csdn.net/yohunl/article/details/17403029

时间: 2024-08-22 17:56:33

《转》xcode创建一个工程的多个taget,便于测试和发布多个版本的相关文章

xcode创建一个工程的多个taget,便于测试和发布多个版本

背景:很多时候,我们需要在一个工程中创立多个target,也就是说我们希望同一份代码可以创建两个应用,放到模拟器或者真机上,或者是,我们平时有N多人合作开发,当测试的时候,在A这里装了一遍测A写的那块,当需要测试B写的代码时,我们需要到B那里去装一遍,如果只有一个target的话,那么A的将会被覆盖 还有些时候,我们需要确定到底是A的问题还是B的代码出了问题,这时候都需要建立一个工程能够编译多个版本出来,下文就介绍怎么在一个工程中编译多个版本 好了,闲话不多少,下面正式开始: 我们建立一个默认的

git使用(一):如何创建一个工程、提交代码

1. 在git server端如何创建一个工程 (1) su git (2) mkdir linux-git.git (3) cd linux-git.git (4) git init --bare (5) exit 2. 在clinet端如何clone.提交代码 (1) git clone [email protected]:/home/prj_git/linux-git.git (2) cd linux-git (3) cp ../linux-3.18.3 ./ -rf (4) git ad

express创建一个工程测试

创建一个工程 现在已经有express 键入:express myapp (myapp是随意起的工程名称) 你会发现多了一个 C:\Program Files\nodejs\myapp 目录 默认情况下:里会自动创建 这几个文件,不做解释,相信有过开发经验的同学都能一眼明了. 复制node_modules到myapp下面 环境搭建到此完工,下面做一个demo测试! 在myapp下新建helloworld.js复制代码 代码如下: var http = require("http");h

Node.js学习笔记(6)——使用Express创建一个工程

前提是搭建好了环境,node,npm,express:(推荐全局安装) 开始用express创建一个基础工程: express –t ejs microblog 进入文件夹之后 npm-install(自动安装好要用的依赖) 这个时候,用浏览器访问localhost:3000,就可以出来一个欢迎界面了,这里简单说下原理:当你在浏览器输入这个地址砸下回车的瞬间,node搭建的一个网站后台程序开始工作,在app.js这个文件里面,有app.get(‘/’, routes.index);这一句话的作用

Xcode创建子工程以及工程依赖

https://www.jianshu.com/p/f2bc7d155a86 阅读 7858 视频地址 如果文章不详细,点击看操作视频 项目需求:代码抽层,业务逻辑和数据处理要高度抽离,模块化,需要将model 层 和 network层抽离出来.所以,就考虑建一个公共工程,每次新建项目,只是需要依赖这个工程就行了,代码的模块化之后我们可以对每一个模块持续优化集成,便于实现一些更加复杂的需求和结构设计. 思路设计:①MonkeyApp,用于存放公共的库.②MonkeyAppDemo用于写demo和

XCode创建C++工程

1. 创建命令行程序: 2. 设置工程名和语言: 3. 设置工程存储路径: 4. xcode会自动为工程添加main函数: 5. 编译执行: 版权声明:本文为博主原创文章,未经博主允许不得转载.

如何利用CEF3创建一个简单的应用程序 (Windows Platform)

1. 说明 这篇文章主要讲述如何利用CEF3来创建一个简单的应用程序,引用的是1535及以上版本中包含的 Cefsimple 项目例子.如果想知道关于CEF3更多的使用方法,可以去访问 GeneralUsage. 2. 开始 首先,根据自身所使用的开发平台,可以去 这里 下载对应的发布版本.针对这个教程,我们需要下载1750或者更新的版本.当前支持的平台有Windows, Linux和Mac OS X.每一个版本都包含了当在特定平台上编译特定版本CEF3时所需要的所有文件和资源.您可以通过包含在

如何利用CEF3创建一个简单的应用程序

说明: 这篇文章主要讲述如何利用CEF3来创建一个简单的应用程序,它参考了1535及以上版本中包含的 Cefsimple 项目例子.如果想知道关于CEF3更多的使用方法,可以去访问 GeneralUsage. 开始: 首先,根据自身所使用的开发平台,可以去这里下载对应的发布版本.针对这个教程,我们需要下载1750或者更新的版本.当前支持的平台有Windows, Linux和Mac OS X.每一个版本都包含了当在特定平台上编译特定版本CEF3时所需要的所有文件和资源.您可以通过包含在里边的 RE

使用Express创建一个简单的示例

1.安装Express 使用npm包安装工具来安装Express安装包,打开npm命令行,输入: npm install -g express 2.创建一个工程 本示例是在windows下创建的,项目所在目录为D:\workSpace\mxk. 在D盘新建project-Express文件夹,打开命令行进入D盘,输入: express -e project-Express (“project-Express”是项目名) 安装完成后输入: cd project-Express & npm inst