應用場景
場景1:
同一項目盒件,一般會分不同環(huán)境:開發(fā)環(huán)境、測試環(huán)境舱禽、正式(生產)環(huán)境炒刁。
這就涉及到一個請求接口的區(qū)別,一般我們可能會定義多個呢蔫,每次切換環(huán)境切心,就用代碼注釋解決,的確不是太方便片吊。
其次一個绽昏,就是某一類特殊項目,主功能都一樣俏脊,可能就是只需要更換icon圖標全谤、bundleID等等信息,需要發(fā)布多款APP爷贫,這種情況下认然,你如果每次發(fā)布一個就手動替換這些信息补憾,真的要哭了。卷员。盈匾。
場景2:
就是同一產品會有兩種客戶端構成,現(xiàn)在有很多這種場景下的項目毕骡,類似滴滴的司機端和乘客端削饵,教學項目的學生端和教師端等等。未巫。
這種項目窿撬,會生成2個App,但其中很多東西可以共用叙凡,因此在一個項目里創(chuàng)建管理劈伴,會更好更方便。
創(chuàng)建方法
方法一(新建target):
對于一個項目兩個用戶端的情況握爷,從開發(fā)初期就需要管理兩個target跛璧,這種適合新建target的方式,xcode 的File -> New -> Target新啼,選擇Application中你需要的模板赡模,然后命名創(chuàng)建
xcode會自動生成新的target對應文件夾,以及對應的一個新app的基礎文件师抄,對應的scheme也自動配置好漓柑,可以直接運行,如圖屆時叨吮,你已經可以同時進行兩個app的開發(fā)
方法二(復制target):
對于一個項目辆布,需要多個開發(fā)測試發(fā)布環(huán)境進行管理,或者如上所說只是appicon和bundleID等不同茶鉴,可以直接復制當前已開發(fā)完成的target锋玲,如圖xCode會生成當前target的copy和一個完全copy的info.plist文件。
新的target的配置工作
設置步驟:
1涵叮、創(chuàng)建Target
2惭蹂、修改Target名稱、Scheme名稱
3割粮、配置Info.plist
4盾碗、橋接文件設置
5、宏定義(Preprocessor Macros)設置
6舀瓢、Assets廷雅。xcassets的設置(app圖片、launch啟動頁)
修改Target名稱、Scheme名稱:
直接上圖:配置Info.plist
配置info.plist之前航缀,需要對xcode默認生成的plist文件重命名(項目名+info)商架,配置info.plist文件有兩個方法:新target的bundleID,build號芥玉,appIcon等等配置可一同完成
配置橋接文件:
記得pch文件吧蛇摸,根據(jù)兩個項目的差異性決定是否公用一個pch文件或者創(chuàng)建新的pch文件宏定義(Preprocessor Macros)設置:
兩個target開發(fā)有一種情況很常見,同一個類文件可能小部分代碼對于兩個target處理方式有所不同灿巧,這時候需要定義一個宏去進行target的區(qū)分皇型; if (pro_target == 1) { //新的target
}else{
}
Assets.xcassets的設置
兩個target如果是類似于同一個項目,不同的環(huán)境砸烦,那就是用一個Assets.xcassets文件就夠了,Target Membership勾選兩個target兩個target的pod管理
pod是作為.a靜態(tài)庫文件進行應用的,podfile文件的target指定的誰家破,創(chuàng)建的.a文件就是libPods-target名稱.a1颜说、兩個target的pod庫一樣,就可以用一個target管理pod, 兩個target的Build Phases的library Binary導入同一個.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汰聋、如果兩個target所用的庫不一樣门粪,或者不盡一樣,可以使用下面這種優(yōu)雅的方法烹困,會生成兩個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