让同一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文件,图片啊,都清理一下,这样不同的版本,编译出来大小就会是两个版本的交集了。
相关文章推荐
- 关于项目中所引用jar包的jdk编译版本
- Android studio项目不能编译,提示设备版本过低
- 编译remail-iphone项目报错 Undefined symbols for architecture armv7 ImapFolderWorker fetchFrom
- L3.15.52版本内核编译过程 for sabrelite
- 导入github下载的项目时,由于gradle版本不同而造成的无法编译解决办法
- 使用Android Studio 1.3 版本进行NDK开发 编译运行hello-jni项目及分析
- 使用maven的jetty插件项目一直报编译版本的错误
- ios中Tableview的两个获得重用cell方法的区别?(兼容iPhone5.0之前的版本)
- 为Maven项目指定JDK编译版本
- iOS_Windows 用 Cygwin 和 iPhone toolchain 4.0 编译 iPhone 项目
- 高版本android sdk上i-jetty项目maven编译不成功
- quick-lua新建一个HelloWorld的项目并且编译Android版本
- 在同一IIS 进程中不可能运行两个不同的 ASP.NET 版本
- XCode编译cocos2dx 2.2.6版本项目的一些问题
- iphone ios编译发布版本
- 关于新建Android Studio项目时默认的编译sdk版本导致的兼容问题
- Unity3D For Mac最新3.4.1版本破解教程分享并将Unity3D项目在iphone上运行
- VS2010编译OpenSSL(两个版本)
- 如何编译同时引用两个不同版本的Assembly的C#程序
- ZXing范例导入项目eclipse编译出现的版本错误问题