背景介紹
開發(fā)過程中,我們會(huì)在內(nèi)網(wǎng)搭建一個(gè)測(cè)試服務(wù)器,開發(fā)、測(cè)試都是在內(nèi)網(wǎng)進(jìn)行的。這樣產(chǎn)生臟數(shù)據(jù)不會(huì)影響外網(wǎng)的服務(wù)器。外網(wǎng)服務(wù)器只有最后發(fā)布時(shí)才會(huì)進(jìn)行一些必要的測(cè)試。
還有就是要對(duì)同一份代碼生成不同的product,比如一個(gè)游戲有100關(guān),要生成一個(gè)免費(fèi)版(只有20關(guān)),可以新建一個(gè)Target,設(shè)置參數(shù)就可以實(shí)現(xiàn),如果通過代碼來控制就太麻煩了。
怎么辦
針對(duì)第一個(gè)問題,在代碼級(jí)別,對(duì)這個(gè)URL的選擇,可以使用簡(jiǎn)單一點(diǎn)的宏來判斷。這樣所有的請(qǐng)求只要都調(diào)用這個(gè)宏,就可以做到控制。但是這樣寫不少限制,那就是很多工程屬性不能設(shè)置,比如不能改變Bundle ID,不能改啟動(dòng)圖片,不能改應(yīng)用名稱等。這樣的測(cè)試版和正式版不能同時(shí)安裝到同一部手機(jī)上,這樣測(cè)試起來很麻煩,很多情況下我們需要對(duì)比正式版和測(cè)試版。
#ifndefDEBUG#defineBaseURL @"192.168.1.23"http:// 內(nèi)網(wǎng)服務(wù)器#else#defineBaseURL @"112.23.12.34"http:// 外網(wǎng)服務(wù)器(瞎寫的)#endif
如果對(duì)于上一種方式不滿,接下來可以使用更加強(qiáng)大的Targets
Targets 可以使用更多高級(jí)功能,比如一個(gè)Target對(duì)應(yīng)一個(gè)Info.plist
而Info.plist中可以修改的屬性太多了,什么啟動(dòng)圖片,Bundle Id、MainInterface等小改動(dòng)
大的改動(dòng),可以修改Bulid Phases,設(shè)置文件的編譯,靜態(tài)庫(kù)的鏈接
還可以修改Bulid Settings 設(shè)置工程的編譯、鏈接屬性
選擇不同的證書,開發(fā)環(huán)境就開發(fā)證書,發(fā)布時(shí)就選發(fā)布證書
第二個(gè)問題也可以用Targets來實(shí)現(xiàn),當(dāng)然通過代碼也可以控制,但是代碼的話擴(kuò)展性太差。
Targets操作
復(fù)制Targets
新建Xcode時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè)默認(rèn)的Target,我們?nèi)绻约盒略龅脑?,可以通過復(fù)制的方式快捷創(chuàng)建第二個(gè)。
復(fù)制會(huì)將已有的資源以及工程屬性copy一份,在這個(gè)基礎(chǔ)上進(jìn)行更改即可。

可以看到工程目錄中多了一個(gè)文件Xcode的開發(fā)版 copy-Info.plist,就是這個(gè)新文件,所有的配置都可以在這里進(jìn)行配置
創(chuàng)建全新Targets
可用通過菜單Editor->Add Target->Application->Singe View Application->Product Name
來新增

Targets之間異同
一個(gè)Target包含了Copy Bundle Resources, Compile Sources, Link Binary With Libraries、info.plist等
Copy Bundle Resources 是指生成的product的.app內(nèi)將包含哪些資源文件
Compile Sources 是指將有哪些源代碼被編譯
Link Binary With Libraries 是指編譯過程中會(huì)引用哪些庫(kù)文件
最關(guān)鍵的就是info.plist文件,iPhone項(xiàng)目的很多關(guān)鍵性內(nèi)容, 比如程序名稱, 最終生成product的全局唯一id等都可用info.plist來設(shè)置。
不同的target還可以定義完整的差異化的編譯設(shè)置, 從簡(jiǎn)單的調(diào)整優(yōu)化選項(xiàng), 到增加條件編譯所使用的編譯條件, 以至于所使用的base SDK都可以差異化指定
注意事項(xiàng)
新增文件、資源等,如果有多個(gè)Target,添加新文件時(shí)要注意勾選多個(gè)Target

修改新文件Xcode的開發(fā)版 copy-Info.plist
首先,修改Target名稱
然后,修改plist名稱
最后,修改schemes

設(shè)置預(yù)編譯宏
Target 開發(fā)版->Build Settings然后搜索Preprocessor Macros然后增加宏

測(cè)試一下,可用通過預(yù)編譯宏來區(qū)別代碼
if(DevelopMent ==1) {// 測(cè)試一下,選擇不同的Schemes就可以看到輸出不同NSLog(@"DevelopMent=1");}else{NSLog(@"DevelopMent=0");}
修改Bundle Identifier
和選擇不同的證書,讓app區(qū)分開來點(diǎn)擊target: Xcode的測(cè)試版->Summary:提示你需要選擇plist文件,選擇1)中添加的Xcode的測(cè)試版.plist;
點(diǎn)擊target: Xcode的開發(fā)版->Summary:設(shè)置Bundle Idenfitier;
點(diǎn)擊target: Xcode的測(cè)試版->Build Settings->Code Signing:選擇另外的證書;
結(jié)語
現(xiàn)在就可以針對(duì)不同的product設(shè)置不同的參數(shù)了,生成不同的app那都不是事兒。
在代碼中通過預(yù)編譯宏做出區(qū)分,然后安心開發(fā)app吧
#ifDevelopMent == 1#defineBaseURL @"192.168.1.23"http:// 內(nèi)網(wǎng)服務(wù)器#else#defineBaseURL @"112.23.12.34"http:// 外網(wǎng)服務(wù)器(瞎寫的)#endif
文/MrSong(簡(jiǎn)書作者)原文鏈接:http://www.itdecent.cn/p/633ae2f80a44