一個(gè)項(xiàng)目多個(gè)Target

應(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)行,如圖
新的target對(duì)應(yīng)的文件夾和文件

屆時(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,如圖
duplicate 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名稱:

直接上圖:
target名稱直接編輯

manager schemes:
project的manager scheme
配置Info.plist

配置info.plist之前,需要對(duì)xcode默認(rèn)生成的plist文件重命名(項(xiàng)目名+info),配置info.plist文件有兩個(gè)方法:
直接在build settings中修改文件路徑

直接選擇配置文件

新target的bundleID,build號(hào),appIcon等等配置可一同完成

配置橋接文件:

記得pch文件吧,根據(jù)兩個(gè)項(xiàng)目的差異性決定是否公用一個(gè)pch文件或者創(chuàng)建新的pch文件
pch文件配置文件路徑
宏定義(Preprocessor Macros)設(shè)置:

兩個(gè)target開發(fā)有一種情況很常見,同一個(gè)類文件可能小部分代碼對(duì)于兩個(gè)target處理方式有所不同,這時(shí)候需要定義一個(gè)宏去進(jìn)行target的區(qū)分;
preprocessor macro定義全局的宏
    if (pro_target == 1) {  //新的target
        
    }else{
        
    }    
Assets.xcassets的設(shè)置

兩個(gè)target如果是類似于同一個(gè)項(xiàng)目,不同的環(huán)境,那就是用一個(gè)Assets.xcassets文件就夠了,Target Membership勾選兩個(gè)target
Target Membership

是單純的要上線的兩個(gè)app,可以新建一個(gè)Assets.xcassets,新的target需要的圖片用此Assets.xcassets管理
新建Assets.xcassets文件

兩個(gè)target的pod管理

pod是作為.a靜態(tài)庫文件進(jìn)行應(yīng)用的,podfile文件的target指定的誰,創(chuàng)建的.a文件就是libPods-target名稱.a
pod

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容