本文的産生是因産品經理提出的特殊需求:
一個針對多所學校的應用,對不同學校需要分别使用一套不同的“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,并重命名和切片設定。 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的差別比較少,其他的一些配置同學自己去探索吧