我把我整个灵魂都给你,连同它的怪癖,耍小脾气,忽明忽暗,一千八百种坏毛病。它真讨厌,只有一点好,爱你。
——王小波《爱你就像爱生命》
前言
什么是CocoaPods
- CocoaPods 是一个 objc/swift 的第三类库依赖管理工具,而其本身是利用 ruby 的依赖管理 gem 进行构建的.
- 通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所支持的),并且可以轻松管理其版本。
CocoaPods的好处
- 1、在引入第三方库时它可以自动为我们完成各种各样的配置,包括配置编译阶段、连接器选项、甚至是ARC环境下的-fno-objc-arc配置等。
- 2、使用CocoaPods可以很方便地查找新的第三方库,这些类库是比较“标准的”,而不是网上随便找到的,这样可以让我们找到真正好用的类库。
CocoaPods安装
- 关于CocoaPods安装请自行百度/谷歌,相关资料已经介绍的非常详尽。
- 更详细的文档请参考官方文档
- 可以在这里深入理解 CocoaPods
如何制作自己的CocoaPods(公有)库
- 想要制作自己的CocoaPods(公有)库,我们需要先大概了解一下CocoaPods的两个文件Podfile / Podspec
Podfile
- podfile 是一个文件,用于定义项目所需要使用的第三方库。
- 该文件支持高度定制,你可以根据个人喜好对其做出定制。更多相关信息,请查阅 Podfile 指南。
Podspec
.podspec
也是一个文件,该文件描述了一个库是怎样被添加到工程中的。它支持的功能有:列出源文件、framework、编译选项和某个库所需要的依赖等。在我们执行
pod install
命令加载第三方库的时候, 会先从远程Podspecs仓库拉取最新的包括版本信息在内的所有的第三方库的列表。存储在本地路径 ~/.cocoapods 中,先显示系统隐藏文件后才可以看到隐藏文件。
1 | defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder |
- 使用终端进入查看仓库的远程地址
1 | cd ~/.cocoapods/repos/master |
https://github.com/CocoaPods/Specs.git
实际就是CocoaPods的GitHub仓库地址。- 我们如果一直进入
~/.cocoapods/repos/master
- 就会发现里面的每一个文件夹下都是三方库列表
- 每一个三方库文件下存放的是对应的版本号文件夹
- 而对应的版本号文件夹里面则只存在唯一的一个以
三方库名称.podspec.json
的文件, 我们看一下GoogleMaps
大概的内容
1 | { |
- 我们尝试在终端搜索一下第三方库
GoogleMaps
1 | // pod search GoogleMaps |
- 我们平时在
pod search
第三方库后出现的结果其实都是三方库名称.podspec.json
这个文件的内容,所以我们只做自己的CocoaPods库,也要从整个文件入手。
正式开始
注册 CocoaPods 账号
- 因为我们的是用CocoaPods统一管理我们的自己的开源库,所以需要一个CocoaPods账号用来发布库。
- 我们使用终端来进行注册,在终端输入下面的指令、回车:
1 | // gitHub_email : 注册CocoaPods的邮箱, 我使用的是和注册GitHub一样的邮箱。 |
- 成功后终端输入下面信息,CocoaPods 会发一个确认邮件到你的邮箱上,登录你的邮箱进行确认。
1 | [!] Please verify the session by clicking the link in the verification email that has been sent to gitHub_email |
- 确认完成后,输入如下指令查看注册信息
1 | // pod trunk me |
创建Git仓库
在 GitHub 上创建一个公开项目,项目中必须包含这几个文件
- LICENSE: 开源许可证
- README.md: 库的使用介绍文件
- 你的开源库代码
你的三方库名称
.podspec : CocoaPods 的描述文件,这个文件非常重要
这里我们以我仿写的一个demo为例子,如下图:
XSSecurityCodeButton-Demo
是一个演示项目XSSecurityCodeButton
是一个演示项目LICENSE
开源许可证,如何创建请自行百度/谷歌,非常简单。README.md
库的使用介绍文件,如何创建请自行百度/谷歌,非常简单。XSSecurityCodeButton.podspec
CocoaPods的描述文件
创建.podspec
- 进入你需要制作开源库的项目根目录
- 终端执行下面的指令,会在你的仓库下生成
XSSecurityCodeButton.podspec
文件
1 | // XSSecurityCodeButton 我的项目名称,请自行修改 |
XSSecurityCodeButton.podspec
文件配置及修改请参考下面(已删除部分无用的干扰内容),重要的地方我已经给出注释。
1 | Pod::Spec.new do |s| |
验证 .podspec
文件的格式是否正确
- 创建完成
.podspec
文件并按照上面配置完成,接下来我们就需要文件内容及格式是否正确。 - 终端执行如下指令:
1 | pod lib lint |
- 验证通过就会输入如下信息
1 | XSSecurityCodeButton passed validation. |
- 如果你的项目源码被验证出有警告信息,会输出含有如下内容的信息
1 | (but you can use `--allow-warnings` to ignore them). |
- 此时你只需要在验证指令后面加上对应的提示,重新验证一遍
1 | pod lib lint --allow-warnings |
给仓库打标签
- 验证成功后,就需要将仓库提交到远程,然后给仓库打上标签并将标签也推送到远程。
- 标签相当于是你的仓库的一个压缩包,用于稳定存储当前版本。
- 标签号与你在 s.version = “0.0.1”的版本号一致0.0.1
1 | // 创建标签 |
发布.podspec
- 发布项目的描述的文件, 在项目根目录下执行
1 | pod trunk push XSSecurityCodeButton.podspec |
- 这一步会执行如下操作:
- 更新本地 pods 库
~/.cocoaPods.repo/master
- 验证
.podspec
格式是否正确
-.podspec
文件转成 JSON 格式 - 对master仓库 进行合并,提交.master仓库地址
- 更新本地 pods 库
- 发布成功后输入如下内容:
1 | Updating spec repo `master` |
使用仓库
- 先更新本地pods仓库信息
- 更新完成本地仓库后就可以搜索使用我们自己发布的cocoapods仓库了
- 就可以在需要的项目的Podfile添加、使用自己的仓库了
1 | pod setup // 更新 |
更新维护
- 当我们维护修改了我们的源码文件后就需要重新发布一个新的版本到cocoapods
- 项目源码打上对应的标签推送到自己的远程仓库
- 更新
XSSecurityCodeButton.podspec
中版本号(和新的标签一致) - 重新执行
pod trunk push XSSecurityCodeButton.podspec --allow-warnings
推送发布到pods仓库