ios組件化之創(chuàng)建私有庫(kù)调鲸,并以pod方式引入

一盛杰、什么是組件化:

組件化就是將單一工程的項(xiàng)目按照功能職責(zé)或者業(yè)務(wù)職責(zé)劃分成一個(gè)一個(gè)模塊,模塊間解耦調(diào)用.

二、組件化想解決的問(wèn)題:

當(dāng)一個(gè)項(xiàng)目開(kāi)發(fā)初期的時(shí)候藐石,開(kāi)發(fā)人員較少即供,業(yè)務(wù)較為簡(jiǎn)單,此時(shí)采用單一工程開(kāi)發(fā)的模式,能保證開(kāi)發(fā)效率贯钩。
當(dāng)項(xiàng)目越來(lái)越大募狂,開(kāi)發(fā)人員越來(lái)越多办素,單一工程開(kāi)發(fā)就會(huì)有一些弊端角雷,諸如

  • 代碼耦合嚴(yán)重
  • 提交容易出現(xiàn)沖突
  • 編譯時(shí)間太長(zhǎng)導(dǎo)致開(kāi)發(fā)效率低
  • 代碼冗余嚴(yán)重(相同功能代碼可能反復(fù)被實(shí)現(xiàn))
  • 而組件化就是為了解決這些問(wèn)題而出現(xiàn)的

那么它的好處如下:

  • 加快編譯速度,不需要編譯整個(gè)項(xiàng)目(每個(gè)組件都有一個(gè)殼工程)
  • 方便做針對(duì)性測(cè)試
  • 代碼解耦后更利率開(kāi)發(fā)職責(zé)的劃分
  • 不容易出現(xiàn)代碼提交沖突

三、組件化帶來(lái)的問(wèn)題:

組件化看起來(lái)十分的棒性穿,解決了很多問(wèn)題勺三,但不是所有APP都適合走組件化的路子,盲目的為了組件化而組件化反而會(huì)因?yàn)楦鞣N原因?qū)е麻_(kāi)發(fā)效率變低需曾。例如一個(gè)兩三個(gè)人維護(hù)業(yè)務(wù)簡(jiǎn)單的項(xiàng)目吗坚,組件化的解耦調(diào)用可能會(huì)導(dǎo)致代碼邏輯變復(fù)雜。組件化粒度過(guò)細(xì)也會(huì)一個(gè)業(yè)務(wù)需求需要修改多個(gè)組件也容易讓代碼追蹤變得困難呆万,與對(duì)應(yīng)組件負(fù)責(zé)人的溝通也會(huì)拖慢開(kāi)發(fā)的進(jìn)度商源。我覺(jué)得只有項(xiàng)目到達(dá)一定規(guī)模后,開(kāi)始出現(xiàn)相對(duì)獨(dú)立的業(yè)務(wù)谋减,團(tuán)隊(duì)人員開(kāi)始增加牡彻,單一項(xiàng)目的開(kāi)發(fā)模式成為了開(kāi)發(fā)效率的掣肘,這個(gè)時(shí)候才是應(yīng)該開(kāi)始做組件化的時(shí)候出爹。

四庄吼、常見(jiàn)的組件化方案:

基于target-action的方式(CTMediator)
  • 基于target-action的方式,通過(guò)類擴(kuò)展生成對(duì)應(yīng)模塊入口類的類對(duì)象調(diào)用對(duì)應(yīng)的action方法缎除。
基于router的方式(MGJRouter,HHRouter)
  • 基于注冊(cè)router的方式总寻,在項(xiàng)目啟動(dòng)的時(shí)候去注冊(cè)組件和對(duì)應(yīng)的route器罐,調(diào)用組件通過(guò)類openURL的方式,并傳遞復(fù)雜參數(shù)。

不管是基于target-action還是基于router其實(shí)都是通過(guò)OC的反射機(jī)制(runtime)去獲取對(duì)應(yīng)的組件入口類調(diào)用對(duì)應(yīng)的方法渐行,從而達(dá)到解耦的目的轰坊。

五、如何創(chuàng)建私有庫(kù)(本人以碼云為例子):

1祟印、遠(yuǎn)程私有索引倉(cāng)庫(kù)創(chuàng)建

<1>衰倦、創(chuàng)建遠(yuǎn)程私有索引庫(kù)

和創(chuàng)建遠(yuǎn)程工程一樣,名稱我這里就叫TTSpec了旁理,是否開(kāi)源我們選擇私有樊零,至于下邊的語(yǔ)言和初始文件什么的我們選擇勾選readme工程使用說(shuō)明文件(最好是勾選),當(dāng)然也可以選擇不勾線孽文,然后點(diǎn)擊創(chuàng)建驻襟。

創(chuàng)建遠(yuǎn)程私有索引庫(kù).png

創(chuàng)建完成后,碼云做的是相當(dāng)?shù)牟诲e(cuò)芋哭,各個(gè)平臺(tái)下載鏈接和git命令行寫法常用的都給寫出來(lái)了沉衣,我們使用就很方便了,而且以后遇到git命令問(wèn)題也可以來(lái)此處搜索查看减牺。

git操作命令.png
<2>豌习、倉(cāng)庫(kù)已有,接下來(lái)我們復(fù)制倉(cāng)庫(kù)地址

復(fù)制/克隆倉(cāng)庫(kù)地址我就不多講了拔疚,跟github上一樣(例如:https://gitee.com/tiantengyx/TTTools.git

<3>肥隆、打開(kāi)終端,將遠(yuǎn)程私有倉(cāng)庫(kù)關(guān)聯(lián)到本地

這里我們將私有庫(kù)關(guān)聯(lián)地址與cocoapods的放在一起稚失。
地址在:找到電腦的資源文件并打開(kāi)栋艳,然后點(diǎn)擊command+shift+.將隱藏的文件展示,就可以看到.cocoapods文件夾下的repos句各,也就是本地統(tǒng)一管理遠(yuǎn)程私有庫(kù)的地方吸占。

repos地址.png

在終端打cd+空格,然后將repos文件拖拽到終端凿宾,也就是指到repos的文件目錄下矾屯。

cd /Users/用戶/.cocoapods/repos

然后終端執(zhí)行(此鏈接即上面點(diǎn)克隆/下載復(fù)制的鏈接)

pod repo add TTSpec https://gitee.com/tiantengyx/TTSpec.git

成功后,我們的repos目錄下會(huì)展示我們的私有索引庫(kù)初厚,如圖


私有索引庫(kù).png

至此我們遠(yuǎn)程私有倉(cāng)庫(kù)的創(chuàng)建并與本地關(guān)聯(lián)已成功完成件蚕,感興趣的可以點(diǎn)開(kāi)自己電腦上repos目錄下master下文件,master是git的遠(yuǎn)程索引庫(kù),每次安裝cocoapods最慢的步驟就是將遠(yuǎn)端索引庫(kù)拉到本地骤坐,以后為了快也可以拷貝其他同事的放在同樣目錄下绪杏。

1、私有代碼倉(cāng)庫(kù)(分為本地和遠(yuǎn)端)

<1>纽绍、創(chuàng)建本地私有代碼倉(cāng)庫(kù)

創(chuàng)建一個(gè)文件夾蕾久,用來(lái)存放本地私有代碼,我這里為了方便展示拌夏,就直接在桌面創(chuàng)建了僧著,名稱叫做TTTools。然后終端cd /Users/用戶/Desktop/TTTools障簿。然后終端執(zhí)行以下命令

cd /Users/用戶/Desktop/TTTools
pod lib create TTTools

會(huì)出以下問(wèn)題盹愚,下圖是我的答案


工程問(wèn)題設(shè)置.png

創(chuàng)建結(jié)束后會(huì)自動(dòng)彈出一個(gè)工程,我們將我們組件化的代碼copy到工程的Classes 目錄下(圖片資源可以拷貝到Assets目錄下),如圖

拷貝到classes目錄下.png
<2>站故、修改新創(chuàng)建工程的.podSpec文件皆怕,如圖
podSpec文件說(shuō)明.png

至此本地私有代碼庫(kù)就已經(jīng)做好了。

<3>西篓、創(chuàng)建遠(yuǎn)程私有代碼庫(kù)

1)愈腾、創(chuàng)建遠(yuǎn)程代碼庫(kù),與剛開(kāi)始一樣岂津,我們同樣在碼云上操作虱黄,名字叫做TTTools。


創(chuàng)建遠(yuǎn)程代碼庫(kù).png

2)吮成、把本地的代碼提交到遠(yuǎn)程倉(cāng)庫(kù)(切記要先cd到工程目錄下)

cd /Users/tianteng/Desktop/TTTools/TTTools
git remote add origin https://gitee.com/tiantengyx/TTTools
git push -u origin master -f
git add .
git commit -am "提交代碼"
git push -u origin master -f
git tag 0.0.1#(注意橱乱,這里的tag必須和.podSpec文件的版本一致)
git push --tags

3)、對(duì)文件進(jìn)行本地驗(yàn)證和遠(yuǎn)端驗(yàn)證

pod lib lint --allow-warnings #本地驗(yàn)證

成功則如圖:

本地驗(yàn)證成功.png
pod spec lint --use-libraries --allow-warnings #遠(yuǎn)端驗(yàn)證

成功則如圖:


遠(yuǎn)端驗(yàn)證成功.png

4)粱甫、將本地.podspec文件推送到本地索引庫(kù)(注意工程名稱一定要對(duì)應(yīng)上)

pod repo push TTSpec TTTools.podspec --use-libraries --allow-warnings #(如果前面一步加了--use-libraries --allow-warnings 此時(shí)務(wù)必加上,不加這報(bào)錯(cuò))

成功則如圖:

推送本地成功.png

此時(shí)TTSpec下面多出的文件和內(nèi)容如圖:


TTSpec本地索引庫(kù).png

至此我們的組件化模塊算是已經(jīng)完成泳叠,下面我們?nèi)ヲ?yàn)證是否可使用。

接下來(lái)見(jiàn)證奇跡的時(shí)刻到了:新建一個(gè)工程測(cè)試魔种,切記podfile文件頭部加上倉(cāng)庫(kù)的source源(例如我的就是:source 'https://gitee.com/tiantengyx/TTSpec.git')析二,成功如下圖:

驗(yàn)證成功.png

如果想更新庫(kù)的版本并且推送上去粉洼,則需要重新修改版本號(hào)并提交
流程如下:

#A节预、工程中修改你要修改的代碼等。
#B属韧、.podSpec文件中修改版本號(hào)安拟,設(shè)置成你此次修改的版本,然后打tag宵喂,推送到遠(yuǎn)端糠赦。
cd /Users/tianteng/Desktop/TTTools/TTTools
git push -u origin master
git add .
git commit -am "提交0.0.2版本"
git push -u origin master
git tag 0.0.2
git push --tags
pod repo push TTSpec TTTools.podspec --use-libraries --allow-warnings

感謝以下博主提供的參考:
<1>iOS組件化思考,什么是組件化,組件化想解決的問(wèn)題是什么?http://www.reibang.com/p/9fe2e96c097a
<2>ios 組件化整理
http://www.reibang.com/p/2030de45055e

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拙泽,更是在濱河造成了極大的恐慌淌山,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顾瞻,死亡現(xiàn)場(chǎng)離奇詭異泼疑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)荷荤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門退渗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蕴纳,你說(shuō)我怎么就攤上這事会油。” “怎么了古毛?”我有些...
    開(kāi)封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵翻翩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我稻薇,道長(zhǎng)体斩,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任颖低,我火速辦了婚禮絮吵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忱屑。我一直安慰自己蹬敲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布莺戒。 她就那樣靜靜地躺著伴嗡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪从铲。 梳的紋絲不亂的頭發(fā)上瘪校,一...
    開(kāi)封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音名段,去河邊找鬼阱扬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伸辟,可吹牛的內(nèi)容都是我干的麻惶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼信夫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼窃蹋!你這毒婦竟也來(lái)了卡啰?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤警没,失蹤者是張志新(化名)和其女友劉穎匈辱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體杀迹,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梅誓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了佛南。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梗掰。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嗅回,靈堂內(nèi)的尸體忽然破棺而出及穗,到底是詐尸還是另有隱情,我是刑警寧澤绵载,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布埂陆,位于F島的核電站,受9級(jí)特大地震影響娃豹,放射性物質(zhì)發(fā)生泄漏焚虱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一懂版、第九天 我趴在偏房一處隱蔽的房頂上張望鹃栽。 院中可真熱鬧,春花似錦躯畴、人聲如沸民鼓。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丰嘉。三九已至,卻和暖如春嚷缭,著一層夾襖步出監(jiān)牢的瞬間饮亏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工阅爽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留路幸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓优床,卻偏偏與公主長(zhǎng)得像劝赔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胆敞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344