天天看點

在一個工程管理多個應用-b

本文的産生是因産品經理提出的特殊需求:

一個針對多所學校的應用,對不同學校需要分别使用一套不同的“icon”和“啟動圖” 打包并上傳到App Store,同時因為接口需要對不同學校差別處理,故在這個應用部分代碼中需要分别處理。本文便是為了在同一個工程中,不使用copy整個項目之類的方 法,僅使用這一套代碼管理多個不同的應用,便于後期代碼管理。

1.建立一個項目并對info.plist進行設定

添加一個字段JudgeMark并設定為“1”(代碼中對不同應用分别處理時需要), 設定Bundle identifier為“com.gamin.DMManageMultipleApp”(在同一個裝置上運作多個應用時避免覆寫安裝),設定 Bundle name為“第一個應用”。

在一個工程管理多個應用-b
2.進入TARGETS選擇DMManageMultipleApp點選右鍵,選擇Duplicate,進入下一級後選擇Duplicate Only(ipad版工程這裡選擇Duplicate and Transition to iPad)。
在一個工程管理多個應用-b
在一個工程管理多個應用-b
3.對新copy出來的TARGETS和info.plist進行重命名。
在一個工程管理多個應用-b
4.進入Manage Schemes對項目的Scheme進行重命名,保持和上一步修改的TARGETS名相同。
在一個工程管理多個應用-b
在一個工程管理多個應用-b
在一個工程管理多個應用-b
5.選擇新copy的TARGETS進入General選擇Choose Info.plist File,并對選擇這個info.plist進行部分設定(Bundle identifier,Bundle name,JudgeMark)。
在一個工程管理多個應用-b
在一個工程管理多個應用-b
在一個工程管理多個應用-b
6.進入Assets.xcassets,點選右鍵選擇App Icons & Launch Images,進入下一級後選擇New iOS App Icon或New iOS Launch Image,建立icon和launch,并重命名和切片設定。
在一個工程管理多個應用-b
在一個工程管理多個應用-b
在一個工程管理多個應用-b
7.選擇TARGETS進入General,進入App Icons and Launch Images選擇上一步建立的關聯不同應用的icon和launch。
在一個工程管理多個應用-b
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";  

    }  
}      

選擇不同應用運作結果:

在一個工程管理多個應用-b
在一個工程管理多個應用-b
在一個工程管理多個應用-b

還有一個需求是同一個app但是名字和logo不同時期不一樣

我把它删掉,新建立一個,改個名順便浪一下。。。

在一個工程管理多個應用-b
在一個工程管理多個應用-b
在一個工程管理多個應用-b

4、建立新的target的info.plist檔案,複制原來的info.plist檔案以保持配置一緻。我把随之生成的那個plist檔案删掉了,可能是路徑不對,送出代碼時送出不上。

在一個工程管理多個應用-b
在一個工程管理多個應用-b

 5、對新建立的target進行修改配置,比如dispaly Name,bundle id,LaunchScreen,APPIcon等等

dispaly Name:在新建立的info.plist檔案中添加Bundle display name

bundleID就不用說了,直接在複制的target裡修改就好了

LaunchScreen:需要建立一個新的LaunchScreen,然後在複制的target裡選擇

在一個工程管理多個應用-b
在一個工程管理多個應用-b

APPIcon:

在一個工程管理多個應用-b

 6、如果工程使用了cocoapods,記得也要給新建立的Target安裝一份,很簡單,打開podfile,然後複制一份,改下target的名字在pod install就好了

在一個工程管理多個應用-b

7、如果需要修改一些代碼裡的配置,就用預處理吧

在一個工程管理多個應用-b

在你的全局配置類裡進行判斷,這裡面寫一些宏定義,比如百度推送的Key之類的

在一個工程管理多個應用-b

8、記得配置推送證書和開發釋出的配置檔案,畢竟這些都是以bundleID标記的,不配置的話無法真機測試,釋出以及收不到推送哦

至此,我的多環境配置就搞好了,當然我的兩個app的差別比較少,其他的一些配置同學自己去探索吧