Cocoapods、私有库、组件化等知识总结

768 阅读3分钟

Cocoapods

参考:

你真的会用 CocoaPods 吗?

工作流程

CocoaPods 工作流程

远程索引库

  • 远程索引库里存放的是各种框架的描述信息,每个框架下有数个版本,每个版本有一个 json 格式的描述信息。
{ 
 "name": "CAIStatusBar",
 "version": "0.0.1",
 "summary": "A simple indicator",
 "homepage": "https://github.com/apple5566/CAIStatusBar.git",
 "license": "MIT",
 "authors": { "apple5566": "zaijiank110@sohu.com" },
 "platforms": { "ios": "6.0" },
 "source": { "git": "https://github.com/apple5566/CAIStatusBar.git", "tag": "0.0.1" },
 "source_files": "CAIStatusBar/**/*.{h,m}",
 "resources": "CAIStatusBar/CAIStatusBar.bundle",
 "requires_arc": true 
 }
  • 其中 git 字段表示该框架的托管地址,也就是上面时序图中的 远程框架库

本地索引库

  • pod setup 命令就是将远程索引库克隆到本地来
  • 本地索引库和远程索引库的目录一致 本地索引库

本地索引文件

  • 当执行 pod search 命令时,如果本地索引文件不存在,会创建这个文件。
  • 如果这个文件存在,则会在此文件中进行索引,确认所需要的框架是否存在。

私有库

参考:

iOS 组件化开发(一):远程私有库的基本使用

iOS 组件化开发(二):远程私有库的更新与子库

a. 快速创建私有库模版库

  1. pod lib create LXFBase 配置模版信息
  2. 添加组件内容,将组件代码放入Class文件夹下
  3. pod 'LXFBase', :path => '../' 本地自动化测试

b. 上传组件代码

  1. 将代码提交到组件仓库
  2. 打标签 标签0.1.0与spec中的s.version保持一致

c. 远程私有索引库

  1. 创建远程私有索引库
  2. 本地pod添加远程私有索引库

d. 上传podspec

  1. 添加.podspec
    • s.source 真实下载地址(组件仓库)
    • s.source_files 需要引入的文件
  2. 提交podspec到私有索引库

e. 使用私有库

  1. 在Podfile的最顶部添加如下描述
  2. 添加使用组件LXFBase
    • pod 'LXFBase'

f. 更新远程私有库

  1. 代码更新,提交tag
  2. 修改本地的私有库podspec
    • s.version = '0.2.0'
  3. 更新索引库

g. 子库

  • 当需要单独引入私有库的某几个功能,可以使用子库
# s.source_files = 'LXFBase/Classes/**/*'
# s.dependency 'SDWebImage', '~> 4.3.3'

s.subspec 'Cache' do |c|
  c.source_files = 'LXFBase/Classes/Cache/**/*'
  c.dependency 'SDWebImage', '~> 4.3.3'
end

s.subspec 'Category' do |c|
  c.source_files = 'LXFBase/Classes/Category/**/*'
end

s.subspec 'Tool' do |t|
  t.source_files = 'LXFBase/Classes/Tool/**/*'
end
  • 使用子库
    • pod 'LXFBase/Cache'

组件化

参考:

iOS 组件化 —— 路由设计思路分析

URLRoute注册方案的优缺点

优点

  • 它通过URL来请求资源。不管是H5,RN,Weex,iOS界面或者组件请求资源的方式就都统一了。
  • 服务器可以动态的控制页面跳转,可以统一处理页面出问题之后的错误处理,可以统一三端,iOS,Android,H5 / RN / Weex 的请求方式。

缺点

  • 首先URL的map规则是需要注册的,它们会在load方法里面写。写在load方法里面是会影响App启动速度的。
  • URL链接里面关于组件和页面的名字都是硬编码,参数也都是硬编码。
  • 每个URL参数字段都必须要一个文档进行维护,这个对于业务开发人员也是一个负担。而且URL短连接散落在整个App四处,维护起来实在有点麻烦。

Protocol-Class注册方案的优缺点

优点

  • Protocol-Class方案的优点,这个方案没有硬编码。

缺点

  • 这种方案ModuleEntry是同时需要依赖ModuleManager和组件里面的页面或者组件两者的。
  • 最后一个缺点是组件方法的调用是分散在各处的,没有统一的入口,也就没法做组件不存在时或者出现错误时的统一处理。

Target-Action方案的优缺点

优点

  • Target-Action方案的优点,充分的利用Runtime的特性,无需注册这一步。
  • Target-Action方案也能有一定的安全保证,它对url中进行Native前缀进行验证。

缺点

  • Target-Action方案的缺点,Target_Action在Category中将常规参数打包成字典,在Target处再把字典拆包成常规参数,这就造成了一部分的硬编码。