Bo2SS

Bo2SS

(5)iOS入门完结:CocoaPods的介绍和使用

好看的海来自好看的天

好看的海来自好看的天

终于迎来了我们《虾票票》入门 iOS 系列的最后一节——CocoaPods 的介绍和使用。

image

话不多说,我将按照上述大纲的四个步骤开始讲解。

是什么、为什么、怎么用?#

CocoaPods 是什么❓

官方解释,它是一个开发 iOS 应用程序的第三方库依赖管理工具


为什么要使用它呢❓

因为它能自动化地、集中地、直观地管理第三方开源库,这里可以类比 gradle、npm 等等。

PS:iOS 常用框架集成方式对比如下,参考《极客时间》。

引自《极客时间》


怎么使用呢❓

  1. 首先要安装~
    1. 前提 -- 安装 Ruby: brew install ruby ,CocoaPods 是基于 Ruby 来构建的;
    2. 安装 CocoaPods: sudo gem install -n /usr/local/bin cocoapodsgem 是是 Ruby 模块的包管理器;
    3. 安装spec 仓库❗️到本地: pod setup ,spec 仓库体积较大,喝一杯☕️等待~
  2. 使用步骤如下:
    1. cd [项目根目录]
    2. 初始化 pod: pod init ,即可生成 Podfile 文件;
    3. 编辑 Podfile❗️
    4. 在项目中集成对应的代码库❗️: pod install
    5. 使用时, #import <头文件> 即可。

细心的你可能会发现上面的 3 个❗️,这是今天的重点🎺🎺🎺,让我们带着下面两个问题继续往下看:

  1. 如何编辑 Podfile 呢?
  2. 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 编写方法,那么我们现在看看《虾票票》用到了哪些第三方库呢?👇

你是否可以想出 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 库(首次安装的)也要指定,见上代码。
  • 可以通过设置=> 拉取本地库,多用于开发该库。
  • 这里的第三方库都默认使用最新的版本。

温馨补充🎺:这里你可能会想 ShoPiaoPiao 是什么第三方库呢?它是属于《虾票票》的第三方库。那它为什么是以本地导入的方式 pod 呢?其实我是以开发第三方库的方式,来开发《虾票票》这个项目,公司里多以这种方式开发,类似 SDK 开发。在下面的常用命令一节还会提到如何制作基于 CocoaPods 的第三方库

图解原理#

借鉴网上三张图来说明白 CocoaPods 的基本原理。

先解答前面提到的第二个问题:spec 仓库和代码库是什么,它们有什么区别?

看图:

找一找 Spec 库和代码库

1)通过 pod setup 安装 spec 仓库到本地,其实就是把远程的 CocoaPods 官方索引库拉取到本地,而这个索引库里存放了各个第三方库的描述信息,分别用一个spec 文件存放,里面包含了第三方库的这些信息:

  • 库名
  • 版本号
  • 描述信息
  • 源码地址❗️
  • ...

2)在我们编写好 Podfile 并运行 pod install 时,CocoaPods 就会根据每个库的源码地址去拉取源码集成到项目里。(当然这个源码是会有缓存的)

这样看完是不是能够理解 spec 库和代码库的区别了呢?


再看两张关于 pod install 过程的图解:

pod install 过程 - 1

pod install 过程 - 2

跟着序号和箭头试着理解 pod install 的过程,如果能够理解上面的讲解,理解这两张图就不成问题了~🤔

常用命令#

整理了一张常用命令图,可保存当作工具图使用。

CocoaPods 常用命令


🥩加加加餐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—— 官方

从文档开始了解 cocoapods 之 Podspec—— 简书


编辑 Podfile

你真的会写 Podfile 吗—— 掘金

inherit!—— 官方


常用命令

pod install 与 pod update 的区别—— 简书

尾声#

差不多一个月的时间把《虾票票入门 iOS》系列写完了,希望看到这里的你有一些收获,或者可以自行实现《虾票票》了,欢迎交流你的成果~

后续我还会整理一个传送门,放上《虾票票》的源码,并做个总结✅。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。