在一个工程管理多个应用-b
Demo:http://download.csdn.net/detail/u012881779/9166527
本文的产生是因产品经理提出的特殊需求:
一个针对多所学校的应用,对不同学校需要分别使用一套不同的“icon”和“启动图” 打包并上传到App Store,同时因为接口需要对不同学校区别处理,故在这个应用部分代码中需要分别处理。本文便是为了在同一个工程中,不使用copy整个项目之类的方 法,仅使用这一套代码管理多个不同的应用,便于后期代码管理。
1.新建一个项目并对info.plist进行设置
添加一个字段JudgeMark并设置为“1”(代码中对不同应用分别处理时需要), 设置Bundle identifier为“com.gamin.DMManageMultipleApp”(在同一个设备上运行多个应用时避免覆盖安装),设置 Bundle name为“第一个应用”。
2.进入TARGETS选择DMManageMultipleApp点击右键,选择Duplicate,进入下一级后选择Duplicate Only(ipad版工程这里选择Duplicate and Transition to iPad)。
3.对新copy出来的TARGETS和info.plist进行重命名。
4.进入Manage Schemes对项目的Scheme进行重命名,保持和上一步修改的TARGETS名相同。
5.选择新copy的TARGETS进入General选择Choose Info.plist File,并对选择这个info.plist进行部分设置(Bundle identifier,Bundle name,JudgeMark)。
6.进入Assets.xcassets,点击右键选择App Icons & Launch Images,进入下一级后选择New iOS App Icon或New iOS Launch Image,新建icon和launch,并重命名和切片设置。
具体操作可以参考:http://blog.csdn.net/wsyx768/article/details/42386919另一笔记
7.选择TARGETS进入General,进入App Icons and Launch Images选择上一步创建的关联不同应用的icon和launch。
8.在代码中对不同应用分别完成部分不同功能。
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *nameLab;
@property (weak, nonatomic) IBOutlet UILabel *markLab;
@property (weak, nonatomic) IBOutlet UILabel *differenceLab;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//不同应用 可以这里完成不同功能的操作
NSString *judgeMark = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"JudgeMark"];
NSString *appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"];
if ([judgeMark isEqualToString:@"1"]) {
//第一个应用
_nameLab.text = appName;
_markLab.text = judgeMark;
_differenceLab.text = @"DMManageMultipleApp";
}else if([judgeMark isEqualToString:@"2"]){
//第二个应用
_nameLab.text = appName;
_markLab.text = judgeMark;
_differenceLab.text = @"DMManageMultipleApp-two";
}else if([judgeMark isEqualToString:@"3"]){
//第三个应用
_nameLab.text = appName;
_markLab.text = judgeMark;
_differenceLab.text = @"DMManageMultipleApp-three";
}
}
选择不同应用运行结果:
还有一个需求是同一个app但是名字和logo不同时期不一样
我把它删掉,新创建一个,改个名顺便浪一下。。。
4、创建新的target的info.plist文件,复制原来的info.plist文件以保持配置一致。我把随之生成的那个plist文件删掉了,可能是路径不对,提交代码时提交不上。
5、对新创建的target进行修改配置,比如dispaly Name,bundle id,LaunchScreen,APPIcon等等
dispaly Name:在新创建的info.plist文件中添加Bundle display name
bundleID就不用说了,直接在复制的target里修改就好了
LaunchScreen:需要创建一个新的LaunchScreen,然后在复制的target里选择
APPIcon:
6、如果工程使用了cocoapods,记得也要给新创建的Target安装一份,很简单,打开podfile,然后复制一份,改下target的名字在pod install就好了
7、如果需要修改一些代码里的配置,就用预处理吧
在你的全局配置类里进行判断,这里面写一些宏定义,比如百度推送的Key之类的
8、记得配置推送证书和开发发布的配置文件,毕竟这些都是以bundleID标记的,不配置的话无法真机测试,发布以及收不到推送哦
至此,我的多环境配置就搞好了,当然我的两个app的区别比较少,其他的一些配置同学自己去探索吧
文/作者:枫志应明
c博客地址:http://blog.csdn.net/wsyx768/article/details/49001507
在一个工程管理多个应用-b的更多相关文章
- Linux工程管理器——make
一.定义 工程管理器,顾名思义,是指管理较多的文件 Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Make ...
- go语言入门(5)工程管理
在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系,早期Go语言使用makefile作为工程管理的临时方案,后来的Go命令行工具的革命性之处在于彻底消除了工程文件的概念,完全用目录结 ...
- go语言20小时从入门到精通(六、工程管理)
在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系.如果这样一个文件一个文件逐步编译,那不亚于一场灾难. Go语 ...
- ARM裸机开发之交叉工具链和MakeFile工程管理
一.交叉工具链 嵌入式Linux开发采用交叉开发,简单来说就是在宿主机(PC机)上面编译出能够在其他硬件平台上面运行的程序.在这个过程中,需要用到许多的交叉工具,这些交叉工具的集合就叫做交叉工具链.下 ...
- 使用BLADE构建c++工程管理
使用BLADE构建c++工程管理 字数764 阅读2753 评论2 喜欢4 一. c++工程依赖管理 之前在百度一直使用comake2构建c++项目,十分方便.免去了手写Makefile的痛苦,很多项 ...
- emacs工程管理,cedet ede插件自动构建Make,Automake
鉴于自己一直都是在做客户端开发方面的工作,服务端很多知识都随着时间淡忘了,最近有一个计划,用一些时间补一下基础.所以早上很早就起床,花了一点时间大致浏览了一下BSD socket的相关API,然后用G ...
- Makefile 工程管理
Makefile 工程管理 Makefile 规则 --变量 在Makefile中,用户除了可以自己定义变量外,还可以使用存在系统已经定义好的默认变量 $^:代表所有的依赖文件 $@:代表目标 $&l ...
- make工程管理器
1.概述 大型程序中,人们希望工具自动识别修改的文件,而且不需要输入冗长的命令,就可以进行编译链接等操作,于是make工程管理器应运而生. make可以自动识别文件时间戳,只处理修改的文件: make ...
- 学习总结:工程管理与makefile
工程管理与makefile 一.为什么需要makefile和make 一个工程中的源文件可能很多,按照类型.功能.模块分别放在若干个目录中,为了有效地管理软件工程,更高效地编译整个工程,需要用到mak ...
随机推荐
- [改善Java代码]推荐使用枚举定义常量
枚举和注解都是在Java1.5中引入的,虽然他们是后起之秀,但是功能不容小觑,枚举改变了常量的声明方式,注解耦合了数据和代码. 建议83:推荐使用枚举定义常量 一.分析 常量的声明是每一个项目中不可或 ...
- 关于线程池ThreadPoolExecutor使用总结
本文引用自: http://blog.chinaunix.net/uid-20577907-id-3519578.html 一.简介 线程池类为 java.util.concurrent.Thread ...
- BZOJ 3505
3505: [Cqoi2014]数三角形 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1171 Solved: 703[Submit][Statu ...
- 实现Foreach遍历
实现Foreach遍历的集合类,需要实现IEnumerable接口,泛型集合则需要实现IEnumerable<T>接口 using System; using System.Collect ...
- 163免费邮客户端设置的POP3、SMTP、IMAP地址
网易邮箱支持POP3/SMTP/IMAP服务,方便您可以通过电脑客户端软件更好地收发邮件
- C#调用WinAPI及窗口过程
C#调用WINAPI及Windows窗口消息的发与送 最近在做一个餐饮项目(C#Winform),其中有一块是做点菜宝接口的对接,点菜宝的厂商提供了一个WX.exe的驱动程序,这个驱动程序无直接打开, ...
- 日程管理控件 glDatePicker
之前接触过一款日程管理控件,叫 FullCalendar,功能很强大,会列出每天的事项,可选择编辑并且可以定制自己的日历,然而,有时候,我们的网页上只需要一个简单的日历,迷你但实用,有日程安排的日期高 ...
- VS2013编译WEBKIT
0,安装VS2013:DXSDK_Jun10.exe:QuickTimeSDK.exe 1,WebKit-r174650.tar.bz2 以管理员解压(非管理员解压最后几下总是报错) 2,设置环境变量 ...
- VS代码模板
Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplates\Csharp\Code\2052\Class
- (转)jquery ajax使用及跨域访问解决办法
原文地址:***/UIweb/jquery_ajax_kuayujiejue.html 最近开发中,设计到智能手机项目,给领导做几个demo.主要是用jquery和jqeury mobile. 越来越 ...