因爲項目需求,同一項目須要發兩個版本,兩個版本只有小部分不一樣,特意研究了一下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能夠根據具體須要增減裏面的內容