背景介紹
公司某項目工程過于龐大,好幾個項目組并行開發(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):

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

編輯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與我取得交流。
下面是一些參考文章: