前言:隨著項(xiàng)目功能的不斷迭代,業(yè)務(wù)主線也隨之越來(lái)越多,造成耦合越來(lái)越嚴(yán)重,編譯越來(lái)越慢,后期變得難以維護(hù),測(cè)試依賴性強(qiáng)等一系列問(wèn)題。為了解決此類情況,我們可以考慮使用組件化開(kāi)發(fā)。
概念:組件化就是將單一工程項(xiàng)目,分解為各個(gè)獨(dú)立的組件,然后按照某種方式,任意組成一個(gè)擁有完整業(yè)務(wù)邏輯的工程。
優(yōu)勢(shì):
1、獨(dú)立:獨(dú)立開(kāi)發(fā)、編譯、運(yùn)行、測(cè)試、維護(hù),不受業(yè)務(wù)邏輯影響;
2、重用:代碼復(fù)用性高,對(duì)于基礎(chǔ)的配置代碼、相似的功能代碼均可以多項(xiàng)目利用;
3、高效:得益于各個(gè)組件獨(dú)立,可以根據(jù)需求任意增刪模塊,實(shí)現(xiàn)高效迭代;組件分類:大致可以分為基礎(chǔ)組件、功能組件、業(yè)務(wù)組件。
1、基礎(chǔ)組件:宏、常量、常用Extension、處理工具類等,如:設(shè)備信息、沙盒存取數(shù)據(jù)、版本比較類、基礎(chǔ)工具類等等;
2、功能組件:輪播、分享、推送、網(wǎng)絡(luò)請(qǐng)求、其他自定義控件等;
3、業(yè)務(wù)組件:業(yè)務(wù)線相關(guān)。
Tips:考慮到后期組件會(huì)越來(lái)越多,為了引入方便,將其納入私有索引庫(kù)管理,便于維護(hù)。
一、創(chuàng)建私有索引庫(kù)
1、這里以gitlab為例,創(chuàng)建BaseSpecs的私有索引庫(kù)

2、查看本地repo:
pod repo

3、增加新的私有索引庫(kù):
/// 這里我的寫法是:pod repo add BaseSpecs http://gitlab.xxx.com/app/baseSpecs.git
pod repo add [索引庫(kù)名稱] [索引庫(kù)地址]
4、再次查看本地repos:

此時(shí)有了3個(gè)repos,代表本地添加成功。
二、創(chuàng)建組件庫(kù)
這里就不在贅述啦!可以參考本人寫的另一篇文章:iOS 遠(yuǎn)程組件庫(kù)的基本使用
三、提交podspec到私有索引庫(kù)
/// 這里我的寫法是:pod repo push BaseSpecs FloatButton.podspec
pod repo push [索引庫(kù)名稱] [組件庫(kù)名稱].podspec
提交成功應(yīng)該如圖所示:

四、使用私有庫(kù)
項(xiàng)目Podfile文件里添加:
1、source源路徑
2、pod 'FloatButton'
cd至項(xiàng)目目錄,執(zhí)行:pod install or pod update

五、更新遠(yuǎn)程私有庫(kù)
1、修改xxx/xxx/Classes文件夾下對(duì)應(yīng)的庫(kù)文件
2、更新測(cè)試工程的Pod庫(kù)文件: pod update --no-repo-update
3、更新xxx.podspec文件的配置信息, 版本號(hào)一定要改
4、提交代碼到遠(yuǎn)程倉(cāng)庫(kù): git push origin master
5、更新tag標(biāo)簽:
git tag xxx
git push --tags
6、驗(yàn)證私有庫(kù)
/// 本地驗(yàn)證
pod lib lint --private
/// 直到出現(xiàn) xxx passed validation. 即代表本地驗(yàn)證成功!再進(jìn)行遠(yuǎn)程驗(yàn)證。。
/// 遠(yuǎn)程驗(yàn)證
pod spec lint
/// 出現(xiàn)xxx.podspec passed validation. 即代表遠(yuǎn)程驗(yàn)證成功。
7、更新遠(yuǎn)程和本地的私有索引庫(kù): pod repo push SpecName XXX.podspec
踩坑記錄:
1、執(zhí)行pod repo push SpecName XXX.podspec時(shí),報(bào)警告:

原因:
- 使用
pod lib lint (本地校驗(yàn))orpod spec lint (遠(yuǎn)程校驗(yàn))檢驗(yàn)私有庫(kù)是否合法時(shí),如果不指定source,則cocoapods會(huì)默認(rèn)創(chuàng)建倉(cāng)庫(kù)trunk,然后將使用到的依賴庫(kù)的索引信息從遠(yuǎn)端拉到本地的trunk倉(cāng)庫(kù),用于校驗(yàn)。 - 當(dāng)提交私有的pod到自己的私有索引倉(cāng)庫(kù)時(shí),cocoapods會(huì)檢查
~/.cocoapods/repos/下的索引,發(fā)現(xiàn)trunk倉(cāng)庫(kù)中的索引和master中的有重復(fù)情況,就會(huì)導(dǎo)致[!] Found multiple specifications for xxx類問(wèn)題的產(chǎn)生。
解決方案:
- 私有庫(kù)本地校驗(yàn)或者遠(yuǎn)程校驗(yàn)時(shí),加上source索引庫(kù)地址
/// 本地校驗(yàn):
pod lib lint --private --sources='https://github.com/CocoaPods/Specs.git'
/// 遠(yuǎn)程校驗(yàn)
pod spec lint --sources='https://github.com/CocoaPods/Specs.git'