點擊左側的工程名稱,右側會出現PROJECT和TARGETS,點擊你如今的target,假如叫A,右鍵彈出菜單中,選擇Duplicate,複製一個相同的target,複製的target通常叫A copy,A copy和A的設置(編譯條件、源文件、資源文件)徹底同樣,此時你能夠根據須要修改A copy的編譯條件和資源文件了;ios
一、A copy的名稱是否是顯得不夠專業?如今來修改一下:xcode
1)首先修改Xcode左上角的target名稱:app
點擊xcode左上角Run、Stop右邊的工程名稱,下拉框中選擇Manage Schemes,在彈出框中,點擊A copy那行,點擊一次、再點擊一次,就能夠修改A copy爲你想要的名字了,好比ALite;ide
2)修改xcode左下方Products下的A copy.app名稱:ui
點擊Targets下你剛纔更名後的ALite,點擊Bulid Setting,搜索Packaging下的Private Headers Folder Path,修改A copy.app/PrivateHeaders爲:ALite.app/PrivateHeaders;spa
二、修改Bundle Identifier和選擇不一樣的證書,讓app區分開來版本控制
1)新target須要的.plist文件調試
新建一個文件夾X,添加X到項目中,添加時選擇target爲ALite,不要選target A了,由於不是共用的;複製原來target的A-Info.plist到X,修改其名稱爲ALite-Info.plist,xcode中右鍵Add File To ...,選擇添加到target ALite中;code
2)點擊target: ALite ->Summary:提示你須要選擇plist文件,選擇1)中添加的ALite-Info.plist;orm
3)點擊target: ALite ->Summary:設置Bundle Idenfitier;
4)點擊target: ALite->Build Settings->Code Signing:選擇另外的證書;
三、修改程序名稱
通常說來,多個target的程序名稱不一樣,複製zh-Hans.lproj和en.lproj下的InfoPlist.strings文件到X,xcode中右鍵Add File To ...,選擇添加到target ALite中;而後修改InfoPlist.strings的內容:CFBundleDisplayName="程序名稱Lite";
四、2個target到如今就建立好了,你添加資源文件的時候,經過選擇添加的target來控制不一樣版本的內容;再說一下預編譯宏的事情:target->Build Setting,搜索:Preprocessor Macros,設置Debug和Release裏的預編譯宏內容,好比TARGET_VERSION_LITE=1表示lite版本(注意=先後不能右空格,有空格會編譯不過),程序中對不一樣版本這樣判斷:
#if TARGET_VERSION_LITE ==1
...
#elif TARGET_VERSION_LITE ==2
...
#endif
參考文章:
一、http://blog.163.com/lengfeng_04/blog/static/80470603201273111549529/
因爲項目需求,同一項目須要發兩個版本,兩個版本只有小部分不一樣,特意研究了一下target,小有了解,把建立target的通過記錄在案,方便事後查看,若有疏漏,請網友指正。
建立target有兩種方式,
1是經過新建target能夠經過File-->New-->Target,而後選擇其中一個模板來建立,app類型的target,能夠選擇Empty Application模板,不過新建的target有本身的AppDelegate和main,這點還沒研究好,如何與原來的AppDelegate和main複用
2.另外一種方法是經過對原有的target作duplicate,複製一份,目前只研究瞭如何經過duplicate來新建target,作下記錄。
假設原來的target名字爲A,咱們須要新建一個target B
1. 在原來的target上右鍵,選擇duplicate,Xcode會複製一個名爲A copy的target對象,同時生成一個A copy-info.plist和A copy的scheme
2. 更名
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://kan.weibo.com/con/3550176548481250?_from=text
http://stackoverflow.com/questions/1807377/xcode-multiple-targets-multiple-internationalized-names
真很差用一個標題來歸納這個東西。Xcode 4.2+ 在項目多語言包 xx.lproj 裏引入了一個叫 InfoPlist.strings 的文件,能夠對同一個 App 在不一樣系統語言下顯示不一樣的 Display Name。好比:
InfoPlist.strings (English) -
"CFBundleDisplayName" = "English Name";
InfoPlist.strings (Chinese) - "CFBundleDisplayName" = "中文";
在單 Target 下很容易作,多 Target 的時候就須要作一點額外的處理。在項目目錄下新建與 Target 同名的文件夾(同名是爲了方便區分),而後將 xx.lproj 文件夾 複製 到各個 Target 下面,目錄結構會是這個樣子:
./Target1/
en.lproj/InfoPlist.strings
zh-Hans.lproj/InfoPlist.strings
./Target2/
en.lproj/InfoPlist.strings
zh-Hans.lproj/InfoPlist.strings
複製後保持項目目錄下還有 xx.lproj 文件夾,裏面保留 Localizable.strings,由於多語言化通常是通用的,不必針對每個 Target 作多語言。複製後的 Target1/xx.lproj 下只有 InfoPlist.strings。而後添加到 Xcode 項目裏,打開 Xcode - Views - Utilities (Command+Option+0),在 Target Membership 下針對不一樣的 Target 把對應文件夾下的 InfoPlist.strings 對應鏈接起來,Done。