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命令时,如果本地索引文件不存在,会创建这个文件。 - 如果这个文件存在,则会在此文件中进行索引,确认所需要的框架是否存在。
私有库
参考:
a. 快速创建私有库模版库
- pod lib create LXFBase 配置模版信息
- 添加组件内容,将组件代码放入Class文件夹下
- pod 'LXFBase', :path => '../' 本地自动化测试
b. 上传组件代码
- 将代码提交到组件仓库
- 打标签 标签0.1.0与spec中的s.version保持一致
c. 远程私有索引库
- 创建远程私有索引库
- 本地pod添加远程私有索引库
- pod repo add LXFSpecs gitee.com/LinXunFeng/…
d. 上传podspec
- 添加.podspec
- s.source 真实下载地址(组件仓库)
- s.source_files 需要引入的文件
- 提交podspec到私有索引库
e. 使用私有库
- 在Podfile的最顶部添加如下描述
- // 第二行是为了保证公有库的正常使用
- source 'gitee.com/LinXunFeng/…'
- source 'github.com/CocoaPods/S…'
- 添加使用组件LXFBase
- pod 'LXFBase'
f. 更新远程私有库
- 代码更新,提交tag
- 修改本地的私有库podspec
- s.version = '0.2.0'
- 更新索引库
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'
-
组件化
参考:
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处再把字典拆包成常规参数,这就造成了一部分的硬编码。