美文网首页
组件化的实现

组件化的实现

作者: 佐筱猪 | 来源:发表于2016-11-09 15:04 被阅读243次

    为什么要组件化?

    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(三)



    相关文章

      网友评论

          本文标题:组件化的实现

          本文链接:https://www.haomeiwen.com/subject/czizuttx.html