私有庫(kù)的是隨著公司在多個(gè)項(xiàng)目開(kāi)展的時(shí)候攀圈,把一些常用的工具類制作成pod暴凑,方便在多個(gè)項(xiàng)目中使用,避免了來(lái)回拖入代碼造成的時(shí)間浪費(fèi)赘来。iOS組件化實(shí)現(xiàn)基本基于cocoapods,如何使用cocoapods創(chuàng)建自己的組件庫(kù)现喳,是實(shí)現(xiàn)組件化的第一要素凯傲。
創(chuàng)建一個(gè)遠(yuǎn)程私有庫(kù),需要一個(gè)私有庫(kù)嗦篱,需要一個(gè)索引庫(kù):
私有庫(kù):用于真正存放組件代碼
索引庫(kù):存放spec文件冰单,用于所引導(dǎo)代碼的位置
索引庫(kù)和私有庫(kù)的關(guān)系可以簡(jiǎn)單理解就像指針和對(duì)象關(guān)系,指針就是索引庫(kù)灸促,對(duì)象就是私有庫(kù)
以碼云“gitee”為例:
一诫欠、創(chuàng)建私有庫(kù)的索引庫(kù)——一般的命名方式以Repo或者Spec (如XXPrivateSpec)
1、首先在終端命令行 pod repo 查看本地索引庫(kù)浴栽,可以查看只有一個(gè)Master索引庫(kù)荒叼,默認(rèn)情況下是只有一個(gè)master倉(cāng)庫(kù),我們常用的SDWebImage,AFNetWoking等的本地索引就在這個(gè)倉(cāng)庫(kù)中典鸡。
master
- Type: git (master)
- URL:?https://github.com/CocoaPods/Specs.git
? ? 2甩挫、添加一個(gè)自己的索引庫(kù) 首先在gitee上創(chuàng)建一個(gè)新的項(xiàng)目命名XXPrivateSpec
? ? 3、添加自己的本地遠(yuǎn)程索引庫(kù) 后面的地址就是遠(yuǎn)端工程的“克隆/下載"地址
pod?repo?addXXPrivateSpec?https://gitee.com/XXX/XXPrivateSpec.git
4椿每、可以Command+shif+G 到$?~/.cocoapods/repos 下查看自己的本地倉(cāng)庫(kù)路徑伊者,添加完以后可以通過(guò)pod repo命令查看,本地會(huì)多一個(gè)你剛才添加的鏡像庫(kù)间护,如果想要移除剛才添加的鏡像庫(kù)亦渗,執(zhí)行pod repo --remove?XXXPrivateSpec命令就可以了。
? 5汁尺、說(shuō)明:該倉(cāng)庫(kù)下只放各組件索引文件法精,不存放組件代碼(組件代碼需要重新創(chuàng)建組件工程)
二、創(chuàng)建自己的組件庫(kù)工程(本地和遠(yuǎn)端的倉(cāng)庫(kù)podspec)
? ? 1痴突、碼云托管平臺(tái)上搂蜓,在Gitee上創(chuàng)建一存放基礎(chǔ)組件的工程XXXComponent(工程創(chuàng)建和上一步類似)
2、快速創(chuàng)建一個(gè)模板工程用于編輯自己的基礎(chǔ)組件
cd /Users/XXX/Desktop/PrivateLib
? ? ? 終端命令輸入:
? ? ? pod lib create 組件庫(kù)名?
? ? ? 接下來(lái)會(huì)輸入一系列的東西辽装,根據(jù)提示輸入帮碰,賬戶密碼等的如下圖:
3、以上信息完成以后拾积,Xcode會(huì)自動(dòng)打開(kāi)創(chuàng)建好的模板工程殉挽,在這里可以把自己編的本地組件文件替換工程中的Replace.m文件
? ? 4、終端 cd 命令行 切換到Example文件路徑下拓巧,執(zhí)行pod install命令? ??
出現(xiàn)pod installation complete!那么本地私有庫(kù)就完成斯碌,工程中就能看到導(dǎo)入的組件庫(kù)文件,然后可以編輯修改組件庫(kù)
5肛度、最后就是將本地的組件庫(kù)地址提交到遠(yuǎn)端組件庫(kù)工程XXXComponent上(注意此處不是索引庫(kù)傻唾,切莫弄混淆了)
? ? ? ? 5.1 切換到本地組件庫(kù)工程目錄下,執(zhí)行下面三條命令(這里就將模板文件上傳到了遠(yuǎn)端)
cd /Users/XXX/Desktop/PrivateLib/FoundationExtention/XXXComponent
git remote add origin https://gitee.com/XXX/XXXComponent.git
? ??? ??? ??git push -u origin master
5.1 修改模板工程中的podspec文件承耿, 打開(kāi)Xcode工程冠骄,找到.podspec
s.version ?版本號(hào)初次使用不需要修改
s.summary ?一段簡(jiǎn)介描述(可以修改為自己想要的)
s.homepage = '工程主頁(yè)地址'
s.source ? = '項(xiàng)目倉(cāng)庫(kù)地址逛裤,不是索引庫(kù)地址'
?5.2 修改完這些主要信息之后,可以用?pod lib lint --allow-warnings校驗(yàn)本地podspec文件是否正確猴抹,如有error則需要逐條修改
? ? ? ? 5.3 保存本地倉(cāng)庫(kù)代碼修改,打上tag標(biāo)簽锁荔,推送到遠(yuǎn)程倉(cāng)庫(kù)蟀给,使用如下命令行
? ??? ??? ??git?add?.
git?commit??-m??'初始化' ? ? ?(-m 后面是對(duì)本次提交信息的描述)
git?push?-u?origin?master
5.4 校驗(yàn)遠(yuǎn)端podspec文件是否正確,終端輸入?pod spec lint --allow-warnings
?當(dāng)輸出XXXComponent.podspec passed validation. 說(shuō)明遠(yuǎn)端校驗(yàn)通過(guò)
如果出現(xiàn)了警告阳堕,可以嘗試將s.homepage的文件地址刪掉一級(jí)嘗試
5.5 給版本打一個(gè)標(biāo)簽
git tag 0.1.0
? ? ? ? ? ? git push --tags?
? ? ? ? ? ? 小結(jié):
? ? ? ? ? ? ? ? ? ? ? ? ? ?1)打分支這一步很重要跋理,直接決定下面的步驟是否能夠繼續(xù),當(dāng)我們有版本更新的時(shí)候就要更改版本號(hào)
? ? ? ? ? ? ? ? ? ? ? ? ? ?2)這里默認(rèn)是0.1.0恬总,一定要與之前我們?cè)赬code中看到的s.version號(hào)一致前普!
5.6 最后一步建立關(guān)聯(lián),將podspec文件關(guān)聯(lián)到遠(yuǎn)端私有索引庫(kù)XXXPrivateSpec.pod repo push?XXPrivateSpec ?XXXComponent.podspec--allow-warnings
注意:注意:提交后壹堰,依然會(huì)驗(yàn)證 podspec文件拭卿,驗(yàn)證通過(guò)后 會(huì)自動(dòng)上傳到在遠(yuǎn)程spec索引庫(kù)。通過(guò)這一步我們就同步好了遠(yuǎn)程和本地索引庫(kù)
5.7修改基礎(chǔ)工程進(jìn)行版本迭代贱纠,本質(zhì)上修改XXXComponent項(xiàng)目峻厚。并且修改是修改podspec文件tag(s.version),打標(biāo)簽谆焊。并切將podspec文件推送到遠(yuǎn)端私有索引庫(kù)惠桃。即重復(fù)5.3~5.5 把文件修改推送到遠(yuǎn)端。
最后還要進(jìn)行組件庫(kù)與遠(yuǎn)端索引庫(kù)的關(guān)聯(lián):
即:pod repo push?XXPrivateSpec ?XXXComponent.podspec--allow-warnings
三辖试、創(chuàng)建新工程辜王,使用自己的私有庫(kù)
cd 到新工程目錄
? ? ? ? pod init ? ?這里需要
??當(dāng)我們?cè)谑褂米约簞?chuàng)建的私有庫(kù)時(shí),Podfile文件罐孝,要引用我們之前第一步創(chuàng)建的索引倉(cāng)庫(kù)地址呐馆,也就是指針倉(cāng)庫(kù)地址
下面是Podfile
source?'https://github.com/CocoaPods/Specs.git'
source?'https://gitee.com/XXX/XXPrivateSpec.git'
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target?'TestP1'?do
?# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
?use_frameworks!
?pod?'XXXComponent',?'~> 0.1.0'
end
然后 pod install 就可以了