0.PRE:
iOS開(kāi)發(fā)中颤专,很可能有以下場(chǎng)景:需要開(kāi)發(fā)多個(gè)版本纽哥,或因需區(qū)分收費(fèi)版,免費(fèi)版栖秕,或因?yàn)榫W(wǎng)絡(luò)環(huán)境需要區(qū)分測(cè)試版昵仅,發(fā)布版,或因渠道不同需要區(qū)分企業(yè)版累魔,AppStore版等等摔笤。解決辦法無(wú)非就是CheckOut多份代碼,然后按照指定需求垦写,修改配置……
不同的渠道需要不同的證書(shū)吕世,不同的BundleID需要不同的描述文件,不同的BundleID也可能對(duì)應(yīng)不同的綁定BundleID的第三方庫(kù)梯投。甚至于不同的網(wǎng)絡(luò)環(huán)境也需要不同的BaseUrl命辖,雖然這個(gè)可以宏定義解決况毅。可以想象尔艇,每次CheckOut改這些配置尔许,是有多么麻煩。其實(shí)有一種方式可以完美結(jié)局以上問(wèn)題——?jiǎng)?chuàng)建多個(gè)Target终娃。
1.TARGET
Apple對(duì)于TARGET的定義:“ Targets that define the products to build. A target organizes the files and instructions needed to build a product into a sequence of build actions that can be taken.”就是說(shuō)一個(gè)Target包含了你想要?jiǎng)?chuàng)建(build)的產(chǎn)品(product)包含的源文件味廊,資源,配置等等棠耕。我靠余佛,這不就是一個(gè)應(yīng)用所需的全部嗎?
做過(guò)iOS8開(kāi)始的第三方輸入法窍荧,Today插件或者AppleWatch擴(kuò)展的童鞋一定對(duì)Target不會(huì)陌生辉巡。不過(guò)今天所關(guān)注的是公用一份代碼,而配置不同的Target拷貝蕊退。
2.創(chuàng)建Target拷貝
創(chuàng)建一個(gè)應(yīng)用郊楣,默認(rèn)會(huì)有一個(gè)工程文件名的Target和一個(gè)Tester的target,Xcode7創(chuàng)建的話可能也會(huì)默認(rèn)有一個(gè)UITest的target瓤荔。
選中我們的項(xiàng)目Target右鍵選擇Duplicate净蚤,我們就拷貝了這個(gè)Target,這個(gè)Target共享之前的所有代碼茉贡。
之后就是改名字的操作了。默認(rèn)會(huì)生成一個(gè)拷貝的Info.plist者铜。這個(gè)Info.plist就對(duì)應(yīng)與我們新創(chuàng)建的Target腔丧。如果需要改名字轉(zhuǎn)移位置的話,需要先Remove然后文件夾轉(zhuǎn)移后再添加進(jìn)去即可作烟。然后就可以隨意的修改BundleID愉粤,證書(shū),描述文件了等等了拿撩。之后為新創(chuàng)建的Target在配置一個(gè)Schem衣厘。
3.新Target的配置
除了基本的修改BundleID外,還能控制源文件压恒,第三方庫(kù)影暴,資源文件的編譯選項(xiàng)等情況。在這里就介紹一下我我遇到的不懂BundleID對(duì)應(yīng)不同的第三方靜態(tài)庫(kù)吧探赫。首先把兩個(gè)靜態(tài)庫(kù)文件全部添加型宙,然后不同Target加載不同庫(kù)即可。
如果新加入了文件或者資源伦吠,一定要選擇所有的Target妆兑,默認(rèn)貌似的不是所有
新的target對(duì)應(yīng)plist重新chose后一定要設(shè)置相對(duì)路徑魂拦,不需要在前邊的$(SRCROOT),不然使用命令諸如xcrun agvtool what-marketing-version
就會(huì)找不到