iOS 我的組件化日記 part4:真刀真槍

1.真實(shí)項(xiàng)目架構(gòu)介紹

先看看結(jié)果把,再看看到達(dá)這個(gè)結(jié)果的一些坑.


基礎(chǔ)組件.png

根據(jù)原始項(xiàng)目的組成,外加效仿的MJG(頁(yè)面跳轉(zhuǎn)用路由+服務(wù)調(diào)用采取協(xié)議映射服務(wù)類)的方式切分出6個(gè)基礎(chǔ)組件:

KWBaseComponent  //包含常用分類+常用UI控件+宏的基本組件
KWProtocolMediatorComponent  //協(xié)議映射服務(wù)類中間件組件,內(nèi)部就是KWProtocolMediator
KWRouterComponent  //路由組件,內(nèi)部就是MGJRouter
KWConfigComponent  //配置文件組件
KWNetworkComponent  //網(wǎng)絡(luò)工具組件
KWMixAliComponent  //融合Ali推送的組件

然后又切分出若干個(gè)業(yè)務(wù)組件:

KWLoginComponent
KWMineComponent
KWHomeComponent
等等
殼工程>pods.png

回歸part1:練嘴中所說(shuō)的App組件化專注的問(wèn)題

App組件化專注于兩個(gè)問(wèn)題:
1.各個(gè)頁(yè)面之間的跳轉(zhuǎn)問(wèn)題.  ==> KWRouterComponent(MGJRouter)
2.各個(gè)組件之間相互調(diào)用.  ==> KWProtocolMediatorComponent(KWProtocolMediator)

2.制作pod沒(méi)那么簡(jiǎn)單

part3:演習(xí)中,我們所寫(xiě)的制作pod的工程并不引用私有pod.但在真實(shí)pod實(shí)現(xiàn)組件化的時(shí)候是沒(méi)那么簡(jiǎn)單了.

2.1 組件小工程角度

在寫(xiě)業(yè)務(wù)組件1小工程的時(shí)候用到基礎(chǔ)組件,也就是說(shuō)業(yè)務(wù)組件1小工程內(nèi)要用到基礎(chǔ)組件的pod.
在寫(xiě)業(yè)務(wù)組件1小工程的用到業(yè)務(wù)組件2的內(nèi)容,也就是說(shuō)業(yè)務(wù)組件1的小工程內(nèi)要用到組件2的pod.

不是說(shuō)好組件間不相互引用代碼嗎?[不相互引用]指的是[不直接引用]!組件間肯定存在著存在千絲萬(wàn)縷的關(guān)系,而這種關(guān)系用了pod做包裝,實(shí)現(xiàn)了代碼的物理隔斷.

pod關(guān)系.png
  • 組件小工程引用其他私有組件pod注意點(diǎn)1

還記得podspec文件內(nèi)部的s.dependency字段嗎?

s.dependency  'Masonry'

用到公有庫(kù)要寫(xiě),用到私有庫(kù)也要寫(xiě)哦!
比如KWMineComponent用到了公有庫(kù)Masonry,也用到了私有庫(kù)KWLoginComponent.那么s.dependency字段就要寫(xiě)作:

s.dependency  'Masonry'
s.dependency  'KWLoginComponent'
  • 組件小工程引用其他私有組件pod注意點(diǎn)2

還記得前文part3:演習(xí)==>step4.1:校驗(yàn)的命令pod lib lint?
組件1小工程引用組件2的pod,組件1小工程本身也要做pod的校驗(yàn),命令行就沒(méi)有那么簡(jiǎn)單了!

pod lib lint --sources='https://git.oschina.net/pogongzhang/PGSpecs.git,https://github.com/CocoaPods/Specs' --allow-warnings --verbose --use-libraries

pod lib lint后加上:
1.私有pod所在私有pod倉(cāng)庫(kù)的地址==>https://git.oschina.net/pogongzhang/PGSpecs.git
2.公有庫(kù)地址==>https://github.com/CocoaPods/Specs

--allow-warnings 
--verbose 
--use-libraries
這3句看情況加
2.2 殼工程角度

再看pod關(guān)系.png,從殼工程(mainworkspace)的角度看就是:你們背后是什么勾當(dāng),我不管.在我這,都是一級(jí)扁平化管理.

3.pod實(shí)現(xiàn)組件化 特有的具體的坑

3.1 組件小工程就不用寫(xiě)pch文件

日常開(kāi)發(fā)中我們會(huì)將一些常用的宏,分類,類的頭文件放在pch內(nèi),好全局一起用.現(xiàn)在寫(xiě)組件小工程就不用.因?yàn)樾r?yàn)時(shí)是只看貢獻(xiàn)代碼的,不會(huì)讀pch的.如果你寫(xiě)了pch,并用到了pch的內(nèi)容,校驗(yàn)時(shí)會(huì)報(bào)各種頭文件找不到.

3.2 各種import頭文件

因?yàn)椴荒軐?xiě)pch文件,所以要各種import頭文件.

3.3 加載pod貢獻(xiàn)的資源

前面已經(jīng)講過(guò),pod內(nèi)的圖片,xib,storyboard等資源文件必須要特別注意在podspec文件內(nèi)路徑的配置.當(dāng)然用到這些資源時(shí),也是有要注意的地方.因?yàn)樵嫉拈_(kāi)發(fā)方式,所有代碼與資源都放在[NSBundle mainBundle]內(nèi),而pod實(shí)現(xiàn)組件化的時(shí)候各個(gè)pod會(huì)有自己的Bundle.

  • 加載xib
原始開(kāi)發(fā)加載xib

NSArray * nibs = [[NSBundle mainBundle]loadNibNamed:@"AnyInputView"owner:nil options:nil];
AnyInputView * inputView = [nibs objectAtIndex:0];
pod實(shí)現(xiàn)組件化加載pod內(nèi)xib

NSArray * nibs = [[NSBundle bundleForClass:[加載資源的當(dāng)前類]] loadNibNamed:@"AnyInputView"owner:nil options:nil];
AnyInputView * inputView = [nibs objectAtIndex:0];
  • 加載圖片
原始開(kāi)發(fā)加載圖片

UIImage * image = [UIImage imageNamed:@"any"];
pod實(shí)現(xiàn)組件化加載pod內(nèi)圖片

CGFloat scale_screen = [UIScreen mainScreen].scale;
NSString * path = nil;
NSString * name = @"any";
Class curClass = [加載資源的當(dāng)前類];
if (scale_screen > 2.0){
    NSString * fullname = [NSString stringWithFormat:@"%@@3x", name];
    path = [[NSBundle bundleForClass:curClass] pathForResource:fullname ofType:@"png"];
}else{
    NSString * fullname = [NSString stringWithFormat:@"%@@2x", name];
    path = [[NSBundle bundleForClass:curClass] pathForResource:fullname ofType:@"png"];
}
UIImage * image = [UIImage imageWithContentsOfFile:path];

真刀真槍用pod實(shí)現(xiàn)組件化的時(shí)候會(huì)有各種坑,這里只列出了印象最深的.當(dāng)然要掌握pod實(shí)現(xiàn)組件化看文章是絕對(duì)不夠的,必須真刀真槍的干,自己去踩自己的坑.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妆毕,一起剝皮案震驚了整個(gè)濱河市尿贫,隨后出現(xiàn)的幾起案子壳坪,更是在濱河造成了極大的恐慌,老刑警劉巖拆魏,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異邀泉,居然都是意外死亡买窟,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門贾铝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)隙轻,“玉大人,你說(shuō)我怎么就攤上這事垢揩【谅蹋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵叁巨,是天一觀的道長(zhǎng)斑匪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)锋勺,這世上最難降的妖魔是什么蚀瘸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮庶橱,結(jié)果婚禮上贮勃,老公的妹妹穿的比我還像新娘。我一直安慰自己苏章,他們只是感情好寂嘉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般垫释。 火紅的嫁衣襯著肌膚如雪丝格。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天棵譬,我揣著相機(jī)與錄音显蝌,去河邊找鬼。 笑死订咸,一個(gè)胖子當(dāng)著我的面吹牛曼尊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脏嚷,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼骆撇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了父叙?” 一聲冷哼從身側(cè)響起神郊,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎趾唱,沒(méi)想到半個(gè)月后涌乳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡甜癞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年夕晓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悠咱。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蒸辆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出析既,到底是詐尸還是另有隱情躬贡,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布眼坏,位于F島的核電站逗宜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏空骚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一擂仍、第九天 我趴在偏房一處隱蔽的房頂上張望囤屹。 院中可真熱鬧,春花似錦逢渔、人聲如沸肋坚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)智厌。三九已至诲泌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铣鹏,已是汗流浹背敷扫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诚卸,地道東北人葵第。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像合溺,于是被迫代替她去往敵國(guó)和親卒密。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容