由于項目需求,同一項目需要發兩個版本,兩個版本只有微小差異,特地研究了一下target,簡單記錄一下,方便過后查看,如有疏漏,請網友指正。
- 在原來的target上右鍵,選擇duplicate,Xcode會復制一個名為A copy的target對象,同時生成一個A copy-info.plist和A copy的scheme
- 改名
a)對A copy target改名,可以直接單擊target來修改,改成B
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可以根據具體需要增減里面的內容
本文并非原創,借鑒自http://blog.csdn.net/yongyinmg/article/details/40985341