CocoaPods是OS X和iOS下的一个第三类库管理工具。引入第三方库时它可以自动为我们完成各种各样的配置,包括配置编译阶段、连接器选项、甚至是ARC环境下的-fno-objc-arc配置等。

CocoaPods安装

CocoaPods是用ruby实现的,要想使用它首先需要有ruby的环境。OS X系统默认已经可以运行ruby了。有时候ruby版本过低是无法正常支持CocoaPods的使用,所以需要先安装更新升级rvm。

在配置ruby的环境需要先安装rvm(Ruby Version Manager ),是安装和管理ruby的一种工具。

1
2
3
rvm -v # 检查安装 rvm 环境
curl -L https://get.rvm.io | bash -s stable # 如果没有安装rvm 该命令安装
source ~/.rvm/scripts/rvm # 首次安装rvm后,载入Rvm

利用Rvm安装ruby

1
2
3
4
5
rvm list known  #查看ruby版本列表
ruby -v #查看当前ruby版本
rvm install 2.3.0 #如果当前ruby版本过低, 可以更新到指定版本
rvm list #查询已安装的 ruby
rvm remove 1.9.2 #卸载一个已安装版本

到这里通过Rvm安装了ruby,接着终于可以开始安装CocoaPods了,但是在这之前还需要用到一个RubyGems,是一个用于对 Ruby组件进行打包的 Ruby 打包系统。它提供一个分发 Ruby 程序和库的标准格式,还提供一个管理程序包安装的工具。

CocoaPods是用RubyGems实现的,要想使用它先安装gem。

1
2
$ sudo gem -v #查看版本 建议gem 包环境升级到2.6.x以上
$ gem update --system #更新gem

Ruby的软件源使用的是亚马逊的云服务,国内网络环境下载时可能会出现各种不稳定和超时,可以将官方 ruby 源替换成国内由China ruby 源

1
2
3
$ gem sources -l #查看源
$ gem sources --remove https://rubygems.org/ #移除源
$ gem sources --add https://gems.ruby-china.org #替换源

以上步骤执行顺利的话,下面开始执行安装CocoaPods了。

1
$ sudo gem install -n /usr/local/bin cocoa pods
1
$ pod setup #clone第三方的podspec索引文件~/.cocoapods/repos目录下

pod setup可能会出现如下错误:

解决办法:

1
$ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

CocoaPods原理

CocoaPods流程图

CocoaPods/Specs存放库的Spec文件。Spec描述了库的具体信息,不如库的版本、简介、源码地址、支持的平台等信息。

安装CocoaPods是执行pod setup会将CocoaPods/Specs所有库的Spec Clone到本地,执行命令pod search等指令会去本地的索引仓库查询仓库信息。为了提升效率,第一次会在本地生成一个大约12M的search_index文件记录所有框架的信息。

使用 CocoaPods

新建Podfile文件,进入工程目录

1
$ pod init

编辑 Podfile 文件

1
2
3
4
5
6
7
8
9
10
11
platform :ios, '8.0'

target 'JJCocoaPodsTest' do

pod 'AFNetworking', '3.0.1' #指定依赖版本

pod 'MJExtension' #安装最新版本

pod 'SVProgressHUD', '~> 2.1.2' #使用大于等于0.1.2但小于0.2的版本,相当于>=0.1.2并且<0.2.0

pod 'AFNetworking', '~>0.1' #使用大于等于0.1但小于1.0的版本

执行

1
$ pod install

pod install会根据podfile依赖描述信息进行集成对应版本框架,同时生成podfile.lock记录最后一次安装个库的依赖版本。

安装CocoaPods第一次pod install会将本地的Spces仓库信息生成~/资源库/Caches/CocoaPods/search_index.json文件记录所有仓库的信息。下次直接通过search_index.json查找仓库信息,提高效率。

pod install过程也会将本次依赖的版本存在本地。所以第二次Pod install相同版本库非常快。

pod install与pod update 安装框架之前, 默认会执行pod repo update指令,禁止需要加上参数

1
2
$ pod install --no-repo-update
$ pod update --no-repo-update

注意:如果你运行pod update,如果这个库有新的版本,并且新版本仍然符合在Podfile里的限制(pod 'MyPod', '~>x.y'),它就才会被更新。

发布支持Pod的框架

原理:就是在将框架对应的.podspec文件上传到远程的CocoaPods/Specs中。

首先在GitHub创建一个框架的仓库,clone代码到本地,执行命令生成podspec文件

1
$ pod spec create "框架名"

填写podspsc文件框架信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
s.name  = "框架名"
#此tag在远程仓库必须存在的
s.version = "1.0.0"
#框架简介
s.summary = "A short description of PodTestLib."
#框架详细描述
s.description = " "
#框架首页
s.homepage = "https://github.com/coderketao/PodTestLib"
s.author = { "CoderHong" => "coderketao@126.com" }
s.platform = :ios
s.platform = :ios, "9.0"
#仓库源码 s.version引用上面tag的version
s.source = { :git => "https://github.com/coderketao/PodTestLib.git", :tag => "#{s.version}" }
#可以相对podspec相对路径
s.source_files = "PodTestLib/**/*.{h,m}"

上传podspsc文件需要使用Trunk。用它可以将我们的框架的podspec上传到远程的CocoaPods/Specs中。

注册Trunk会话

1
$ pod trunk register 邮箱 '你的名称' --description='macbook air'

然后去验证邮箱,成功后会提示我们回到终端,并敲入pod trunk push 名称.podspec上传

1
$ pod trunk push podspec文件

上传成功后会自动帮我们更新本地仓库,如果无法搜索到自己的框架,可以先删掉本地的索引文件后再搜索一次

1
rm ~/Library/Caches/CocoaPods/search_index.json

当使用pod search 命令可以搜索自己的框架时, 那么就意味着审核通过了。

可参考文章唐巧的博客