組件化的實現


為什么要組件化?

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

2.解決項目模塊間的代碼耦合問題;(堅決抵制業務組件間代碼直接引用)

3.方便進行單元測試(每個模塊就是一個單元)

4.采用cocoapods引用,能夠快速的進行版本切換

5.創建新項目時,能夠更快速的搭建

組件化結構


組件集成


組件化的構建

1.中間層采用LDBusMediator

2.組件間跳轉采用openUrl的形式

例:需要打開ADetail視圖控制器,傳遞參數為image,present的形式打開

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

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

withParameters:

@{@"image":@"",

kLDRouteModeKey:@(NavigationModePresent)}

];

}


3.組件間獲取數據、調用方法采用協議的形式

例:調用moduleA_deliveAprotocolModel方法,獲取到item1

id item1 =

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

ModuleAXXXServicePrt協議為

-(id)moduleA_deliveAprotocolModel:(id)item

ModuleAXXXItemPrt協議為

@protocolModuleAXXXItemPrt

@required

@property(nonatomic,readwrite)NSString*__nonnullitemName;

@property(nonatomic,readwrite)intitemAge;

-(nonnullNSString*)description;

@optional

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

@end

4.組件間的實現

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

b)中間件會為每個組件提供兩個協議,所有的協議也可以單獨成立為一個組件

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

該組件需為外部提供的數據

c)每個組件實現兩個協議

為外部組件提供的方法

為外部組件提供的數據

如何創建cocoapods

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

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

郵箱

選擇語言?objc

是否需要demo?yes

選擇一個測試框架?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 = ''#預編譯文件名

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

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

s.dependency 'SVProgressHUD'#依賴類庫,可以指定版本,不指定默認為最新

s.dependency 'LDBusMediatorLibrary'#依賴中間層,必須寫。同時Podfile里必須引入該庫,否則會報錯

end

“*”表示匹配所有文件

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

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

此處為子空間,可以分開導入不同的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.驗證

a)正常項目在命令行輸入pod spec lint驗證,當提示如下,則通過驗證

->XXXX(0.1.0)

XXXX passed validation

b)xcode8報錯

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路徑改了,執行以下命令即可解決

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

c)因為我們的項目需要依賴私有庫,需輸入pod lib lint --quick --allow-warnings命令來通過驗證

6.更新pod開發

a)進入Example文件夾,執行pod install便可進行Demo編寫

b)關于依賴庫,所以Podfile文件里應加入以下配置信息

#正式

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組件化實踐方案-LDBusMediator煉就

iOS組件化方案調研

組件化架構漫談

CocoaPods建立自己的Podspec(三)



最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 項目組件化、平臺化是技術公司的共同目標,越來越多的技術公司推崇使用pod管理第三方庫以及私有組件,一方面使項目架構...
    swu_luo閱讀 22,256評論 0 39
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,951評論 19 139
  • 最近在學習vue.js的時候發現,vue的組件化的思想對于編寫代碼是一個非常有用的事情。 首先為什么需要組件化? ...
    拂曉的云閱讀 7,232評論 6 23
  • Cocoapods是非常好用的一個iOS依賴管理工具,使用它可以方便的管理和更新項目中所使用到的第三方庫,以及將自...
    Nash33閱讀 2,107評論 0 50
  • 一月前: 陳杦遇到了一個人,他溫暖如她最喜歡的清晨日出,也熱辣如夜間五顏六色撲閃撲閃的電音。 “我找到理想...
    陳杦閱讀 251評論 0 1