一種比較實(shí)用的iOS SDK項(xiàng)目架構(gòu)

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

創(chuàng)建基本的工作空間

工作空間這個概念對于很多人并不陌生,平時使用得很多的CocoaPods里面其實(shí)就使用到了工作空間,具體一些原理在我的另外一篇博客。
打開Xcode->New->Workspace,命名為JSDSDKDemo

新建工作空間

為我們的工作空間建立一個目錄,因?yàn)樾陆üぷ骺臻g后,只會為我們生成一個工作空間文件,并不會自動建立目錄。

SDK02.png

在我們的工作空間文件同級目錄下建立一個用于存放子項(xiàng)目的SubProject目錄。

新建目錄

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

新建JSSDKForDevelop工程

然后我們用同樣的方法新建一個名為JSSDKInterfaceDemo,該項(xiàng)目用于給SDK使用者作為參考。

添加靜態(tài)庫相關(guān)依賴

很多開發(fā)者都是把SDK打包之后,然后拿到相關(guān)Demo里面進(jìn)行測試,但是其實(shí)我們只需要添加相關(guān)依賴,就可以直接在Demo里面進(jìn)行測試,只需要為它們創(chuàng)建依賴關(guān)系。

創(chuàng)建一個靜態(tài)庫項(xiàng)目,命名為JSDSDK,顯而易見,該項(xiàng)目是該工作空間中的主要項(xiàng)目。

新建靜態(tài)庫

為了工程的統(tǒng)一性,我們的SDK項(xiàng)目放在和SubProject同一級目錄下。為了后續(xù)把SDK放到另外一個git模塊上面去,我們可以為該SDK創(chuàng)建git工程。

為項(xiàng)目創(chuàng)建Git版本控制

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

添加SDK項(xiàng)目

選擇JSSDKForDevelop項(xiàng)目,在Build Phases-Tatget Dependencies添加JSSDK依賴。

添加依賴

當(dāng)然,有了這個還不足夠,我們還需要在Header Search Paths里面添加SDK的路徑。

Header Search Paths

然后,我們在JSSDKForDevelop項(xiàng)目里面引用SDK項(xiàng)目的頭文件并使用,我們可以看到可以正常使用,不會報路徑相關(guān)的錯誤了,說明依賴沒有問題。

依賴成功

使用腳本來簡化工作

我曾經(jīng)也寫過一篇文章iOS 靜態(tài)庫打包流程簡化。
本次腳本在之前的項(xiàng)目之上做了一些改進(jìn)。

首先為JSSDK創(chuàng)建一個運(yùn)行腳本的target,New->Target

創(chuàng)建Target

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

Aggregate

然后創(chuàng)建一個腳本文件,命名為JSSDK_Build

創(chuàng)建一個腳本文件

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

添加Run Script Phase

然后配置腳本路徑


配置腳本路徑

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

如何使用該工程

首先我們在在JSDSDK里面完成SDK相關(guān)功能的開發(fā)之后,可以直接使用JSSDKForDevelop對SDK相關(guān)的代碼進(jìn)行測試。然后運(yùn)行JSSDK_Build_Script,即可把SDK進(jìn)行相關(guān)的打包。

打包后的文件

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

打包文件生成目錄

運(yùn)行JSSDKInterfaceDemo測試SDK相關(guān)功能是否正常,如果正常則可以把SDK交付使用。

把SDK劃分到Git的子模塊進(jìn)行管理

當(dāng)然,更進(jìn)一步我們可以使用git submodule把SDK分離出來。

添加

為當(dāng)前工程添加submodule,命令如下:

git submodule add 倉庫地址 路徑

其中,倉庫地址是指子模塊倉庫地址,路徑指將子模塊放置在當(dāng)前工程下的路徑。
注意:路徑不能以 / 結(jié)尾(會造成修改不生效)、不能是現(xiàn)有工程已有的目錄(不能順利 Clone)

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

刪除

submodule的刪除稍微麻煩點(diǎn):首先,要在.gitmodules文件中刪除相應(yīng)配置信息。然后,執(zhí)行git rm –cached命令將子模塊所在的文件從git中刪除。

下載的工程帶有submodule

當(dāng)使用git clone下來的工程中帶有submodule時,初始的時候,submodule的內(nèi)容并不會自動下載下來的,此時,只需執(zhí)行如下命令:

git submodule update --init --recursive

為了方便大家學(xué)習(xí)demo,我的demo沒有這樣做,避免有些開發(fā)者在下載之后不能立刻使用會產(chǎn)生一些困擾。

最后附上Demo地址給大家學(xué)習(xí),不足之處望批判指正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容