美文网首页
iOS组件化及通信方式(一)

iOS组件化及通信方式(一)

作者: yangfei02821 | 来源:发表于2021-02-03 18:58 被阅读0次

iOS组件化
组件化方案及通信方式

组件化介绍

cocoapods机制
基础-podSpec使用
一、上传cocoapods过程

1、开发框架,上传第三方代码管理平台
2、创建框架描述spec,包含:框架名称、版本、真正代码存放地址=远程地址
3、上传spec到cocopods的远程索引库

二、cocoapods机制

1、在git上有cocoapods的远程索引库https://github.com/CocoaPods/Specs
2、通过pod setup 将远程索引库下载到本地,
3、本地索引库还有一个检索索引文件,
4、当添加第三方库的时候先去检索索引文件查找,再去本地索引库查找,然后再去真正的代码存放地址去下载第三方库。

三、组件化实践
组件化私有库
组件化实践
组件化实践详解

过程与cocoapods相似
1、创建自己的私有远程索引库
2、拉取私有远程索引库到本地
3、将自己的私有框架代码上传私有库中
4、将私有框架代码中的spec文件上传私有远程索引库
5、使用时,在Podfile添加source,下载过程同cocoapods

四、将组件化源码变成静态库

1、添加静态库的targets


1添加静态库的targets

2、拖动calss下的文件到targets下,选择方式为引用


2拖动文件夹
3、更改描述文件
# vendored_frameworks 仅仅是针对于, 我们创建编译之后的库, 是framework
# .a s.vendored_libraries = "xxxx"

if ENV['IS_SOURCE'] || ENV['XMGDownLoad']
    s.source_files = 'XMGDownLoad/Classes/**/*'
else
    s.source_files = 'XMGDownLoad/Classes/**/*.h'
    s.vendored_frameworks = 'XMGDownLoad/Products/XMGDownLoad.framework'
end

注:添加方式都可以,区别:Xcode工程,蓝色文件夹、黄色文件夹以及 .bundle文件的区别
Greate groups:是在工程中,添加一个分组,和文件目录中的文件存放位置没有绝对的对应关系,在项目中可能在一个groups中的文件,在访达中可能是凌乱的或者分布在多个文件夹下。可以参加编译。
Greate folder references:是添加了一个文件夹的引用,并且在这个目录不会添加到工程编译目录,换句话说就是这个目录下的文件不能被其他的group中的文件包含。

五、库版本一致,代码不同,安装新的库,需要删除pod缓存,安装最新的库

pod cache clean --all

组件化通信方式

1、url-block

也就是常说的蘑菇街组件化方案,主要是在启动的时候(load方法中)注册组件间提供的服务,建立url和block对应关系(调用方使用url,找到对应组件方提供服务的block,获取组件对外提供的服务。
这种方式在从已有项目中进行组件拆分效果比较好,最大的优势体现在解耦方面,使用此方案可以迅速对已有业务进行拆分。但是实际在使用过程中会比较大的弊端。比如:
1、需要维护url-block的表(如果url书写错误那么组件会不起作用)
2、参数传递方面的限制会比较大,通过url带参的方式,一些特殊类型没法传递(NSData、UIImage等等)
3、需要一个Router的配合,组件越多Router会越复杂,耦合较多

2、target-action

目前使用最多且耦合性最小方案
给组件封装一层target来对外提供服务,不会对原来组件造成入侵;通过实现中间件的Category来提供服务给宿主,宿主只需要依赖中间件,而组件则不需要依赖中间件。
弊端:
1、代码量会比较大,在对外提供服务的基础上需要增加一个category与之对应
2、对于一些model的使用,基于通用性以及高内聚的原则,最好使用NSDictionary的方式去model化,所以这块的维护是一个比较大的工作量,随着业务的修改,改变不可避免

3、直接使用宿主工程作为中间件

我们的业务需求,底层库是统一的,需要单独抽离出来,但是业务层各个业务线各不相同,直接就算一个宿主工程,我们只需要把底层库披露统一的api和注册代理,就可以完成宿主工程和底层库的通信。

相关文章

  • iOS组件化及通信方式(一)

    iOS组件化[https://www.jianshu.com/p/1446a3c2f786]组件化方案及通信方式[...

  • iOS组件化及架构设计

    iOS组件化及架构设计 iOS组件化及架构设计

  • 组件化方案及通信方式

    组件化开发越来越成为了公司项目开发的主流,随着公司业务的不断发展,项目功能的堆叠,各个业务代码耦合会越来越严重,给...

  • OC底层面试题-组件化通信(下)

    上篇我们知道了如何创建组件化项目,这篇我们来聊聊组件化的重点:组件化通信 组件化通信方法 目前所了解的主流方式有一...

  • 面试3

    12、iOS组件化 iOS组件化及架构设计关于组件化网上组件化的文章很多。很多文章一提到组件化,就会说解耦,一说到...

  • iOS 组件化通信

    最近新接触的项目开发方式使用的组件化开发的,以前从来没有接触过,也去网上找了些资料进行同步。组件化的每个模块都应该...

  • Github 创建私有库

    基于当前GitHub规则,创建私有库方法。 实现iOS的组件化开发 组件化,是一种解耦方式,适用团队协同开发及开源...

  • iOS:组件化的三种通讯方案

    组件化 本文主要介绍组件化常用三种通讯方式. 常⽤的三种组件化通讯方案 组件化通信方案组件化最重要的是兄弟模块的通...

  • 插件化、组件化?what?

    组件化? 挂载到组件总线上的业务组件,都可以实现双向通信.而通信协议和HTTP通信协议类似,即基于URL的方式进行...

  • iOS组件化

    iOS组件化 iOS组件化

网友评论

      本文标题:iOS组件化及通信方式(一)

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