1、前言
就像 Git
有 Submodules
(子模块)共享库的代码,CocoaPods
也有 Subspecs
(子库)的功能,用于共享库的部分代码。
2、Subspecs(子库)
为什么要使用子库?
假设我们实现了一个完整的远程私有库 BaseComponent
,可以升级,依赖其他的库,提供给其他人使用,但是现在还有一点问题,其他人如果要用我们的库,就需要把 BaseComponent
完整的克隆过来,但是他可能只需要 BaseComponent
里面的 Network
,其他的扩展、工具等并不想使用,也不想导入过来,怎么办?
有两种方案:
- 把
Network
剥离出来,再单独建一个远程私有库; - 使用子库迁出
Network
;
第一种方案大家都知道了,麻烦不说,而且东西一多起来,这里一个库,那里一个库,也不容易管理,所以,下面就有请子库隆重登场~
什么是子库?
使用 pod search AFNetworking
搜索 AFNetworking
时,可以发现AFNetworking有5个子库 Subspecs
:
1 | -> AFNetworking (3.1.0) |
- Subspecs:
- AFNetworking/Serialization (3.1.0)
- AFNetworking/Security (3.1.0)
- AFNetworking/Reachability (3.1.0)
- AFNetworking/NSURLSession (3.1.0)
- AFNetworking/UIKit (3.1.0)
AFNetworking 划分5个子库,每个的功能都是相对独立的模块,这样一个库分解,不管是从设计还是开发,都是有利于框架和解耦。而如果只用其中的一些模板,则也非常方便,下面会详细讲解。
子库怎么用?
可以一次只引用一个子库:
1 | pod 'AFNetworking/Security' |
也可以这样指定多个子库:
1 | pod 'AFNetworking', :subspecs => ['Security', 'Reachability'] |
怎么创建子库?
- AFNetworking.podspec 示例:
1 | Pod::Spec.new do |s| |
- 创建多个Subspecs(Subspecs with different source files.):
1 | subspec 'Twitter' do |st| |
- Subspecs里又依赖于其他subspecs。(Subspecs referencing dependencies to other subspecs.):
1 | Pod::Spec.new do |s| |
- 嵌套的subspecs。(Nested subspecs.)
1 | Pod::Spec.new do |s| |
注意事项
1.pod下来的Pods
目录下的库,不在以真实的文件夹区分子库,只会显示全部的源代码文件:
2.如果使用子库方式 pod 下来,那么那些没有未分到子库的源代码文件不会 pod 到项目中,如果需要使用必须放到一个子库中,或者整个库 pod 下来。
3.子库下的目录文件包含关系,是否遍历子路径的问题
3、总结
CocoaPods
是一个非常强大的iOS库管理工具,所以能满足大多数框架开发下的业务逻辑的功能,另外,项目随着时间和开发迭代,越来越庞大,而公司可能有新业务,而底层公共功能接口是一样的。此时,为了快速开发,子库的作用是非常明显的。CocoaPods
是用 Ruby
开发的,所以,有时候还是学习一下,这对于理解 CocoaPods
非常有帮助,也能自主修改CocoaPods
功能,任重路远,加油~
参考扩展
- CocoaPods Guides subspec - Podspec Syntax Reference v1.2.0.beta.1
- 你真的会用 CocoaPods 吗 - 简书
- 使用CocoaPods进行Xcode的项目依赖管理 - Cocoa开发者
- Git submodule 使用 ←
- 如有疑问,欢迎在评论区一起讨论!
- 如有不正确的地方,欢迎指导!
> 注:本文首发于 [iHTCboy's blog](https://iHTCboy.com),如若转载,请注来源