如何將業(yè)務(wù)層模塊代碼關(guān)聯(lián)到CocoaPod私有庫(kù),供iOS主工程使用?

背景介紹

公司某項(xiàng)目工程過(guò)于龐大,好幾個(gè)項(xiàng)目組并行開(kāi)發(fā),本人涉及到該項(xiàng)目里面的某一塊需求。為了方便解耦、并行開(kāi)發(fā)、提高效率等等原因,架構(gòu)師整了一套看似非常牛逼的架構(gòu)(類似于蘑菇街、天貓的組件化及各種url跳轉(zhuǎn)),讓我把負(fù)責(zé)的相關(guān)代碼關(guān)聯(lián)到項(xiàng)目組內(nèi)部的CocoaPod私有庫(kù),最后由主工程在podfile里以Pod "模塊名"的方式,將我的代碼整合到主工程中。

關(guān)于CocoaPod私有庫(kù)

概念

CocoaPod,大家都用過(guò),比如Pod 'AFNetWorking'。平時(shí)大家用地最多的是公有庫(kù),開(kāi)發(fā)者制作好一個(gè)模塊上傳到CocoaPod官方的一個(gè)公共管理庫(kù)里面,然后其他開(kāi)發(fā)者就可以獲取到這個(gè)模塊。私有庫(kù),顧名思義,不公開(kāi)的。項(xiàng)目組有個(gè)私有庫(kù),里面放了一些模塊,便于項(xiàng)目組成員間的使用。

制作私有庫(kù)

私有庫(kù),一般項(xiàng)目組開(kāi)發(fā)的組長(zhǎng)已經(jīng)建立好了,用的服務(wù)器鏈接一般也會(huì)是公司內(nèi)部的地址。我們需要做的是制作一個(gè)pod模塊添加到這個(gè)私有庫(kù)中。這里,我們還是從零開(kāi)始,走完整個(gè)流程。
首先,需要一個(gè)服務(wù)器,存放我們這個(gè)私有庫(kù)。這里我們?cè)?a target="_blank" rel="nofollow">coding.net里申請(qǐng)。

倉(cāng)庫(kù)取名:MyPodsRepo
倉(cāng)庫(kù)地址:https://git.coding.net/pizhulovecode/MyPodsRepo.git

在終端里執(zhí)行如下指令:

pod repo add MyPodsRepo https://git.coding.net/pizhulovecode/MyPodsRepo.git

這個(gè)時(shí)候,在本地也已經(jīng)生成了私有庫(kù),通過(guò)如下指令查看文件目錄:

cd ~/.cocoapods/repos
ls

我們可以看到:兩個(gè)文件夾:master 和 MyPodsRepo 。master是Cocoapods官方的公有庫(kù),我們從一開(kāi)始安裝上Cocoapods的時(shí)候就有了。我們還可以進(jìn)入到master文件夾里看看里面裝的都是些什么東西,而現(xiàn)在MyPodsRepo文件夾里是空的。

制作Pod模塊

說(shuō)明

前面我們說(shuō)了,要把自己制作的pod模塊添加到這個(gè)私有庫(kù)中。其實(shí)真正存在私有庫(kù)中的是一個(gè)xxx.podspec或者xxx.podspec.json文件。spec(說(shuō)明書、細(xì)則),也就是一個(gè)描述文件。通過(guò)這個(gè)描述文件,我們?cè)趫?zhí)行pod install的時(shí)候,CocoaPod會(huì)將我們的模塊里的代碼從存放代碼的遠(yuǎn)程服務(wù)器里下載到工程中。所以,我們還需要一個(gè)存放pod模塊代碼的倉(cāng)庫(kù)

在本地制作一個(gè)pod模塊

我們先在本地制作一個(gè)pod模塊,然后將模塊中的代碼上傳到倉(cāng)庫(kù)里(注意:不是前面提到的私有倉(cāng)庫(kù),也就是說(shuō)我們總共需要兩個(gè)倉(cāng)庫(kù),一個(gè)用來(lái)存放spec文件,一個(gè)用來(lái)存放具體的模塊代碼)
至于如何制作pod模塊,CocoaPod官方已經(jīng)給我們制作好了一個(gè)模版,只需要將自己的代碼拷貝到相關(guān)目錄下,同時(shí)修改下spec文件。具體操作:

在終端下執(zhí)行指令:
pod lib create 模塊名(如AFNetWorking之類的)

這里我們?nèi)∧K名:MyFirstPod
執(zhí)行:pod lib create MyFirstPod

這時(shí)就會(huì)從遠(yuǎn)處clone一份工程模板到我們本地,同時(shí)需要你回答輸入幾個(gè)問(wèn)題:

1. What is your email?   -- xxx.xx@xx
2. What language do you want to use?? [ Swift / ObjC ]  --- ObjC
3. Would you like to include a demo application with your library? [ Yes / No ] --- Yes
4. Which testing frameworks will you use? [ Specta / Kiwi / None ]   ---None
5. Would you like to do view based testing? [ Yes / No ]  --No
6. What is your class prefix?  -- 類的自定義前綴

之后,本地就多了一個(gè)MyFirstPod的文件夾,打開(kāi)文件夾,我們來(lái)看下里面的目錄結(jié)構(gòu):


Paste_Image.png

代碼的存放位置

我們自己的代碼只需要放到紅色框所在的目錄下,ReplaceMe,對(duì),就是讓你刪除它,用自己的代碼替換進(jìn)去。我們這里放入一個(gè)文件夾和兩個(gè)文件:

Paste_Image.png

編輯podspec文件

pod的描述文件,通過(guò)編輯后,我們讓CocoaPods知道:我們的代碼的遠(yuǎn)程倉(cāng)庫(kù)在哪里、當(dāng)前pod的版本號(hào)是多少……之類的問(wèn)題。

我們看到原本的source:

s.source = { :git => 'https://github.com/****/MyFirstPod.git', :tag => s.version.to_s }
 

我們現(xiàn)在要對(duì)source地址進(jìn)行修改,將我們遠(yuǎn)程倉(cāng)庫(kù)的地址替換進(jìn)去。
在這里,我們?nèi)ithub上申請(qǐng)一個(gè)公開(kāi)的倉(cāng)庫(kù)https://github.com/PizhuLoveCode/MyFirstPodSourceCode.git,也可以去coding或者其他網(wǎng)站,這里就是舉個(gè)例子而已。然后替換podspec中的source。

s.source = { :git => 'https://github.com/PizhuLoveCode/MyFirstPodSourceCode.git'}

, :tag => s.version.to_s  這部分先去除

代碼上傳到遠(yuǎn)程倉(cāng)庫(kù)

在上傳代碼前,需要驗(yàn)證下podspec這個(gè)文件編輯是否正確。
在終端里執(zhí)行:

pod lib lint --allow-warnings

注意:如果spec文件中有s.dependency 私有庫(kù)xx,那么需要寫成:

pod lib lint --sources=http://github.com/CocoaPods/Specs.git,http://xxxx(私有地址) --allow-warnings --verbose --use-libraries

成功后就能看到:MyFirstPod passed validation.

然后執(zhí)行如下指令將代碼上傳到遠(yuǎn)程:

git remote add origin https://github.com/PizhuLoveCode/MyFirstPodSourceCode.git

git push -u origin master

將制作好的spec文件上傳到私有庫(kù)里

 pod repo push MyPodsRepo MyFirstPod.podspec --allow-warnings

上傳成功后,我們?nèi)ニ接羞h(yuǎn)程庫(kù)可以看到已經(jīng)成功上傳了MyFirstPod.podspec文件,同時(shí)本地也有一份。

使用pod模塊

先查看下我們的模塊在庫(kù)里有沒(méi)有存在:

pod search MyFirstPod

-> MyFirstPod (0.1.0)
   A short description of MyFirstPod.
   pod 'MyFirstPod', '~> 0.1.0'
   - Homepage: https://github.com/PizhuLovecode
   - Source:   https://github.com/PizhuLoveCode/MyFirstPodSourceCode.git
   - Versions: 0.1.0 [MyPodsRepo repo]

這樣我們就可以在工程中使用這個(gè)pod模塊了,我們新建一個(gè)xcode工程MainPro,進(jìn)入目錄執(zhí)行

pod init

在Podfile里編輯:

source 'http://github.com/CocoaPods/Specs.git'
source 'https://git.coding.net/pizhulovecode/MyPodsRepo.git'
#use_frameworks!

target 'MainPro' do
  pod 'MyFirstPod'
end

執(zhí)行:

pod install

最后,我們?cè)趐ods可以看到MyFirstPod文件夾,里面就是我們的代碼。

最后

整個(gè)過(guò)程有一些坑,特別是對(duì)一個(gè)不熟悉git的開(kāi)發(fā)者會(huì)更加難辦,歡迎通過(guò)QQ:564226844與我取得交流。

下面是一些參考文章:

  1. 如何創(chuàng)建私有 CocoaPods 倉(cāng)庫(kù)
  2. 使用Cocoapods創(chuàng)建私有podspec
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容