0
点赞
收藏
分享

微信扫一扫

iOS 组件化(一)

RockYoungTalk 2021-09-19 阅读 116
iOS进阶

组件化

组件化就是将模块单独抽离,分层,通过制定的通讯方式,实现解耦

组件化优点
  • 模块间的解耦
  • 模块重用
  • 提交团队开发效率
  • 单元测试
需要组件化的情况
  • 各个模块之间相互引用严重,造成高耦合导致项目维护困难
  • 项目规模变大,团队人数变多,导致合并代码经常冲突
  • 项目编译耗时很长
  • 模块需要进行单元测试
不需要组件化的情况
  • 项目较小,模块简单,耦合小
  • 模块没有被多个外部模块引用,只是一个小模块
  • 团队规模小
  • 不需要进行单元测试
组件化的标准
  • 模块直接没有耦合,修改自己不会改变其他模块
  • 模块可以单独编译
  • 模块间数据传递明确,对外接口清晰易维护
  • 模块随时可以被相同功能的模块代替
  • 模块接口改变时,可以高效的重构
组件化分层

项目在进行组件化时,通常分为三层:基础层通用层业务层

  • 只能上层对下层依赖
  • 项目公共资源下沉
  • 横向依赖下沉至通用层或者基础层

组件化方案
  • 本地组件化:通过创建library,利用cocoapodsworkspec进行本地管理,通过framework方式直接调用
  • cocoapods组件化:将模块上传到私有库,通过cocoapods远程管理

本地组件化

1、创建主工程
  • 创建主工程
  • 集成cocoapods
  • 编辑Podfile,执行pod install

2、创建组件

我们创建一个Base模块

  • 选择File --> new --> iOS --> Framework

  • 选择正确的WorkSpaceGroup,最好放在主工程目录下

  • 修改创建的library静态库

3、调用library
  • 新建一个文件,并添加外部属性


  • 将需要暴露的外部接口文件,移动到Build Phases -> Headers -> Public

  • 在主工程下,选择target --> Build Phases --> Link Binary With Libraries,添加YPBaseModule

  • 在主工程下,选择Target ->Build Setting -> Search Paths -> User Header Search Paths里面添加${SRCROOT}

4、使用

**子library之间相互调用和主工程调用类似,只需要添加依赖和暴露header *

5、cocoapods管理三方依赖

platform :ios, '10.0'
use_frameworks!

#配置workspace路径
workspace 'YPProject.xcworkspace'

################# 三方依赖
# 公有
def workspace_pods
  pod 'YYModel'
end

# 主工程
def project_only_pods
  pod 'Masonry'
end

#网络
def network_layer_pods
  pod 'AFNetworking'
end

################# 模块
target 'YPBaseModule' do
  #配置library路径
  project 'YPProject/YPBaseModule.xcodeproj'
  
  workspace_pods
  network_layer_pods
end

################# 主工程
target 'YPProject' do
  workspace_pods
  project_only_pods
  network_layer_pods
end

cocoapods组件化

1、创建私有仓库
  • 登录github --> 点击右上角+号 --> 选择new repository --> 输入仓库名字,选择仓库类型为private,点击创建
  • 将私有库添加到本地~/.cocoapods/repos目录
pod repo add TestModule https://github.com/Ymuyangyin/TextModule
2、创建工程
  • 终端创建YPServices模块
pod lib create YPServices
  • 根据提示输入


  • 将模块代码拷贝到/YPServices/Classes目录下

  • 执行pod install,Classes目录下的文件就会更新到pods

3、配置
通过修改配置文件YPServices.podspec
  • 添加第三方库依赖
s.dependency 'AFNetworking'
  • 其他模块引用
//1、修改对应的podspec
s.dependency 'YPServices'
//2、修改podfile
pod 'YPServices',  :path => '../../YPServices'

  • 加载图片、xib、bundle等文件

    • 对应模块的Assets文件中添加资源文件
    • spec配置资源文件路径
      s.resource_bundles = {
       'YPServices' => ['YPServices/Assets/*']
     }
    
    • 访问模块的资源文件需要指定资源文件路径
    NSString *path = [[NSBundle bundleForClass:[YPServices class]]  pathForResource:@"Player_Video_Url" ofType:@"json"];
    NSData *data = [NSData dataWithContentsOfFile:path];
    
    YPErrorView *errorView = [[[NSBundle bundleForClass:[YPServices class]]loadNibNamed:NSStringFromClass([YPErrorView class]) owner:nil options:nil] lastObject];
    
    
4、提交到git
git init

git add .

git commit -am "首次提交"
//模块仓库地址
git remote add origin https://github.com/Ymuyangyin/YPServices

git push origin master
//添加标签 版本号
git tag -m "first release" "0.1.0"

git push --tags
5、验证podspec文件
  • pod lib lint :验证本地仓库
  • pod spec lint:验证本地和远程仓库
6、提交到私有仓库
pod repo push [本地 Spec Repo名称] [podspec文件路径]
//------------
pod repo push TestModule YPServices.podspec
7、使用

打开podfile文件,添加下面指令,执行pod install

#私有spec仓库的地址,而不是某个pod仓库的地址
source 'https://github.com/Ymuyangyin/TestModule'
pod 'YPServices'
举报

相关推荐

0 条评论