一種比較實用的iOS SDK項目架構


在SDK開發中,一般會需要經過幾個流程,開發SDK,測試SDK,把SDK交付給使用人員,這些東西看似步驟多,過程繁瑣,而且每修改一次SDK就需要重復一次上述的過程,增加瞭一些不必要的操作。當然,如果我們在SDK設計之初就有一個好的項目架構,就可以極大簡化開發流程,提高開發效率,本文將帶讀者一步一步設計搭建一個個人認為比較好的SDK開發架構。


創建基本的工作空間


工作空間這個概念對於很多人並不陌生,平時使用得很多的CocoaPods裡面其實就使用到瞭工作空間,具體一些原理在我的另外一篇博客。

打開Xcode->New->Workspace,命名為JSDSDKDemo


為我們的工作空間建立一個目錄,因為新建工作空間後,隻會為我們生成一個工作空間文件,並不會自動建立目錄。



在我們的工作空間文件同級目錄下建立一個用於存放子項目的SubProject目錄。


打開我們的JSDSDKDemo,新建一個項目,命名為JSSDKForDevelop,該項目主要用於SDK的測試,記得選擇添加到JSDSDKDemo,最好不要選自動創建git倉庫


然後我們用同樣的方法新建一個名為JSSDKInterfaceDemo,該項目用於給SDK使用者作為參考。


添加靜態庫相關依賴


很多開發者都是把SDK打包之後,然後拿到相關Demo裡面進行測試,但是其實我們隻需要添加相關依賴,就可以直接在Demo裡面進行測試,隻需要為它們創建依賴關系。


創建一個靜態庫項目,命名為JSDSDK,顯而易見,該項目是該工作空間中的主要項目。


為瞭工程的統一性,我們的SDK項目放在和SubProject同一級目錄下。為瞭後續把SDK放到另外一個git模塊上面去,我們可以為該SDK創建git工程。



使用Add文件的方式把JSDSDK添加到JSSDKForDevelop裡面,註意選Creat folder reference而不是選Create groups



選擇JSSDKForDevelop項目,在Build Phases-Tatget Dependencies添加JSSDK依賴。


當然,有瞭這個還不足夠,我們還需要在Header Search Paths裡面添加SDK的路徑。



然後,我們在JSSDKForDevelop項目裡面引用SDK項目的頭文件並使用,我們可以看到可以正常使用,不會報路徑相關的錯誤瞭,說明依賴沒有問題。



使用腳本來簡化工作


我曾經也寫過一篇文章[iOS 靜態庫打包流程簡化](http://blog.csdn.net/zhouzhoujianquan/article/details/53192597)。

本次腳本在之前的項目之上做瞭一些改進。


首先為JSSDK創建一個運行腳本的target,New->Target



選擇Cross-platform->Aggregate,命名為JSSDK_Build_Script


然後創建一個腳本文件,命名為JSSDK_Build



為剛才建立的JSSDK_Build_Script添加Run Script Phase


然後配置腳本路徑


這樣SDK的自動化編譯打包流程完成。


如何使用該工程


首先我們在在JSDSDK裡面完成SDK相關功能的開發之後,可以直接使用JSSDKForDevelop對SDK相關的代碼進行測試。然後運行JSSDK_Build_Script,即可把SDK進行相關的打包。



打包成功後,會把JSSDKForDevelop的文件同步到JSSDKInterfaceDemo。同時會在SubProject目錄下生成JSSDKInterfaceDemo的打包文件



運行JSSDKInterfaceDemo測試SDK相關功能是否正常,如果正常則可以把SDK交付使用。


把SDK劃分到Git的子模塊進行管理


當然,更進一步我們可以使用git submodule把SDK分離出來。


添加


為當前工程添加submodule,命令如下:


git submodule add 倉庫地址 路徑

其中,倉庫地址是指子模塊倉庫地址,路徑指將子模塊放置在當前工程下的路徑。

註意:路徑不能以 / 結尾(會造成修改不生效)、不能是現有工程已有的目錄(不能順利 Clone)


命令執行完成,會在當前工程根路徑下生成一個名為.gitmodules的文件,其中記錄瞭子模塊的信息。添加完成以後,再將子模塊所在的文件夾添加到工程中即可。


刪除


submodule的刪除稍微麻煩點:首先,要在.gitmodules文件中刪除相應配置信息。然後,執行git rm –cached命令將子模塊所在的文件從git中刪除。


下載的工程帶有submodule


當使用git clone下來的工程中帶有submodule時,初始的時候,submodule的內容並不會自動下載下來的,此時,隻需執行如下命令:


git submodule update --init --recursive

為瞭方便大傢學習demo,我的demo沒有這樣做,避免有些開發者在下載之後不能立刻使用會產生一些困擾。


最後附上Demo地址給大傢學習,不足之處望批判指正。

0 個評論

要回覆文章請先登錄註冊