在實際開發(fā)中希柿,由于公司的業(yè)務(wù)性質(zhì)耻矮,可能一個產(chǎn)品下會繁衍出來許多其他類似的APP,其功能可能也和本來的應(yīng)用八九不離十件蚕,他們的差別可能就在于某幾個頁面UI的差異,或者僅僅是項目icon圖標(biāo)的不同产禾,但是如果每個APP都是一個項目排作,后期維護(hù)成本將會成倍增長,這個時候我們就可以采用Target的方式來在一個項目里面創(chuàng)建多個target,這里就描述下Xcode里通過添加多個targets來進(jìn)行版本控制的步驟:
第一步:首先新建一個工程,復(fù)制一個target
第二步:修改復(fù)制出來的target的名字以便區(qū)分
第三步:接下來整理一下目錄結(jié)構(gòu)亚情,目前我們看到的目錄結(jié)構(gòu)是這樣的妄痪,如圖003所示,現(xiàn)在調(diào)整為圖004的目錄結(jié)構(gòu):
調(diào)整之后楞件,可能會報如下的錯誤
這里是因為plist文件更換了系統(tǒng)的默認(rèn)位置,接著需要按照第四步來操作衫生。
第四步:設(shè)置Target與plist文件對應(yīng)
切換到Target目錄下,選擇其中一個Target之后并選擇general土浸,然后可以看到每個Target的右側(cè)都有對應(yīng)的choose info.plist file選項罪针,點擊可以選擇與Target對應(yīng)的plist文件。這也就相當(dāng)于不同的Target項目對應(yīng)了不同的plist配置黄伊。
再次build泪酱,就不會有error了.
【注意】:我們在移動文件的時候可能需要重新引用文件到工程中,此時add文件的時候一定要注意選擇Target还最,如果是共用文件一定要勾選對應(yīng)的Target西篓,類似AppDelegate這樣文件的操作如下:
Tips:注意,這里為了區(qū)分不同版本憋活,所以最好分文件夾區(qū)分開來岂津。
- plist文件區(qū)分
- Assets.xcassets文件區(qū)分,
Assets.xcassets文件的新建方法詳見iOS中創(chuàng)建多個Assets.xcassets文件.
第五步:此時悦即,工程中就有兩個target了吮成,分別設(shè)置兩個target的icon圖標(biāo)
第六步:為每個Target設(shè)置Display Name橱乱,Bundle Identifier等信息
點擊Target->選擇General,我們分別設(shè)置不同項目的名稱和BundleID信息
第七步:同一份代碼區(qū)分不同Target的操作
使用多Target是為了共用一部分代碼粱甫,但是有些共用的文件在不同的Target下是有細(xì)微不同的泳叠,那么我們在具體實現(xiàn)的時候就需要作出區(qū)分。這里解決的方法是針對不同的Target定義宏茶宵。
首先選擇一個Target危纫,如:TargetDemo-customer,依次選擇Build Settings ->搜索PreprocessorMacros, 在找到PreprocessorMacros之后乌庶,我們分別在Debug和Release中設(shè)置TargetType=1如下圖進(jìn)行設(shè)置:
第八步:分別選擇Xcode左上角不同的Target運行
這里种蝶,可以再APPdelegate里面加上驗證的代碼,進(jìn)行驗證瞒大,看是否成功螃征。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
switch (TargetType) {
case 1:
NSLog(@"TargetCustomer-用戶版");
break;
case 2:
NSLog(@"TargetDoctor-醫(yī)生版");
break;
default:
break;
}
return YES;
}
番外:解決使用Cocoapods的問題
因為存在多個Target,我們需要區(qū)別的設(shè)置不同target需要的第三方庫透敌,
這里可能出現(xiàn)的問題是如果有很多類似AFNetworking這樣的被多個Target需要的類庫盯滚,我們在刪除和增加的時候就會頻繁的操作而且會代碼冗余。所以酗电,建議如下優(yōu)化魄藕。
此時,設(shè)置多個target已經(jīng)完成撵术。本文暫未設(shè)計到XIB的相關(guān)操作泼疑,因為寫的是demo,之所以并未設(shè)計荷荤,后序也將陸續(xù)補充上來退渗,哈哈 ,當(dāng)然各位有好的方法蕴纳,也可以分享與我会油,一起進(jìn)步。