XCode 同一Project建立多個target

因爲項目需求,同一項目須要發兩個版本,兩個版本只有小部分不一樣,特意研究了一下target,小有了解,把建立target的通過記錄在案,方便事後查看,若有疏漏,請網友指正。xcode


建立target有兩種方式,app

1是經過新建target能夠經過File-->New-->Target,而後選擇其中一個模板來建立,app類型的target,能夠選擇Empty Application模板,不過新建的target有本身的AppDelegate和main,這點還沒研究好,如何與原來的AppDelegate和main複用ide

2.另外一種方法是經過對原有的target作duplicate,複製一份,目前只研究瞭如何經過duplicate來新建target,作下記錄。ui

假設原來的target名字爲A,咱們須要新建一個target Bspa


1. 在原來的target上右鍵,選擇duplicate,Xcode會複製一個名爲A copy的target對象,同時生成一個A copy-info.plist和A copy的scheme調試

2. 更名code

a)對A copy target更名,能夠直接單擊target來修改,改爲Borm

b)A copy-info.plist,默認生成在程序環境根目錄,也就是A.xcodeproj的同級目錄中,若是想放到裏層(好比與A-info.plist放在同級目錄),能夠先在Xcode刪除A copy-info.plist索引,而後拷貝文件到制定目錄中,而後改名爲B-info.plist,在add到project中。在Project的Build Settings中,修改Info.plist File選項爲B-info.plist的目錄(相對路徑),這樣就能夠看到Info頁了(就是B-info.plist),接着修改ProductName和Bundle identifier,使之成爲另外一個app。Prefix Header的路徑,視具體需求而定是否要修改,若是兩個target能夠公用同一個Prefix Header,那麼就不須要修改這裏的路徑對象

c)修改scheme,在調試的Stop按鈕邊上,咱們能夠選擇本工程中全部的target來作編譯,若是不修改,在這裏選擇出來的名字就是A copy,爲了與新建的target統一塊兒來,一樣也要修改這裏的名字。點擊scheme選擇區,而後選Manager Scheme,找到A copy,而後改爲你須要的名字,好比B索引


用duplicate的好處是,若是兩個target的相同點不少,用duplicate,就能夠把相關的設置所有拷貝過來,而不須要作過多的修改


生成一個新的target,必定會與原target有區別,這裏能夠定義預編譯宏,來區分兩個版本的不一樣代碼,預編譯宏能夠在Build Settings中Preprocessor Macros定義,好比在咱們新建的target B中定義預編譯宏MACRO,而後在代碼中經過

#if defined (MACRO)

//target  B須要執行的代碼

#else

//target A須要執行的代碼

#endif

來區分


其餘:Build Phases(各target編譯所包含的內容,須要注意的是,若是建立了target B後,再往A裏面添加資源或文件,target B中不會自動增長這些資源,須要手動添加)

1.Compile Sources

須要編譯的代碼文件

2.Link Binary With Libraries

編譯所依賴的庫

3.Copy Bundle Resources

編譯須要的資源

每一個target能夠根據具體須要增減裏面的內容

相關文章
相關標籤/搜索