?寫(xiě)在前面
最近在開(kāi)發(fā)SDK驶冒,然后發(fā)現(xiàn)這里面的學(xué)問(wèn)大著呢析孽。在開(kāi)發(fā)SDK的時(shí)候,先得構(gòu)想一下只怎,作為開(kāi)發(fā)者,怎么做才能開(kāi)發(fā)方便怜俐,調(diào)試方便身堡,導(dǎo)出SDK方便。
-
你需要了解的知識(shí)點(diǎn):
項(xiàng)目targets.jpeg
上圖中project就一個(gè)拍鲤,沒(méi)啥好說(shuō)的但是targets就比較花里胡哨了
我剛開(kāi)始接到這個(gè)項(xiàng)目是懵逼的贴谎,因?yàn)闆](méi)有文檔講這些個(gè)target是干啥的汞扎,之間有啥關(guān)系。每target里需要的配置項(xiàng)有哪些擅这。后來(lái)自己慢慢摸索才有了下面這一段的理解澈魄。至于為啥會(huì)有這些個(gè)target,其實(shí)稍微大點(diǎn)的項(xiàng)目仲翎,有了CI了之后痹扇,都會(huì)有8個(gè)左右的target。其目的就是為了打出不同的包(不同的編譯選項(xiàng))
- 第一個(gè)圖標(biāo)溯香,就有點(diǎn)像靶子的那個(gè)紅色圈圈的鲫构。這個(gè)是本文中提到的aggregate產(chǎn)生的,可以簡(jiǎn)單的理解為一個(gè)腳本玫坛,而這個(gè)腳本可以編譯后面三個(gè)target里面的東西结笨。
-
第二個(gè)圖標(biāo),黃色的手提包湿镀。這個(gè)就是正常的framework產(chǎn)生的主target炕吸,可以理解為我們平時(shí)直接創(chuàng)建的APP項(xiàng)目里的那個(gè)主target(就是下圖中的那個(gè)鉛筆和尺子搭出的“A”圖標(biāo))
主target - 第三個(gè)圖標(biāo),一般都是test相關(guān)生成的勉痴,我目前沒(méi)有關(guān)注赫模。
- 第四個(gè)圖標(biāo),像個(gè)房子一樣的蚀腿,這個(gè)是類(lèi)似于framework的嘴瓤,在
addTarget-->cross platfrom
這一步就可以看到。
?初步方案
- 分別是不同的工程莉钙,SDK是一個(gè)項(xiàng)目廓脆,調(diào)試查看SDK效果的代碼又是一個(gè)項(xiàng)目,這樣就和我們平時(shí)用別人的項(xiàng)目一樣磁玉。
優(yōu)點(diǎn)蚊伞,工程之間完全隔離时迫。業(yè)務(wù)代碼和SDK沒(méi)有任何關(guān)系颅停、
缺點(diǎn),每次修改了SDK里的代碼后掠拳,調(diào)試成本變高了癞揉,要不停的導(dǎo)出framework然后放到Demo工程里看效果,且不能直接debug
- 基于上面的缺點(diǎn),就有這個(gè)方法喊熟。如果可以在demo工程里直接調(diào)用SDK項(xiàng)目最新生成的framework多好啊柏肪。
優(yōu)點(diǎn),解決了上面說(shuō)的缺點(diǎn)
缺點(diǎn)芥牌,由于是兩個(gè)項(xiàng)目壁拉,在CI的時(shí)候谬俄,肯定是分兩個(gè)Git倉(cāng)庫(kù)管理的,于是兩個(gè)項(xiàng)目對(duì)應(yīng)的Git一定要配置好扇商,不然提交代碼的時(shí)候頭大凤瘦,夠吃一壺了
?基于第二點(diǎn)方案,我們操作起來(lái)控汉。
參看了iOS項(xiàng)目中SDK的開(kāi)發(fā)與調(diào)試
這一篇笔诵,這里主要講的是新增的方式。我是由于已經(jīng)有了兩個(gè)項(xiàng)目姑子,分別是SDK的工程和demo的工程乎婿,所以這里主要記錄怎么樣把兩個(gè)分開(kāi)的工程整合到一個(gè)項(xiàng)目里,然后方便我們SDK的開(kāi)發(fā)和調(diào)試
創(chuàng)建文件夾街佑,里面創(chuàng)建xcworkspace文件谢翎,然后把SDK項(xiàng)目和demo項(xiàng)目拷貝到一起。如下圖這樣沐旨。
-
下一步把這兩個(gè)目錄里的xcproject文件直接拖到xcode打開(kāi)的xcworkspace里森逮,結(jié)果如下圖
屏幕快照 2019-10-16 下午8.43.46.png
編譯,沒(méi)有問(wèn)題就OK了磁携,至此就是兩個(gè)都加進(jìn)來(lái)后褒侧,后面就是demo工程怎么引用SDK工程產(chǎn)出的framework了,這一點(diǎn)可以參考上面的那個(gè)帖子谊迄。
-
兩個(gè)項(xiàng)目建立好關(guān)聯(lián)后闷供,應(yīng)該是下面這個(gè)樣子的(最后能運(yùn)行的樣子)
WechatIMG5600.jpeg
可以看到目錄里有兩個(gè)一樣的framework,第一個(gè)是我們期望的把兩個(gè)項(xiàng)目關(guān)聯(lián)起來(lái)的那個(gè)動(dòng)態(tài)庫(kù)统诺,第二個(gè)是我們通過(guò)addTarget-->cross platfrom -->aggregate和腳本的方式生成的歪脏。可以運(yùn)行demo后分別對(duì)這兩個(gè)framework文件 showInFinder 看文件的修改日期粮呢,就可以看到哪個(gè)是最新的framework唾糯,然后說(shuō)明我們的修改有沒(méi)有生效怠硼。
上圖中,箭頭所指的那個(gè)framework的路徑應(yīng)該就是前面我們腳本輸出的目標(biāo)路徑移怯。前后驗(yàn)證了,搞定这难,哈哈
總結(jié)
- 其中我遇到了一個(gè)問(wèn)題舟误,就是在修改了SDK的對(duì)外暴露的頭文件的時(shí)候,不知道為啥姻乓,framework里新增的頭文件不會(huì)出現(xiàn)在framework里的header文件夾里了嵌溢。最后我是通過(guò)shift+command+option+k快捷鍵清理了下,然后就好了
- 為了確保demo工程里使用的framework是直接指向SDK產(chǎn)出framework目錄蹋岩,自己多操作下就知道了赖草,哈哈哈哈