在SDK開發(fā)中,一般會需要經(jīng)過幾個流程挣磨,開發(fā)SDK雇逞,測試SDK,把SDK交付給使用人員茁裙,這些東西看似步驟多塘砸,過程繁瑣,而且每修改一次SDK就需要重復(fù)一次上述的過程晤锥,增加了一些不必要的操作掉蔬。當然,如果我們在SDK設(shè)計之初就有一個好的項目架構(gòu)矾瘾,就可以極大簡化開發(fā)流程女轿,提高開發(fā)效率,本文將帶讀者一步一步設(shè)計搭建一個個人認為比較好的SDK開發(fā)架構(gòu)壕翩。
創(chuàng)建基本的工作空間
工作空間這個概念對于很多人并不陌生蛉迹,平時使用得很多的CocoaPods
里面其實就使用到了工作空間,具體一些原理在我的另外一篇博客。
打開Xcode->New->Workspace
戈泼,命名為JSDSDKDemo
為我們的工作空間建立一個目錄,因為新建工作空間后赏僧,只會為我們生成一個工作空間文件大猛,并不會自動建立目錄。
在我們的工作空間文件同級目錄下建立一個用于存放子項目的SubProject
目錄淀零。
打開我們的JSDSDKDemo
,新建一個項目挽绩,命名為JSSDKForDevelop
,該項目主要用于SDK的測試,記得選擇添加到JSDSDKDemo
驾中,最好不要選自動創(chuàng)建git倉庫
然后我們用同樣的方法新建一個名為JSSDKInterfaceDemo
,該項目用于給SDK使用者作為參考唉堪。
添加靜態(tài)庫相關(guān)依賴
很多開發(fā)者都是把SDK打包之后模聋,然后拿到相關(guān)Demo里面進行測試,但是其實我們只需要添加相關(guān)依賴唠亚,就可以直接在Demo里面進行測試链方,只需要為它們創(chuàng)建依賴關(guān)系。
創(chuàng)建一個靜態(tài)庫項目灶搜,命名為JSDSDK
,顯而易見祟蚀,該項目是該工作空間中的主要項目。
為了工程的統(tǒng)一性割卖,我們的SDK項目放在和SubProject
同一級目錄下前酿。為了后續(xù)把SDK放到另外一個git模塊上面去,我們可以為該SDK創(chuàng)建git工程鹏溯。
使用Add文件的方式把JSDSDK
添加到JSSDKForDevelop
里面罢维,注意選Creat folder reference
而不是選Create groups
選擇JSSDKForDevelop
項目,在Build Phases
-Tatget Dependencies
添加JSSDK
依賴丙挽。
當然肺孵,有了這個還不足夠,我們還需要在Header Search Paths
里面添加SDK的路徑取试。
然后悬槽,我們在JSSDKForDevelop
項目里面引用SDK項目的頭文件并使用,我們可以看到可以正常使用瞬浓,不會報路徑相關(guān)的錯誤了初婆,說明依賴沒有問題。
使用腳本來簡化工作
我曾經(jīng)也寫過一篇文章iOS 靜態(tài)庫打包流程簡化猿棉。
本次腳本在之前的項目之上做了一些改進磅叛。
首先為JSSDK
創(chuàng)建一個運行腳本的target,New->Target
選擇Cross-platform->Aggregate
,命名為JSSDK_Build_Script
然后創(chuàng)建一個腳本文件萨赁,命名為JSSDK_Build
為剛才建立的JSSDK_Build_Script
添加Run Script Phase
然后配置腳本路徑
這樣SDK的自動化編譯打包流程完成弊琴。
如何使用該工程
首先我們在在JSDSDK
里面完成SDK相關(guān)功能的開發(fā)之后,可以直接使用JSSDKForDevelop
對SDK相關(guān)的代碼進行測試杖爽。然后運行JSSDK_Build_Script
敲董,即可把SDK進行相關(guān)的打包。
打包成功后慰安,會把JSSDKForDevelop
的文件同步到JSSDKInterfaceDemo
腋寨。同時會在SubProject
目錄下生成JSSDKInterfaceDemo
的打包文件
運行JSSDKInterfaceDemo
測試SDK相關(guān)功能是否正常,如果正常則可以把SDK交付使用化焕。
把SDK劃分到Git的子模塊進行管理
當然萄窜,更進一步我們可以使用git submodule
把SDK分離出來。
添加
為當前工程添加submodule,命令如下:
git submodule add 倉庫地址 路徑
其中查刻,倉庫地址是指子模塊倉庫地址键兜,路徑指將子模塊放置在當前工程下的路徑。
注意:路徑不能以 / 結(jié)尾(會造成修改不生效)穗泵、不能是現(xiàn)有工程已有的目錄(不能順利 Clone)
命令執(zhí)行完成普气,會在當前工程根路徑下生成一個名為.gitmodules
的文件,其中記錄了子模塊的信息火欧。添加完成以后棋电,再將子模塊所在的文件夾添加到工程中即可。
刪除
submodule的刪除稍微麻煩點:首先苇侵,要在.gitmodules
文件中刪除相應(yīng)配置信息赶盔。然后,執(zhí)行git rm –cached
命令將子模塊所在的文件從git中刪除榆浓。
下載的工程帶有submodule
當使用git clone下來的工程中帶有submodule時于未,初始的時候,submodule的內(nèi)容并不會自動下載下來的陡鹃,此時烘浦,只需執(zhí)行如下命令:
git submodule update --init --recursive
為了方便大家學(xué)習(xí)demo,我的demo沒有這樣做萍鲸,避免有些開發(fā)者在下載之后不能立刻使用會產(chǎn)生一些困擾闷叉。
最后附上Demo地址給大家學(xué)習(xí),不足之處望批判指正。