背景介紹
公司某項(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):
代碼的存放位置
我們自己的代碼只需要放到紅色框所在的目錄下,ReplaceMe,對(duì),就是讓你刪除它,用自己的代碼替換進(jìn)去。我們這里放入一個(gè)文件夾和兩個(gè)文件:
編輯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與我取得交流。
下面是一些參考文章: