由于項(xiàng)目需求,同一項(xiàng)目需要發(fā)兩個(gè)版本,兩個(gè)版本只有微小差異,特地研究了一下target,簡(jiǎn)單記錄一下,方便過(guò)后查看,如有疏漏,請(qǐng)網(wǎng)友指正。
- 在原來(lái)的target上右鍵,選擇duplicate,Xcode會(huì)復(fù)制一個(gè)名為A copy的target對(duì)象,同時(shí)生成一個(gè)A copy-info.plist和A copy的scheme
- 改名
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