?寫在前面
最近在開發(fā)SDK,然后發(fā)現(xiàn)這里面的學問大著呢。在開發(fā)SDK的時候,先得構(gòu)想一下,作為開發(fā)者,怎么做才能開發(fā)方便,調(diào)試方便,導出SDK方便。
-
你需要了解的知識點:
項目targets.jpeg
上圖中project就一個,沒啥好說的但是targets就比較花里胡哨了
我剛開始接到這個項目是懵逼的,因為沒有文檔講這些個target是干啥的,之間有啥關(guān)系。每target里需要的配置項有哪些。后來自己慢慢摸索才有了下面這一段的理解。至于為啥會有這些個target,其實稍微大點的項目,有了CI了之后,都會有8個左右的target。其目的就是為了打出不同的包(不同的編譯選項)
- 第一個圖標,就有點像靶子的那個紅色圈圈的。這個是本文中提到的aggregate產(chǎn)生的,可以簡單的理解為一個腳本,而這個腳本可以編譯后面三個target里面的東西。
-
第二個圖標,黃色的手提包。這個就是正常的framework產(chǎn)生的主target,可以理解為我們平時直接創(chuàng)建的APP項目里的那個主target(就是下圖中的那個鉛筆和尺子搭出的“A”圖標)
主target - 第三個圖標,一般都是test相關(guān)生成的,我目前沒有關(guān)注。
- 第四個圖標,像個房子一樣的,這個是類似于framework的,在
addTarget-->cross platfrom這一步就可以看到。
?初步方案
- 分別是不同的工程,SDK是一個項目,調(diào)試查看SDK效果的代碼又是一個項目,這樣就和我們平時用別人的項目一樣。
優(yōu)點,工程之間完全隔離。業(yè)務代碼和SDK沒有任何關(guān)系、
缺點,每次修改了SDK里的代碼后,調(diào)試成本變高了,要不停的導出framework然后放到Demo工程里看效果,且不能直接debug
- 基于上面的缺點,就有這個方法。如果可以在demo工程里直接調(diào)用SDK項目最新生成的framework多好啊。
優(yōu)點,解決了上面說的缺點
缺點,由于是兩個項目,在CI的時候,肯定是分兩個Git倉庫管理的,于是兩個項目對應的Git一定要配置好,不然提交代碼的時候頭大,夠吃一壺了
?基于第二點方案,我們操作起來。
參看了iOS項目中SDK的開發(fā)與調(diào)試
這一篇,這里主要講的是新增的方式。我是由于已經(jīng)有了兩個項目,分別是SDK的工程和demo的工程,所以這里主要記錄怎么樣把兩個分開的工程整合到一個項目里,然后方便我們SDK的開發(fā)和調(diào)試
創(chuàng)建文件夾,里面創(chuàng)建xcworkspace文件,然后把SDK項目和demo項目拷貝到一起。如下圖這樣。
-
下一步把這兩個目錄里的xcproject文件直接拖到xcode打開的xcworkspace里,結(jié)果如下圖
屏幕快照 2019-10-16 下午8.43.46.png
編譯,沒有問題就OK了,至此就是兩個都加進來后,后面就是demo工程怎么引用SDK工程產(chǎn)出的framework了,這一點可以參考上面的那個帖子。
-
兩個項目建立好關(guān)聯(lián)后,應該是下面這個樣子的(最后能運行的樣子)
WechatIMG5600.jpeg
可以看到目錄里有兩個一樣的framework,第一個是我們期望的把兩個項目關(guān)聯(lián)起來的那個動態(tài)庫,第二個是我們通過addTarget-->cross platfrom -->aggregate和腳本的方式生成的??梢赃\行demo后分別對這兩個framework文件 showInFinder 看文件的修改日期,就可以看到哪個是最新的framework,然后說明我們的修改有沒有生效。

上圖中,箭頭所指的那個framework的路徑應該就是前面我們腳本輸出的目標路徑。前后驗證了,搞定,哈哈
總結(jié)
- 其中我遇到了一個問題,就是在修改了SDK的對外暴露的頭文件的時候,不知道為啥,framework里新增的頭文件不會出現(xiàn)在framework里的header文件夾里了。最后我是通過shift+command+option+k快捷鍵清理了下,然后就好了
- 為了確保demo工程里使用的framework是直接指向SDK產(chǎn)出framework目錄,自己多操作下就知道了,哈哈哈哈



