您的位置:首页 > 其它

让同一iphone项目能编译两个版本--正式版、lite版

2011-12-14 23:38 323 查看

让同一iphone项目能编译两个版本--正式版、lite版

博客原文地址:在同一iphone项目添加lite版

在同一iphone项目添加lite版(二)

作为基本的推广手段,缩减关键功能,增加ADMob或iAD的lite版应用是必要的。

但为了lite单纯另开一个项目,不断在在lite和完整版项目中同步代码,肯定是不行的,最好的办法,就是在同一个xcode project中添加一个Target。

步骤如下:

1、在左边的Groups&Files窗口中找到Target节点

2、在原来的Target上点右键,选Duplicate

3、将复制出来的新Target Rename为yourappname-lite


(Target名我隐藏掉先)

4、对应的,在项目下的Resources目录下会添加一个 yourappname-info copy.plist,将它重命名为yourappname-lite-info.plist

5、打开Project菜单,Set Active Target 为lite



6、再选择下面的Edit Active Target "*****name-lite"菜单

7、在打开的表单中,修改以下值:

7.1 Product Name --> yourappname-lite

7.2 Info.plist file --> yourappname-lite-Info.plist

7.3 Preprocess Macros --> LITE_VERSION (这里是为编译器设置一定预定义的值,这样的话,在代码中可以用这个值来判断,当前是完全版或者lite版)

8、搞完后,把xcode关掉,再打开项目,这一步一定要做,看能不能编译,并在模拟器中跑出第二个应用,如果不行,根据提示可能会要拷出拷入些文件,每次都重启下xocde的项目

9、能跑起来后,通过如下代码,为不同版本提供不同功能:

#ifdefined(LITE_VERSION)UIAlertView
*alertVersion
=[[UIAlertView alloc]

initWithTitle:nil

message:@"This is lite version"delegate:nil

cancelButtonTitle:@"cancel"

otherButtonTitles:nil];

[alertVersion show];

[alertVersion release];

#endif

如果想更加彻底的对两个版本做一些区别,比如两个版本包中的文件不一样,两个版本加载的库不一样(比如正式版就不用加载AdMob模块),程序一开始的入口就不一样,该怎么办呢?

在上一集中,我们Duplicate出了一个xx-lite的Target,也Copy出了一个xx-lite-info.plist(注意,plist和引用的外部.a文件是不用包进Target里的Copy Bundle Resources里的,否则会在编译时,出现一些莫名的Warnning,如果包进去了,请在左侧的Groups&Files窗口中展开你的Target,找到删除之),打开plist文件,里面有一项“Main nib file base name”,将值改一下,比如MainWindow-Lite。这样,程序启到时,加载的就不是原来的MainWindow,而是另一个MainWindows-Lite.xib文件了。然后,通过Copy或手工的方式,把原来的MainWindows和xxxAppDelegate.m复制一份出来,命令改成相应的xx-Lite。打开MainWindows-Lite.xib,将里面的xxx
APP Delegate对象的Type改成 xxxAppDelegate_lite,这样的话,程序一开始加载的AppDelegate也不同了。然后再去改你的AppDelegate_lite.m,比如添加AdMob功能之类,如果View也要变,把ViewController换掉都随你了,反正,从xib到后端代码的入口,你都可以控制。还是在Target的界面里,把不同版本不需要的.a文件啊,.m文件,图片啊,都清理一下,这样不同的版本,编译出来大小就会是两个版本的交集了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: