組件化的實(shí)現(xiàn)


為什么要組件化?

1.解決人多(更好的協(xié)作)物赶、需求多(更好的功能模塊劃分)的問題

2.解決項(xiàng)目模塊間的代碼耦合問題;(堅(jiān)決抵制業(yè)務(wù)組件間代碼直接引用)

3.方便進(jìn)行單元測試(每個(gè)模塊就是一個(gè)單元)

4.采用cocoapods引用务热,能夠快速的進(jìn)行版本切換

5.創(chuàng)建新項(xiàng)目時(shí),能夠更快速的搭建

組件化結(jié)構(gòu)


組件集成


組件化的構(gòu)建

1.中間層采用LDBusMediator

2.組件間跳轉(zhuǎn)采用openUrl的形式

例:需要打開ADetail視圖控制器际看,傳遞參數(shù)為image生均,present的形式打開

if([LDBusMediatorcanRouteURL:[NSURLURLWithString:@"productScheme://ADetail"]]){

[LDBusMediatorrouteURL:[NSURLURLWithString:@"productScheme://ADetail"]

withParameters:

@{@"image":@"",

kLDRouteModeKey:@(NavigationModePresent)}

];

}


3.組件間獲取數(shù)據(jù)、調(diào)用方法采用協(xié)議的形式

例:調(diào)用moduleA_deliveAprotocolModel方法邦马,獲取到item1

id item1 =

[[LDBusMediatorserviceForProtocol:@protocol(ModuleAXXXServicePrt)]moduleA_deliveAprotocolModel:item2];

ModuleAXXXServicePrt協(xié)議為

-(id)moduleA_deliveAprotocolModel:(id)item

ModuleAXXXItemPrt協(xié)議為

@protocolModuleAXXXItemPrt

@required

@property(nonatomic,readwrite)NSString*__nonnullitemName;

@property(nonatomic,readwrite)intitemAge;

-(nonnullNSString*)description;

@optional

-(nonnullinstancetype)initWithItemName:(nonnullNSString*)itemName itemAge:(int)itemAge;

@end

4.組件間的實(shí)現(xiàn)

a)所有的組件都以來于LDBusMediator

b)中間件會為每個(gè)組件提供兩個(gè)協(xié)議贱鼻,所有的協(xié)議也可以單獨(dú)成立為一個(gè)組件

該組件需為外部提供的方法

該組件需為外部提供的數(shù)據(jù)

c)每個(gè)組件實(shí)現(xiàn)兩個(gè)協(xié)議

為外部組件提供的方法

為外部組件提供的數(shù)據(jù)

如何創(chuàng)建cocoapods

1.初始化pod倉庫宴卖,使用命令行$?pod?lib?create?XXXX

2.輸入完命令會問你幾個(gè)問題,具體如下:

郵箱

選擇語言邻悬?objc

是否需要demo?yes

選擇一個(gè)測試框架症昏?none

是否基于uiview測試?no

demo類的前綴?XXX

3.輸入完以上信息父丰,會生成以下文件

Example(demo和pod信息在此文件夾下)

README.md(說明文件)

XXXX. podspec(pod庫配置信息)

Pod(類文件肝谭、資源文件)

其他略

4.編輯XXXX.podspec

Pod::Spec.new do |s|

s.name= 'xxxx'

s.version= '0.1.0'

s.summary= 'A shortdescription of xxxxx.'

s.description= <<-DESC

TODO: Add long description of the pod here.

DESC

s.homepage='https://127.0.0.1/svn/xxxx/trunk/xxxx'

s.license= { :type => 'MIT', :file =>'LICENSE' }

s.source= { :svn =>'https://127.0.0.1/svn/xxxx/trunk/xxxx' }#配置svn地址

s.ios.deployment_target = '8.0'

s.source_files = 'xxxx/**/*'#類文件路徑

s.public_header_files = ''#公開頭文件引用

#s.prefix_header_contents = ''#預(yù)編譯文件名

s.resources = 'xxxx/xxxxx.bundle'#資源文件(xib、圖片等)必須放到bundle下

s.frameworks = 'UIKit'#需要引用的類庫蛾扇,可不寫

s.dependency 'SVProgressHUD'#依賴類庫攘烛,可以指定版本,不指定默認(rèn)為最新

s.dependency 'LDBusMediatorLibrary'#依賴中間層镀首,必須寫坟漱。同時(shí)Podfile里必須引入該庫,否則會報(bào)錯(cuò)

end

“*”表示匹配所有文件

“*.{h,m}”表示匹配所有以.h和.m結(jié)尾的文件

“**”表示匹配所有子目錄

此處為子空間更哄,可以分開導(dǎo)入不同的pods倉庫

s.subspec 'NetWorkEngine' do |networkEngine|

networkEngine.source_files ='Pod/Classes/NetworkEngine/**/*'

networkEngine.public_header_files ='Pod/Classes/NetworkEngine/**/*.h'

networkEngine.dependency 'AFNetworking','~> 2.3'

networkEngine.resource= "Pod/Assets/MLSUIKitResource.bundle"

end


5.驗(yàn)證

a)正常項(xiàng)目在命令行輸入pod spec lint驗(yàn)證芋齿,當(dāng)提示如下,則通過驗(yàn)證

->XXXX(0.1.0)

XXXX passed validation

b)xcode8報(bào)錯(cuò)

ERROR | [iOS]unknown: Encountered an unknown error (Must be in the root of the repo(/Users/zhouhuanqiang/.cocoapods/repos/master), instead in/Users/zhouhuanqiang/Desktop/IM.) during validation.

原因是xcode8路徑改了成翩,執(zhí)行以下命令即可解決

sudo xcode-select -switch/Applications/Xcode.app/Contents/Developer

c)因?yàn)槲覀兊捻?xiàng)目需要依賴私有庫觅捆,需輸入pod lib lint --quick --allow-warnings命令來通過驗(yàn)證

6.更新pod開發(fā)

a)進(jìn)入Example文件夾,執(zhí)行pod install便可進(jìn)行Demo編寫

b)關(guān)于依賴庫麻敌,所以Podfile文件里應(yīng)加入以下配置信息

#正式

pod'LDBusMediatorLibrary',

:svn =>'https://127.0.0.1/svn/xxxx/',:tag =>"modules/LDBusMediatorLibrary/0.1.2"

#測試

#pod 'LDBusMediatorLibrary', :svn=>'https://127.0.0.1/svn/xxxx/trunk/modules/LDBusMediatorLibrary'

7.添加到tags版本下

代碼提交后栅炒,使用命令行來打tags

svn copy主干路徑 tags路徑–m “說明”


8打包成.a文件和framework

http://www.cnblogs.com/brycezhang/p/4117180.html

參考文件

使用cocoapods管理svn路徑下庫文件

iOS組件化思路-大神博客研讀和思考

iOS組件化實(shí)踐方案-LDBusMediator煉就

iOS組件化方案調(diào)研

組件化架構(gòu)漫談

CocoaPods建立自己的Podspec(三)



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市庸论,隨后出現(xiàn)的幾起案子职辅,更是在濱河造成了極大的恐慌棒呛,老刑警劉巖聂示,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異簇秒,居然都是意外死亡鱼喉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門趋观,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扛禽,“玉大人,你說我怎么就攤上這事皱坛”嗦” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵剩辟,是天一觀的道長掐场。 經(jīng)常有香客問我往扔,道長,這世上最難降的妖魔是什么熊户? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任萍膛,我火速辦了婚禮,結(jié)果婚禮上嚷堡,老公的妹妹穿的比我還像新娘蝗罗。我一直安慰自己,他們只是感情好蝌戒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布串塑。 她就那樣靜靜地躺著,像睡著了一般北苟。 火紅的嫁衣襯著肌膚如雪拟赊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天粹淋,我揣著相機(jī)與錄音吸祟,去河邊找鬼。 笑死桃移,一個(gè)胖子當(dāng)著我的面吹牛屋匕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播借杰,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼过吻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蔗衡?” 一聲冷哼從身側(cè)響起纤虽,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绞惦,沒想到半個(gè)月后逼纸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡济蝉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年杰刽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片王滤。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贺嫂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雁乡,到底是詐尸還是另有隱情第喳,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布踱稍,位于F島的核電站曲饱,受9級特大地震影響吩跋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜渔工,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一锌钮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧引矩,春花似錦梁丘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至区端,卻和暖如春值漫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背织盼。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工杨何, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沥邻。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓危虱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親唐全。 傳聞我的和親對象是個(gè)殘疾皇子埃跷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

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

  • 項(xiàng)目組件化、平臺化是技術(shù)公司的共同目標(biāo)邮利,越來越多的技術(shù)公司推崇使用pod管理第三方庫以及私有組件弥雹,一方面使項(xiàng)目架構(gòu)...
    swu_luo閱讀 21,750評論 0 39
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)延届,斷路器剪勿,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 最近在學(xué)習(xí)vue.js的時(shí)候發(fā)現(xiàn),vue的組件化的思想對于編寫代碼是一個(gè)非常有用的事情祷愉。 首先為什么需要組件化窗宦? ...
    拂曉的云閱讀 7,172評論 6 23
  • Cocoapods是非常好用的一個(gè)iOS依賴管理工具赦颇,使用它可以方便的管理和更新項(xiàng)目中所使用到的第三方庫二鳄,以及將自...
    Nash33閱讀 2,084評論 0 50
  • 一月前: 陳杦遇到了一個(gè)人,他溫暖如她最喜歡的清晨日出媒怯,也熱辣如夜間五顏六色撲閃撲閃的電音订讼。 “我找到理想...
    陳杦閱讀 235評論 0 1