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

背景介紹

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

關(guān)于CocoaPod私有庫

概念

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

制作私有庫

私有庫,一般項目組開發(fā)的組長已經(jīng)建立好了,用的服務(wù)器鏈接一般也會是公司內(nèi)部的地址。我們需要做的是制作一個pod模塊添加到這個私有庫中。這里,我們還是從零開始,走完整個流程。
首先,需要一個服務(wù)器,存放我們這個私有庫。這里我們在coding.net里申請。

倉庫取名:MyPodsRepo
倉庫地址:https://git.coding.net/pizhulovecode/MyPodsRepo.git

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

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

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

cd ~/.cocoapods/repos
ls

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

制作Pod模塊

說明

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

在本地制作一個pod模塊

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

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

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

這時就會從遠處clone一份工程模板到我們本地,同時需要你回答輸入幾個問題:

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?  -- 類的自定義前綴

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


Paste_Image.png

代碼的存放位置

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

Paste_Image.png

編輯podspec文件

pod的描述文件,通過編輯后,我們讓CocoaPods知道:我們的代碼的遠程倉庫在哪里、當前pod的版本號是多少……之類的問題。

我們看到原本的source:

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

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

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

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

代碼上傳到遠程倉庫

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

pod lib lint --allow-warnings

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

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

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

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

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

git push -u origin master

將制作好的spec文件上傳到私有庫里

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

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

使用pod模塊

先查看下我們的模塊在庫里有沒有存在:

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]

這樣我們就可以在工程中使用這個pod模塊了,我們新建一個xcode工程MainPro,進入目錄執(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

最后,我們在pods可以看到MyFirstPod文件夾,里面就是我們的代碼。

最后

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

下面是一些參考文章:

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

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

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