發(fā)時,在Xcode中添加多個targets進(jìn)行版本控制

在ios開發(fā)時,我們經(jīng)常會遇到對同一個app開發(fā)多個版本(Pro、Lite、Free)的情況,這里就涉及到xcode里通過添加多個targets來進(jìn)行版本控制的問題了,下面就簡單說明一下:

點擊左側(cè)的工程名稱,右側(cè)會出現(xiàn)PROJECT和TARGETS,點擊你現(xiàn)在的target,假如叫A,右鍵彈出菜單中,選擇Duplicate,復(fù)制一個相同的target,復(fù)制的target一般叫A copy,A copy和A的設(shè)置(編譯條件、源文件、資源文件)完全一樣,此時你可以根據(jù)需要修改A copy的編譯條件和資源文件了;

1、A copy的名稱是不是顯得不夠?qū)I(yè)?現(xiàn)在來修改一下:

1)首先修改Xcode左上角的target名稱:

點擊xcode左上角Run、Stop右邊的工程名稱,下拉框中選擇Manage Schemes,在彈出框中,點擊A copy那行,點擊一次、再點擊一次,就可以修改A copy為你想要的名字了,比如ALite;

2)修改xcode左下方Products下的A copy.app名稱:

點擊Targets下你剛才改名后的ALite,點擊Bulid Setting,搜索Packaging下的Private Headers Folder Path,修改A copy.app/PrivateHeaders為:ALite.app/PrivateHeaders;

2、修改Bundle Identifier和選擇不同的證書,讓app區(qū)分開來

1)新target需要的.plist文件

新建一個文件夾X,添加X到項目中,添加時選擇target為ALite,不要選target A了,因為不是共用的;復(fù)制原來target的A-Info.plist到X,修改其名稱為ALite-Info.plist,xcode中右鍵Add File To ...,選擇添加到target ALite中;

2)點擊target: ALite ->Summary:提示你需要選擇plist文件,選擇1)中添加的ALite-Info.plist;

3)點擊target: ALite ->Summary:設(shè)置Bundle Idenfitier;

4)點擊target: ALite->Build Settings->Code Signing:選擇另外的證書;

3、修改程序名稱

一般說來,多個target的程序名稱不同,復(fù)制zh-Hans.lproj和en.lproj下的InfoPlist.strings文件到X,xcode中右鍵Add File To ...,選擇添加到target ALite中;然后修改InfoPlist.strings的內(nèi)容:CFBundleDisplayName="程序名稱Lite";

4、2個target到現(xiàn)在就創(chuàng)建好了,你添加資源文件的時候,通過選擇添加的target來控制不同版本的內(nèi)容;再說一下預(yù)編譯宏的事情:target->Build Setting,搜索:Preprocessor Macros,設(shè)置Debug和Release里的預(yù)編譯宏內(nèi)容,比如TARGET_VERSION_LITE=1表示lite版本(注意=前后不能右空格,有空格會編譯不過),程序中對不同版本這樣判斷:

#ifTARGET_VERSION_LITE==1

...

#elifTARGET_VERSION_LITE==2

...

#endif

參考文章:

1、http://blog.163.com/lengfeng_04/blog/static/80470603201273111549529/

XCode 同一Project創(chuàng)建多個target

由于項目需求,同一項目需要發(fā)兩個版本,兩個版本只有小部分不同,特地研究了一下target,小有了解,把創(chuàng)建target的經(jīng)過記錄在案,方便過后查看,如有疏漏,請網(wǎng)友指正。

創(chuàng)建target有兩種方式,

1是通過新建target可以通過File-->New-->Target,然后選擇其中一個模板來創(chuàng)建,app類型的target,可以選擇Empty Application模板,不過新建的target有自己的AppDelegate和main,這點還沒研究好,如何與原來的AppDelegate和main復(fù)用

2.另一種方法是通過對原有的target做duplicate,復(fù)制一份,目前只研究了如何通過duplicate來新建target,做下記錄。

假設(shè)原來的target名字為A,我們需要新建一個target B

1. 在原來的target上右鍵,選擇duplicate,Xcode會復(fù)制一個名為A copy的target對象,同時生成一個A copy-info.plist和A copy的scheme

2. 改名

a)對A copy target改名,可以直接單擊target來修改,改成B

b)A copy-info.plist,默認(rèn)生成在程序環(huán)境根目錄,也就是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,在調(diào)試的Stop按鈕邊上,我們可以選擇本工程中所有的target來做編譯,如果不修改,在這里選擇出來的名字就是A copy,為了與新建的target統(tǒng)一起來,同樣也要修改這里的名字。點擊scheme選擇區(qū),然后選Manager Scheme,找到A copy,然后改成你需要的名字,比如B

用duplicate的好處是,如果兩個target的相同點很多,用duplicate,就可以把相關(guān)的設(shè)置全部拷貝過來,而不需要做過多的修改

生成一個新的target,一定會與原target有區(qū)別,這里可以定義預(yù)編譯宏,來區(qū)分兩個版本的不同代碼,預(yù)編譯宏可以在Build Settings中Preprocessor Macros定義,比如在我們新建的target B中定義預(yù)編譯宏MACRO,然后在代碼中通過

#if defined (MACRO)

//targetB需要執(zhí)行的代碼

#else

//target A需要執(zhí)行的代碼

#endif

來區(qū)分

其他:Build Phases(各target編譯所包含的內(nèi)容,需要注意的是,如果創(chuàng)建了target B后,再往A里面添加資源或文件,target B中不會自動增加這些資源,需要手動添加)

1.Compile Sources

需要編譯的代碼文件

2.Link Binary With Libraries

編譯所依賴的庫

3.Copy Bundle Resources

編譯需要的資源

每個target可以根據(jù)具體需要增減里面的內(nèi)容

2、http://kan.weibo.com/con/3550176548481250?_from=text

http://stackoverflow.com/questions/1807377/xcode-multiple-targets-multiple-internationalized-names

同一份代碼多個Target,在支持多語言下分別設(shè)置其名稱的方法

真不好用一個標(biāo)題來概括這個東西。Xcode 4.2+ 在項目多語言包 xx.lproj 里引入了一個叫 InfoPlist.strings 的文件,可以對同一個 App 在不同系統(tǒng)語言下顯示不同的 Display Name。比如:

InfoPlist.strings (English) -

"CFBundleDisplayName" = "English Name";

InfoPlist.strings (Chinese) - "CFBundleDisplayName" = "中文";

在單 Target 下很容易做,多 Target 的時候就需要做一點額外的處理。在項目目錄下新建與 Target 同名的文件夾(同名是為了方便區(qū)分),然后將 xx.lproj 文件夾 復(fù)制 到各個 Target 下面,目錄結(jié)構(gòu)會是這個樣子:

./Target1/

en.lproj/InfoPlist.strings

zh-Hans.lproj/InfoPlist.strings

./Target2/

en.lproj/InfoPlist.strings

zh-Hans.lproj/InfoPlist.strings

復(fù)制后保持項目目錄下還有 xx.lproj 文件夾,里面保留 Localizable.strings,因為多語言化一般是通用的,沒必要針對每一個 Target 做多語言。復(fù)制后的 Target1/xx.lproj 下只有 InfoPlist.strings。然后添加到 Xcode 項目里,打開 Xcode - Views - Utilities (Command+Option+0),在 Target Membership 下針對不同的 Target 把對應(yīng)文件夾下的 InfoPlist.strings 對應(yīng)連接起來,Done。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內(nèi)容