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

由于項(xiàng)目需求,同一項(xiàng)目需要發(fā)兩個(gè)版本,兩個(gè)版本只有微小差異,特地研究了一下target,簡(jiǎn)單記錄一下,方便過(guò)后查看,如有疏漏,請(qǐng)網(wǎng)友指正。

  1. 在原來(lái)的target上右鍵,選擇duplicate,Xcode會(huì)復(fù)制一個(gè)名為A copy的target對(duì)象,同時(shí)生成一個(gè)A copy-info.plist和A copy的scheme
  2. 改名
    a)對(duì)A copy target改名,可以直接單擊target來(lái)修改,改成B
    b)A copy-info.plist,默認(rèn)生成在程序環(huán)境根目錄,也就是A.xcodeproj的同級(jí)目錄中,如果想放到里層(比如與A-info.plist放在同級(jí)目錄),可以先在Xcode刪除A copy-info.plist索引,然后拷貝文件到制定目錄中,然后更名為B-info.plist,在add到project中。在Project的Build Settings中,修改Info.plist File選項(xiàng)為B-info.plist的目錄(相對(duì)路徑),這樣就可以看到Info頁(yè)了(就是B-info.plist),接著修改ProductName和Bundle identifier,使之成為另一個(gè)app。Prefix Header的路徑,視具體需求而定是否要修改,如果兩個(gè)target可以公用同一個(gè)Prefix Header,那么就不需要修改這里的路徑
    c)修改scheme,在調(diào)試的Stop按鈕邊上,我們可以選擇本工程中所有的target來(lái)做編譯,如果不修改,在這里選擇出來(lái)的名字就是A copy,為了與新建的target統(tǒng)一起來(lái),同樣也要修改這里的名字。點(diǎn)擊scheme選擇區(qū),然后選Manager Scheme,找到A copy,然后改成你需要的名字,比如B

用duplicate的好處是,如果兩個(gè)target的相同點(diǎn)很多,用duplicate,就可以把相關(guān)的設(shè)置全部拷貝過(guò)來(lái),而不需要做過(guò)多的修改

生成一個(gè)新的target,一定會(huì)與原target有區(qū)別,這里可以定義預(yù)編譯宏,來(lái)區(qū)分兩個(gè)版本的不同代碼,預(yù)編譯宏可以在Build Settings中Preprocessor Macros定義,比如在我們新建的target B中定義預(yù)編譯宏MACRO,然后在代碼中通過(guò)

#if defined (MACRO)
//target  B需要執(zhí)行的代碼
#else
//target A需要執(zhí)行的代碼
#endif
來(lái)區(qū)分

其他:Build Phases(各target編譯所包含的內(nèi)容,需要注意的是,如果創(chuàng)建了target B后,再往A里面添加資源或文件,target B中不會(huì)自動(dòng)增加這些資源,需要手動(dòng)添加)
1.Compile Sources
需要編譯的代碼文件
2.Link Binary With Libraries
編譯所依賴(lài)的庫(kù)
3.Copy Bundle Resources
編譯需要的資源
每個(gè)target可以根據(jù)具體需要增減里面的內(nèi)容

本文并非原創(chuàng),借鑒自http://blog.csdn.net/yongyinmg/article/details/40985341

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容