在一个工程管理多个应用-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代码]别让null值和空值威胁到变长方法
建议5:别让null值和空值威胁到变长方法 public class Client { public void methodA(String str,Integer... is){ } public ...
- Java线程池--ThreadPoolExecutor
一.线程池的处理流程 向线程池提交一个任务后,它的主要处理流程如下图所示: 一个线程从被提交(submit)到执行共经历以下流程: 线程池判断核心线程池里的线程是否都在执行任务,如果不是,则创建一个新 ...
- android.util.LruCache类
值得一提的另一个类是android.util.LruCache<K, V>,这个类是Android 3.1(代号 Honeycomb MR1)引入的,可以在创建时定义缓存的最大长度.另外, ...
- C#性能优化实践
性能主要指两个方面:内存消耗和执行速度.性能优化简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短. 本文以.NET平台下的控件产品MultiRow为例,描述C# ...
- SQL按照日、周、月、年统计数据
写sql语句分别按日,星期,月,季度,年统计销售额 --按日 select sum(consume),day([date]) from consume_record where year([date] ...
- 调整Windows8允许多用户登录
最近LP说要在继续教育平台上学习,好像是中级的需要进行继续教育吧,具体情况不管了.LP说网站登录后没办法听到声音看到视频,但是我的可以,系统环境是Win8,IE10,不过是在Chrome下使用IPA插 ...
- iOS开发——打包ipa
首先,保证设备证书和配置文件的正确,Xcode上登陆好自己公司的账号Apple ID 1.选中运行模拟器的位置为硬件设备 2.点击导航栏上的[Product]——[Archive]后编译后弹出如下界面 ...
- 基于asp.net的Web开发架构探索
问题由来 最近在研究适合团队开发的web架构解决方案,该架构即要适合分工协作又要有一定扩展性,适合不同的数据库需要,因此我查阅了一些资料,初步构想出了一套架构,请各位多多指教. 探索 web开发架构最 ...
- C#消息模拟
C#中消息的工作流程: C#中的消息被Application类从应用程序消息队列中取出,然后分发到消息对应的窗体,窗体对象的第一个响应函数是对象中的protected override void Wn ...
- 移动端高清、多屏适配方案 [来源:http://div.io/topic/1092]
Lovesueee 发布于 8 月前 移动端高清.多屏适配方案 背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们一个psd文件,称之为视 ...