终于迎来了我们《虾票票》入门iOS系列的最后一节——CocoaPods的介绍和使用。
话不多说,我将按照上述大纲的四个步骤开始讲解。
是什么、为什么、怎么用?
CocoaPods是什么❓
官方解释,它是一个开发iOS应用程序的第三方库依赖管理工具。
为什么要使用它呢❓
因为它能自动化地、集中地、直观地管理第三方开源库,这里可以类比gradle、npm等等。
PS:iOS常用框架集成方式对比如下,参考《极客时间》。
怎么使用呢❓
- 首先要安装~
- 前提--安装Ruby:
brew install ruby
,CocoaPods是基于Ruby来构建的; - 安装CocoaPods:
sudo gem install -n /usr/local/bin cocoapods
,gem
是是Ruby模块的包管理器; - 安装spec仓库❗️到本地:
pod setup
,spec仓库体积较大,喝一杯☕️等待~
- 前提--安装Ruby:
- 使用步骤如下:
cd [项目根目录]
- 初始化pod:
pod init
,即可生成Podfile文件; - 编辑Podfile❗️
- 在项目中集成对应的代码库❗️:
pod install
- 使用时,
#import <头文件>
即可。
细心的你可能会发现上面的3个❗️,这是今天的重点🎺🎺🎺,让我们带着下面两个问题继续往下看:
- 如何编辑Podfile呢?
- spec仓库和代码库是什么,它们有什么区别?可以暂时理解为说明书和实物。
首先看第一个问题:如何编辑Podfile呢?
编辑Podfile
Podfile的基本模版如下:
platform :ios, '9.0' # 指定设备平台「iOS」和最低支持版本号「9.0」
inhibit_all_warnings! # 禁止所有警告
use_frameworks! # 使用动态库,否则使用静态库
target 'MyApp' do # target指定针对的target名称
pod 'Masonry', # 导入Mansonry的最新版本
pod 'YYModel', '1.0.4' # 导入YYModel的1.0.4版本
pod 'ObjectiveSugar', '>= 0.5.2' # 导入ObjectiveSugar>=0.5.2的最新版本
target 'MyAppTests' do # 嵌套测试的target
inherit! :search_paths # 继承上者的搜索路径(至少包含上述第三方库)
pod 'OCMock', '~> 2.0.4' # 导入OCMock>=2.0.4且<2.1的最新版本
end
end
- 注意版本号的匹配规则、嵌套写target以减少重复写pod的技巧,更多细节见注释。
学会了简单的Podfile编写方法,那么我们现在看看《虾票票》用到了哪些第三方库呢?👇
- Masonry:UI布局约束
- AFNetworking:网络请求
- SDWebImage:图片下载 / 缓存 / 解码
- YYModel:模型转换(json和model)
- MJRefresh:下拉刷新、上拉加载
- MBProgressHUD:loading交互
你是否可以想出Podfile的模样呢?👇
source 'https://github.com/CocoaPods/Specs.git' # 可以手动指定spec库的地址
platform :ios, '9.0'
use_frameworks!
target 'ShoPiaoPiao_Example' do
pod 'ShoPiaoPiao', :path => '../' # 通过设置:path=>拉取本地库
pod 'Masonry' # 上面提到的6个第三方库
pod 'AFNetworking'
pod 'SDWebImage'
pod 'YYModel'
pod 'MJRefresh'
pod 'MBProgressHUD'
end
- 手动指定的spec库可以是公司或者个人私有的Git仓库。⚠️:如果手动指定了其他库,则必须指定所有要用到的spec库,即默认的spec库(首次安装的)也要指定,见上代码。
- 可以通过设置:path=>拉取本地库,多用于开发该库。
- 这里的第三方库都默认使用最新的版本。
温馨补充🎺:这里你可能会想ShoPiaoPiao是什么第三方库呢?它是属于《虾票票》的第三方库。那它为什么是以本地导入的方式pod呢?其实我是以开发第三方库的方式,来开发《虾票票》这个项目,公司里多以这种方式开发,类似SDK开发。在下面的常用命令一节还会提到如何制作基于CocoaPods的第三方库。
图解原理
借鉴网上三张图来说明白CocoaPods的基本原理。
先解答前面提到的第二个问题:spec仓库和代码库是什么,它们有什么区别?
看图:
1)通过 pod setup
安装spec仓库到本地,其实就是把远程的CocoaPods官方索引库拉取到本地,而这个索引库里存放了各个第三方库的描述信息,分别用一个spec文件存放,里面包含了第三方库的这些信息:
- 库名
- 版本号
- 描述信息
- 源码地址❗️
- ...
2)在我们编写好Podfile并运行 pod install
时,CocoaPods就会根据每个库的源码地址去拉取源码集成到项目里。(当然这个源码是会有缓存的)
这样看完是不是能够理解spec库和代码库的区别了呢?
再看两张关于 pod install
过程的图解:
跟着序号和箭头试着理解 pod install
的过程,如果能够理解上面的讲解,理解这两张图就不成问题了~🤔
常用命令
整理了一张常用命令图,可保存当作工具图使用。
🥩加加加餐: pod install
VS. pod update
它俩的区别是什么呢?这应该是初次使用CocoaPods时最常见的一个疑惑。
相同点:
- 目的都是拉取项目依赖的代码库
- 更新Podfile.lock
不同点:
- 前者受Podfile.lock约束,后者不受
- 后者会更新本地的spec库
过程详解:
pod install
检查Podfile.lock是否已经包含Podfile中的库;
(一)如果包含,则继续判断Podfile里是否指定版本:1)如果指定版本就去检查Podfile.lock中保存的版本是否与Podfile里指定的相同,相同则跳过,不相同则更新为Podfile里指定的;2)如果没有指定版本,则不检查更新直接跳过;
(二)如果不包含该库,则去下载该库并将版本保存在Podfile.lock文件中。
PS:Podfile.lock一般作用于Podfile没有指定版本的工程。
pod update
忽略Podfile.lock中的记录,先更新spec库,然后直接去找符合Podfile文件中该依赖库的指定版本,如果没有指定,就会找最新版本。
PS:pod update [PODNAME] 指定某个Pod库去更新。
参考
是什么、为什么、怎么用?
How do I install CocoaPods?——stackOverflow
CocoaPods Guides——官方
编辑Podfile
你真的会写Podfile吗——掘金
inherit!——官方
常用命令
pod install 与 pod update的区别——简书
尾声
差不多一个月的时间把《虾票票入门iOS》系列写完了,希望看到这里的你有一些收获,或者可以自行实现《虾票票》了,欢迎交流你的成果~
后续我还会整理一个传送门,放上《虾票票》的源码,并做个总结✅。