CocoaPods简介
每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm。随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的名字叫做:CocoaPods。
CocoaPods项目的源码在Github上管理。该项目开始于2011年8月12日,经过多年发展,现在已经成为iOS开发事实上的依赖管理标准工具。开发iOS项目不可避免地要使用第三方开源库,CocoaPods的出现使得我们可以节省设置和更新第三方开源库的时间。
CocoaPods的安装和使用介绍
安装
安装方式异常简单, Mac下都自带ruby,使用ruby的gem命令即可下载安装:
$sudo gem install cocoapods
$pod setup
但是在Mac OS X EL Capitan(10.11)中就会出现Operation not permitted - /usr/bin/pod的错误,当我遇到这个错误的时候我整个人是拒绝的,可是遇到问题还是得解决嘛。后来发现了两个解决方案。
方案一如果你的gem太老,可能也会有问题,可以尝试用如下命令升级gem:
$ mkdir -p $HOME/Software/ruby
$ export GEM_HOME=$HOME/Software/ruby
$ gem install cocoapods
[...]
1 gem installed cocoapods
$ export PATH=$PATH:$HOME/Sofware/ruby/bin
方案一中主要是将GEM的安装路径进行修改,将GEM的默认安装路径修改成了$HOME/Software/ruby这个目录,然后再进行安装,最后将安装路径添加到PATH下,这样可以不用带完整的路径进行运行命令。
方案二
$ gem install cocoapods -n ~/Software/ruby
方案二中使用了gem的自带参数-n—–即指明安装的路径,如果要使用这种的话,也需要将该路径加入PATH下才可以不用带完整的路径进行运行命令。
个人建议是使用第一种,将GEM的安装路径进行修改。这样不需要每次都用-n命令进行指定路径。
sudo gem update --system
另外,ruby的软件源rubygems.org因为使用的亚马逊的云服务,所以被墙了,需要更新一下ruby的源,如下代码将官方的ruby源替换成国内淘宝的源:
gem sources --remove https://rubygems.org/
gem sources -a http://ruby.taobao.org/
gem sources -l
还有一点需要注意,pod setup在执行时,会输出Setting up CocoaPods master repo,但是会等待比较久的时间。这步其实是Cocoapods在将它的信息下载到~/.cocoapods目录下,如果你等太久,可以试着cd到那个目录,用du -sh *来查看下载进度。你也可以参考本文接下来的使用cocoapods的镜像索引一节的内容来提高下载速度。
使用CocoaPods
使用时需要新建一个名为Podfile的文件,以如下格式,将依赖的库名字依次列在文件中即可
platform :iospod'JSONKit','~> 1.4'
pod'Reachability','~> 3.0.0
'pod'ASIHTTPRequest'
pod'RegexKitLite'
然后你将编辑好的Podfile文件放到你的项目根目录中,执行如下命令即可:
cd"your project home"pod install
现在,你的所有第三方库都已经下载完成并且设置好了编译参数和依赖,你只需要记住如下2点即可:
使用CocoaPods生成的.xcworkspace 文件来打开工程,而不是以前的.xcodeproj 文件。
每次更改了Podfile文件,你需要重新执行一次pod update命令。
查找第三方库
你如果不知道cocoaPods管理的库中,是否有你想要的库,那么你可以通过pod search命令进行查找,以下是我用pod search json查找到的所有可用的库:
关于.gitignore
当你执行pod install之后,除了Podfile外,CocoaPods还会生成一个名为Podfile.lock的文件,你不应该把这个文件加入到.gitignore中。因为Podfile.lock会锁定当前各依赖库的版本,之后如果多次执行pod install不会更改版本,要pod update才会改Podfile.lock了。这样多人协作的时候,可以防止第三方库升级时造成大家各自的第三方库版本不一致。
CocoaPods的这篇官方文档也在What is a Podfile.lock一节中介绍了Podfile.lock的作用,并且指出:
This file should always be kept under version control.
解决cocoapods 更新慢的问题
pod install --verbose --no-repo-update
pod update --verbose --no-repo-update