cocoapods 安装和使用

安装

使用 ruby 的 gem 命令即可下载安装:

1
2
$ sudo gem install cocoapods
$ pod setup

如果 gem 太老可能会有问题,使用以下命令升级:

1
$ sudo gem update --system

ruby 默认软件源在国外,速度较慢,更新一下 ruby 的源,使用如下代码将官方的 ruby 源替换成国内淘宝的源:

1
2
3
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem sources -l

使用 CocoaPods 的镜像索引

所有的项目的 Podspec 文件都托管在https://github.com/CocoaPods/Specs。第一次执行pod setup时,CocoaPods 会将这些podspec索引文件更新到本地的 ~/.cocoapods/目录下,这个索引文件比较大,有 80M 左右。所以第一次更新时非常慢。

一个叫 akinliu 的朋友在 gitcafe 和 oschina 上建立了 CocoaPods 索引库的镜像,因为 gitcafe 和 oschina 都是国内的服务器,所以在执行索引更新操作时,会快很多。如下操作可以将 CocoaPods 设置成使用 gitcafe 镜像:

1
2
3
pod repo remove master
pod repo add master https://gitcafe.com/akuandev/Specs.git
pod repo update

将以上代码中的 https://gitcafe.com/akuandev/Specs.git 替换成 http://git.oschina.net/akuandev/Specs.git 即可使用 oschina 上的镜像。

使用 CocoaPods

使用时在项目根目录中新建一个名为 Podfile 的文件,在里面指定项目需要的依赖库。以下是我在项目中使用的 Podfile。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pod 'Masonry'           # 用于手写 autolayout
pod 'RSKImageCropper' # 图片裁剪
pod 'YYImage' # 图片编解码,支持 webp, apng, gif, png, jpeg 等格式
pod 'YYCache' # 缓存框架
pod 'JSPatch' # 热补丁修复
pod 'CocoaLumberjack' # 打印日志,可分等级颜色
pod 'TYAttributedLabel' # 加强版 Label,用来显示图文混排的内容

# ---- 闭源第三方库
pod 'UMengAnalytics-NO-IDFA' # 友盟统计
pod 'NewRelicAgent' # new relic,主要用来做性能统计
pod 'JPush' # 极光推送

# ---- shareSDK
# 主模块(必须)
pod 'ShareSDK3', '3.1.4'
# UI模块(非必须,需要用到ShareSDK提供的分享菜单栏和分享编辑页面需要以下1行)
pod 'ShareSDK3/ShareSDKUI'
# 平台SDK模块(对照一下平台,需要的加上。如果只需要QQ、微信、新浪微博,只需要以下3行)
pod 'ShareSDK3/ShareSDKPlatforms/QQ'
pod 'ShareSDK3/ShareSDKPlatforms/SinaWeibo'
pod 'ShareSDK3/ShareSDKPlatforms/WeChat'

编辑完 Podfile 后,执行

1
pod install

现在,你的所有第三方库都已经下载完成并且设置好了编译参数和依赖,只需要打开项目的.xcworkspace 就能使用 Podfile 里添加的第三方库了。

以后添加新库时,执行一次 pod install即可。
如果要更新库,执行 pod update。

以下是 Podfile 常用语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 库版本号相关
pod 'AFNetworking' # 不显式指定依赖库版本,表示每次都获取最新版本
pod 'AFNetworking', '2.0' # 只使用2.0版本
pod 'AFNetworking', '> 2.0' # 使用高于2.0的版本
pod 'AFNetworking', '>= 2.0' # 使用大于或等于2.0的版本
pod 'AFNetworking', '< 2.0' # 使用小于2.0的版本
pod 'AFNetworking', '<= 2.0' # 使用小于或等于2.0的版本 pod 'AFNetworking', '~> 0.1.2' # 使用大于等于0.1.2但小于0.2的版本
pod 'AFNetworking', '~>0.1' # 使用大于等于0.1但小于1.0的版本
pod 'AFNetworking', '~>0' # 高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本

# 指定仓库 git 地址
pod 'TYAttributedLabel', :git => 'https://github.com/jayi/TYAttributedLabel.git'
# 按 commit 指定仓库版本
pod 'TYAttributedLabel', :commit => 'ffae09'

关于 Podfile.lock

当你执行pod install之后,除了 Podfile 外,CocoaPods 还会生成一个名为Podfile.lock的文件,Podfile.lock 应该加入到版本控制里面,不应该把这个文件加入到.gitignore中。因为Podfile.lock会锁定当前各依赖库的版本,之后如果多次执行pod install 不会更改版本,要pod update才会改Podfile.lock了。这样多人协作的时候,可以防止第三方库升级时造成大家各自的第三方库版本不一致。