点击左侧的工程名称,右侧会出现PROJECT和TARGETS,点击你如今的target,假如叫A,右键弹出菜单中,选择Duplicate,复制一个相同的target,复制的target通常叫A copy,A copy和A的设置(编译条件、源文件、资源文件)彻底同样,此时你能够根据须要修改A copy的编译条件和资源文件了;ios
一、A copy的名称是否是显得不够专业?如今来修改一下:xcode
1)首先修改Xcode左上角的target名称:app
点击xcode左上角Run、Stop右边的工程名称,下拉框中选择Manage Schemes,在弹出框中,点击A copy那行,点击一次、再点击一次,就能够修改A copy为你想要的名字了,好比ALite;ide
2)修改xcode左下方Products下的A copy.app名称:ui
点击Targets下你刚才更名后的ALite,点击Bulid Setting,搜索Packaging下的Private Headers Folder Path,修改A copy.app/PrivateHeaders为:ALite.app/PrivateHeaders;spa
二、修改Bundle Identifier和选择不一样的证书,让app区分开来版本控制
1)新target须要的.plist文件调试
新建一个文件夹X,添加X到项目中,添加时选择target为ALite,不要选target A了,由于不是共用的;复制原来target的A-Info.plist到X,修改其名称为ALite-Info.plist,xcode中右键Add File To ...,选择添加到target ALite中;code
2)点击target: ALite ->Summary:提示你须要选择plist文件,选择1)中添加的ALite-Info.plist;orm
3)点击target: ALite ->Summary:设置Bundle Idenfitier;
4)点击target: ALite->Build Settings->Code Signing:选择另外的证书;
三、修改程序名称
通常说来,多个target的程序名称不一样,复制zh-Hans.lproj和en.lproj下的InfoPlist.strings文件到X,xcode中右键Add File To ...,选择添加到target ALite中;而后修改InfoPlist.strings的内容:CFBundleDisplayName="程序名称Lite";
四、2个target到如今就建立好了,你添加资源文件的时候,经过选择添加的target来控制不一样版本的内容;再说一下预编译宏的事情:target->Build Setting,搜索:Preprocessor Macros,设置Debug和Release里的预编译宏内容,好比TARGET_VERSION_LITE=1表示lite版本(注意=先后不能右空格,有空格会编译不过),程序中对不一样版本这样判断:
#if TARGET_VERSION_LITE ==1
...
#elif TARGET_VERSION_LITE ==2
...
#endif
参考文章:
一、http://blog.163.com/lengfeng_04/blog/static/80470603201273111549529/
因为项目需求,同一项目须要发两个版本,两个版本只有小部分不一样,特意研究了一下target,小有了解,把建立target的通过记录在案,方便事后查看,若有疏漏,请网友指正。
建立target有两种方式,
1是经过新建target能够经过File-->New-->Target,而后选择其中一个模板来建立,app类型的target,能够选择Empty Application模板,不过新建的target有本身的AppDelegate和main,这点还没研究好,如何与原来的AppDelegate和main复用
2.另外一种方法是经过对原有的target作duplicate,复制一份,目前只研究了如何经过duplicate来新建target,作下记录。
假设原来的target名字为A,咱们须要新建一个target B
1. 在原来的target上右键,选择duplicate,Xcode会复制一个名为A copy的target对象,同时生成一个A copy-info.plist和A copy的scheme
2. 更名
a)对A copy target更名,能够直接单击target来修改,改为B
b)A copy-info.plist,默认生成在程序环境根目录,也就是A.xcodeproj的同级目录中,若是想放到里层(好比与A-info.plist放在同级目录),能够先在Xcode删除A copy-info.plist索引,而后拷贝文件到制定目录中,而后改名为B-info.plist,在add到project中。在Project的Build Settings中,修改Info.plist File选项为B-info.plist的目录(相对路径),这样就能够看到Info页了(就是B-info.plist),接着修改ProductName和Bundle identifier,使之成为另外一个app。Prefix Header的路径,视具体需求而定是否要修改,若是两个target能够公用同一个Prefix Header,那么就不须要修改这里的路径
c)修改scheme,在调试的Stop按钮边上,咱们能够选择本工程中全部的target来作编译,若是不修改,在这里选择出来的名字就是A copy,为了与新建的target统一块儿来,一样也要修改这里的名字。点击scheme选择区,而后选Manager Scheme,找到A copy,而后改为你须要的名字,好比B
用duplicate的好处是,若是两个target的相同点不少,用duplicate,就能够把相关的设置所有拷贝过来,而不须要作过多的修改
生成一个新的target,必定会与原target有区别,这里能够定义预编译宏,来区分两个版本的不一样代码,预编译宏能够在Build Settings中Preprocessor Macros定义,好比在咱们新建的target B中定义预编译宏MACRO,而后在代码中经过
#if defined (MACRO)
//target B须要执行的代码
#else
//target A须要执行的代码
#endif
来区分
其余:Build Phases(各target编译所包含的内容,须要注意的是,若是建立了target B后,再往A里面添加资源或文件,target B中不会自动增长这些资源,须要手动添加)
1.Compile Sources
须要编译的代码文件
2.Link Binary With Libraries
编译所依赖的库
3.Copy Bundle Resources
编译须要的资源
每一个target能够根据具体须要增减里面的内容
二、http://kan.weibo.com/con/3550176548481250?_from=text
http://stackoverflow.com/questions/1807377/xcode-multiple-targets-multiple-internationalized-names
真很差用一个标题来归纳这个东西。Xcode 4.2+ 在项目多语言包 xx.lproj 里引入了一个叫 InfoPlist.strings 的文件,能够对同一个 App 在不一样系统语言下显示不一样的 Display Name。好比:
InfoPlist.strings (English) -
"CFBundleDisplayName" = "English Name";
InfoPlist.strings (Chinese) - "CFBundleDisplayName" = "中文";
在单 Target 下很容易作,多 Target 的时候就须要作一点额外的处理。在项目目录下新建与 Target 同名的文件夹(同名是为了方便区分),而后将 xx.lproj 文件夹 复制 到各个 Target 下面,目录结构会是这个样子:
./Target1/
en.lproj/InfoPlist.strings
zh-Hans.lproj/InfoPlist.strings
./Target2/
en.lproj/InfoPlist.strings
zh-Hans.lproj/InfoPlist.strings
复制后保持项目目录下还有 xx.lproj 文件夹,里面保留 Localizable.strings,由于多语言化通常是通用的,不必针对每个 Target 作多语言。复制后的 Target1/xx.lproj 下只有 InfoPlist.strings。而后添加到 Xcode 项目里,打开 Xcode - Views - Utilities (Command+Option+0),在 Target Membership 下针对不一样的 Target 把对应文件夹下的 InfoPlist.strings 对应链接起来,Done。