iOS 組件化開(kāi)發(fā)

前言:隨著項(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)警告:

WechatIMG51.png

原因:

  • 使用pod lib lint (本地校驗(yàn)) or pod 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'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

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