iOS之组件化 二

528 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

创建组件

使用CocoaPods,可分为本地和远程两种方式搭建组件化工程

  • 本地:通过项目中创建模块,利用CocoaPodsworkspec进行本地管理,不需要将项目上传git,而是在项目的Podfile中指定目录
  • 远程:利用CocoaPods进行模块的远程管理,需要将项目上传git。对公司项目而言,一般使用私有库

下面我们以本地方式为例,搭建一个组件化工程

创建LGHomeModule模块

pod lib create LGHomeModule

-------------------------
//对模块进行以下配置:

//工程类型
What platform do you want to use?? [ iOS / macOS ]
 > iOS

//开发语言
What language do you want to use?? [ Swift / ObjC ]
 > objc

//创建App测试项目
Would you like to include a demo application with your library? [ Yes / No ]
 > yes

//提供frameworks的测试
Which testing frameworks will you use? [ Specta / Kiwi / None ]
 > none

//提供测试文件
Would you like to do view based testing? [ Yes / No ]
 > no

//设置前缀
What is your class prefix?
 > LG

配置完成后,生成以下工程:

image-47.png 进行组件的开发,真正的代码目录在Pods项目的LGHomeModule中,而LGHomeModule是对组件进行测试使用

image-48.png 在组件中完成Home模块的业务代码

image-49.png 在测试工程Example目录下,执行pod install

image-50.png 打开工程,组件成功导入

image-51.png

三方和本地组件的依赖

三方框架

日常我们开发的组件,有些功能会依赖于其他三方框架,此时我们需要对其进行额外的配置

创建通用UI组件LGCommonUIModule

pod lib create LGCommonUIModule

完成组件的业务代码,部分功能依赖于AFNetworkingMasonry框架

image-52.png 配置组件的Pod文件,写入对三方框架的依赖

image-53.png 在测试工程Example目录下,执行pod install,解决三方框架的依赖问题

本地组件

除了三方框架的依赖,我们的组件也会对下层的本地组件进行依赖,例如:分类和宏定义等

LGCommonUIModule插件中,对下层的公共组件LGMacroAndCategoryModule进行依赖,并且代码中使用到插件中的分类和宏

image-54.pngPod文件中,按照三方库的导入方式

  s.dependency 'AFNetworking'
  s.dependency 'Masonry'
  s.dependency 'LGMacroAndCategoryModule'
  
  s.prefix_header_contents = '#import "Masonry.h"','#import "UIKit+AFNetworking.h"','#import "LGMacros.h"'
  • 如果公共组件在云端,当然不会有任何问题。但案例中,使用本地组件,这种导入方式一定会报错 导入本地组件,除了上述的配置之外,还需要在Pods项目中的Podfile文件中,对公共组件的本地路径进行配置

image-55.png 以当前的Podfile文件路径为基础,向上两层,找到LGMacroAndCategoryModule本地组件

image-56.png 在测试工程Example目录下,执行pod install,解决本地组件的依赖问题