iOS開發(fā)多個(gè)Target的使用 2019-03-19

背景介紹

開發(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容