XCode之多個(gè)Target

優(yōu)點(diǎn):一鍵切換不同環(huán)境

例如:Dev、UAT、Dis,每一個(gè)環(huán)境都可以對(duì)應(yīng)自己的應(yīng)用名稱、AppIcon、LaunchImage、橋接文件等。從而我們可以設(shè)置每一個(gè)環(huán)境所對(duì)應(yīng)的業(yè)務(wù)邏輯,多個(gè)Target也適用于多個(gè)App存在較小的差異,每個(gè)Target對(duì)應(yīng)一個(gè)App

目錄

1.如何創(chuàng)建多個(gè)Target?
2.如何通過多個(gè)Target分別對(duì)應(yīng)自己的AppIcon、LaunchImage等
3.如何在代碼中區(qū)分Target進(jìn)而使用不同的業(yè)務(wù)邏輯?比如不同環(huán)境不同Host?

一、如何創(chuàng)建多個(gè)Target?
  • 方式一:File->New->Target->選擇模版創(chuàng)建(注意:新建一份這種方式創(chuàng)建出來的會(huì)擁有自己的AppDelegate和main,方式二則沒有)
  • 方式二:Project->Target右鍵Duplicate Only(注意:該方式優(yōu)點(diǎn)在于可以直接復(fù)制原有Target的設(shè)置內(nèi)容,如果兩個(gè)Target相同點(diǎn)很多的話,使用該方式最優(yōu))
    拷貝出來的Target需要進(jìn)行修改名稱,修改名稱步驟如下:
    1.Project->修改對(duì)應(yīng)Target名稱
    2.修改Scheme對(duì)應(yīng)的名稱
    3.修改Plist文件名稱->Show In Finder修改文件名稱->Project下選中Target,General下的Identity的Choose Info.plist File或者Build Settings下設(shè)置Info.plist File路徑為$(SRCROOT)/MoreTargetCopy/MoreTargetCopyInfo.plist。接下來你就可以修改對(duì)應(yīng)的Bundle Identifier、應(yīng)用名稱、版本號(hào)等!
    創(chuàng)建Target的兩種方式

二、如何通過多個(gè)Target分別對(duì)應(yīng)自己的AppIcon、LaunchImage

  • 橋接文件的設(shè)置:
    橋接文件的設(shè)置,只需選中對(duì)應(yīng)的Target并設(shè)置對(duì)應(yīng)的Prefix Header即可(路徑)

  • 設(shè)置App Icon和Launch Image
    1.新建出來的Target:在對(duì)應(yīng)的.xcassets導(dǎo)入圖即可
    2.拷貝出來的Target:原本的又一個(gè)AppIcon,再新建一個(gè)AppIcon,然后去對(duì)應(yīng)Target中的General選擇要展示的AppIcon即可

  • 修改文件作用域:
    如下圖,左側(cè)選中要修改的文件,右側(cè)選中對(duì)應(yīng)的Target即可,勾選哪一個(gè)Target就表示該文件將作用于選中的Target。

    修改文件所屬Target

  • 修改對(duì)應(yīng)Target的源文件和資源文件:
    選中Project,點(diǎn)擊Build phase,找到相應(yīng)文件添加或刪除(Compile Source是源文件,Copy Bundle Resources是資源文件,有用的添加,沒用的刪除即可)

    添加、刪除源文件和資源文件

三、如何在代碼中區(qū)分Target進(jìn)而使用不同的業(yè)務(wù)邏輯?比如不同環(huán)境不同Host?
  • Preprocessor macros宏定義的使用
    當(dāng)多個(gè)Target使用同一個(gè)文件時(shí),使用宏定義區(qū)分是哪個(gè)Target,設(shè)置步驟就是選中對(duì)應(yīng)Target->Build Settings->搜索Preprocessor macros->分別對(duì)Debug和Release設(shè)置,設(shè)置好后即可以用,如下圖
    設(shè)置Preprocessor macros
if (APPTYPE == 0) {
        NSLog(@"Targe1:這是第%d個(gè)Target",APPTYPE);
    } else if (APPTYPE == 1) {
        NSLog(@"Targe1:這是第%d個(gè)Target",APPTYPE);
    } else if (APPTYPE == 2) {
        NSLog(@"Targe1:這是第%d個(gè)Target",APPTYPE);
    } else {
        NSLog(@"Targe1:這是第%d個(gè)Target",APPTYPE);
    }

#if APPTYPE == 0
#import ""
#dlif APPTYPE == 2
#import ""
#else
#endif

#if XHDEBUG
#elif XHRELEASE
#else
#endif
注意事項(xiàng)

1.不共用的文件就設(shè)置對(duì)應(yīng)自己的Target,共用的文件區(qū)分Target就用宏區(qū)
2.你可以使用多個(gè)Target配置不同環(huán)境,證書也可以對(duì)應(yīng)配置哦

最后編輯于
?著作權(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)容

  • 背景介紹 開發(fā)過程中,我們會(huì)在內(nèi)網(wǎng)搭建一個(gè)測(cè)試服務(wù)器,開發(fā)、測(cè)試都是在內(nèi)網(wǎng)進(jìn)行的。這樣產(chǎn)生臟數(shù)據(jù)不會(huì)影響外網(wǎng)的服務(wù)...
    ShanJiJi閱讀 14,868評(píng)論 8 29
  • 需求:當(dāng)兩個(gè)甚至兩個(gè)以上的app存在小差異時(shí),可以在一個(gè)工程(project)創(chuàng)建多個(gè)target每個(gè)target...
    寸光片靜閱讀 30,694評(píng)論 21 70
  • 我們?cè)趇OS開發(fā)中可能會(huì)遇到同時(shí)開發(fā)多個(gè)類似項(xiàng)目的情況。這些項(xiàng)目大同小異,有諸多代碼可以共用,如果每個(gè)項(xiàng)目都分別開...
    梧雨北辰閱讀 3,227評(píng)論 0 20
  • 我們?cè)趇OS開發(fā)中可能會(huì)遇到同時(shí)開發(fā)多個(gè)類似項(xiàng)目的情況。這些項(xiàng)目大同小異,有諸多代碼可以共用,如果每個(gè)項(xiàng)目都分別開...
    FlowYourHeart閱讀 923評(píng)論 0 4
  • 在項(xiàng)目開發(fā)中,難免會(huì)遇到要同時(shí)維護(hù)多個(gè)app的情況,而如果這幾個(gè)app有很大一部分的重復(fù)內(nèi)容,其最好的解決方式,就...
    流火緋瞳閱讀 8,585評(píng)論 0 17

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