iOS组件化初探( 六 )


specification提供了subspec属性专门用来配置 sub-specifications , 下面是Cocoapods官网对于subspec属性的介绍:

?subspec
Represents specification for a module of the library.
Subspecs participate on a dual hierarchy.
On one side, a specification automatically inherits as a dependency all it children ‘sub-specifications’ (unless a default subspec is specified).
On the other side, a ‘sub-specification’ inherits the value of the attributes of the parents so common values for attributes can be specified in the ancestors.
大意为:subspec描述了该组件库中的一个子组件 。具有两层含义 , 一是 , 除非特殊说明 , 所有的子组件都是依赖其父组件;二是 , 子组件继承了父组件的属性值 。
从描述中可以看出 , 一个组件内可以包含若干个子组件 。以《跟客宝》为例 , 除了QRCodeReader , 我们将项目中其他的功能组件也都独立了出来放到统一的父组件内 , 并将这些功能组件配置成为子组件 , 父组件命名为FocusUtility 。
在FocusUtility.podspec文件中添加以下配置:
spec.subspec 'QRCodeReader' do |reader|reader.source_files = 'QRCodeReader/**/*.{swift,m,c,h}'endspec.subspec 'ImageViewer' do |viewer|viewer.source_files = 'ImageViewer/**/*.{swift,m,c,h}'endspec.subspec 'ImagePicker' do |picker|picker.source_files = 'ImagePicker/**/*.{swift,m,c,h}'endspec.subspec 'DateRangePicker' do |picker|picker.source_files = 'DateRangePicker/**/*.{swift,m,c,h}'end使用spec.subspec来声明一个子组件 , 并配置它的源文件路径 。这里声明了四个子组件 , 无论是父组件还是子组件 , 都需要对应的podspec文件 , 子组件的podspec文件编写方式与之前介绍的一致 , 此处不再介绍 。
在集成FocusUtility组件时 , 可以选择集成它的全部子组件 , 也可以只集成它的部分子组件 。
# 集成所有子组件pod 'FocusUtility', :path => '../FocusUtility'# 仅集成其中的 QRCodeReader 组件pod 'FocusUtility/QRCodeReader', :path => '../FocusUtility'这样就把零碎的功能组件集中起来 , 相较于每个小组件都制作成独立组件 , 子组件的方式无疑降低了管理复杂度 。
7.结束语到此为止 , 一个最简单的组件化实践流程就结束了 。为什么说是最简单的呢?
  1. 组件体量小;
  2. 不存在复杂依赖关系;
  3. 仅考虑 Swift 实现 , 未加入 OC 支持;
  4. 一人对项目实施组件化后 , 未考虑如何让组内其他人也快速的完成组件化;
  5. 没有组件的版本管理;
  6. 没有组件间的依赖关系管理等 。
这些都是实施一个完整的组件化方案所必须的 , 不过组件化是一个循序渐进的过程 , 方案的内容也会不断地更新和完善 。本篇仅作为组件化探索的初级方案供大家参考 , 随着项目组件化的不断深入 , 针对上述的几个问题再为大家带来更加完善的管理方案!
8.参考文档1.https://cocoapods.org
2.https://dreampiggy.com/2018/11/26/CocoaPods的资源管理和Asset%20Catalog优化/
 
作者:兰福东
来源:微信公众号:搜狐技术产品
出处
:https://mp.weixin.qq.com/s/Nk2ig6SV-qG2Q90lwBOO4w




推荐阅读