應(yīng)用場(chǎng)景
場(chǎng)景1:
同一項(xiàng)目,一般會(huì)分不同環(huán)境:開發(fā)環(huán)境、測(cè)試環(huán)境、正式(生產(chǎn))環(huán)境。
這就涉及到一個(gè)請(qǐng)求接口的區(qū)別,一般我們可能會(huì)定義多個(gè),每次切換環(huán)境,就用代碼注釋解決,的確不是太方便。
其次一個(gè),就是某一類特殊項(xiàng)目,主功能都一樣,可能就是只需要更換icon圖標(biāo)、bundleID等等信息,需要發(fā)布多款A(yù)PP,這種情況下,你如果每次發(fā)布一個(gè)就手動(dòng)替換這些信息,真的要哭了。。。
場(chǎng)景2:
就是同一產(chǎn)品會(huì)有兩種客戶端構(gòu)成,現(xiàn)在有很多這種場(chǎng)景下的項(xiàng)目,類似滴滴的司機(jī)端和乘客端,教學(xué)項(xiàng)目的學(xué)生端和教師端等等。。
這種項(xiàng)目,會(huì)生成2個(gè)App,但其中很多東西可以共用,因此在一個(gè)項(xiàng)目里創(chuàng)建管理,會(huì)更好更方便。
創(chuàng)建方法
方法一(新建target):
對(duì)于一個(gè)項(xiàng)目?jī)蓚€(gè)用戶端的情況,從開發(fā)初期就需要管理兩個(gè)target,這種適合新建target的方式,xcode 的File -> New -> Target,選擇Application中你需要的模板,然后命名創(chuàng)建
xcode會(huì)自動(dòng)生成新的target對(duì)應(yīng)文件夾,以及對(duì)應(yīng)的一個(gè)新app的基礎(chǔ)文件,對(duì)應(yīng)的scheme也自動(dòng)配置好,可以直接運(yùn)行,如圖
屆時(shí),你已經(jīng)可以同時(shí)進(jìn)行兩個(gè)app的開發(fā)
方法二(復(fù)制target):
對(duì)于一個(gè)項(xiàng)目,需要多個(gè)開發(fā)測(cè)試發(fā)布環(huán)境進(jìn)行管理,或者如上所說只是appicon和bundleID等不同,可以直接復(fù)制當(dāng)前已開發(fā)完成的target,如圖
xCode會(huì)生成當(dāng)前target的copy和一個(gè)完全copy的info.plist文件。
新的target的配置工作
設(shè)置步驟:
1、創(chuàng)建Target
2、修改Target名稱、Scheme名稱
3、配置Info.plist
4、橋接文件設(shè)置
5、宏定義(Preprocessor Macros)設(shè)置
6、Assets。xcassets的設(shè)置(app圖片、launch啟動(dòng)頁)
修改Target名稱、Scheme名稱:
直接上圖:

配置Info.plist
配置info.plist之前,需要對(duì)xcode默認(rèn)生成的plist文件重命名(項(xiàng)目名+info),配置info.plist文件有兩個(gè)方法:

新target的bundleID,build號(hào),appIcon等等配置可一同完成
配置橋接文件:
記得pch文件吧,根據(jù)兩個(gè)項(xiàng)目的差異性決定是否公用一個(gè)pch文件或者創(chuàng)建新的pch文件
宏定義(Preprocessor Macros)設(shè)置:
兩個(gè)target開發(fā)有一種情況很常見,同一個(gè)類文件可能小部分代碼對(duì)于兩個(gè)target處理方式有所不同,這時(shí)候需要定義一個(gè)宏去進(jìn)行target的區(qū)分;
if (pro_target == 1) { //新的target
}else{
}
Assets.xcassets的設(shè)置
兩個(gè)target如果是類似于同一個(gè)項(xiàng)目,不同的環(huán)境,那就是用一個(gè)Assets.xcassets文件就夠了,Target Membership勾選兩個(gè)target

兩個(gè)target的pod管理
pod是作為.a靜態(tài)庫文件進(jìn)行應(yīng)用的,podfile文件的target指定的誰,創(chuàng)建的.a文件就是libPods-target名稱.a
1、兩個(gè)target的pod庫一樣,就可以用一個(gè)target管理pod, 兩個(gè)target的Build Phases的library Binary導(dǎo)入同一個(gè).a 文件libPods-qmp_ios_v2.0.a
target 'qmp_ios_v2.0' do
pod 'AFNetworking', '~> 3.1.0'
pod 'MJRefresh', '~> 3.1.0'
pod 'SDWebImage'
end
2、如果兩個(gè)target所用的庫不一樣,或者不盡一樣,可以使用下面這種優(yōu)雅的方法,會(huì)生成兩個(gè)pod的.a文件,libPods-qmp_ios_v2.0.a和libPods-qmp_ios_app.a,各自用各自的
def commonPod
pod 'AFNetworking', '~> 3.1.0'
pod 'MJRefresh', '~> 3.1.0'
pod 'SDWebImage'
end
target 'qmp_ios_v2.0' do
commonPod
pod 'JPush'
end
target 'qmp_ios_app' do
commonPod
pod 'YYText'
end