CocoaPods是Objective-C和Swift项目的依赖管理工具,可以让你高效优雅地管理第三方框架(AFNetworking等)。如果不使用CocoaPods,集成第三方框架需要把该框架的源码复制到项目中;如果该框架依赖系统的framework,还需要手工将这些framework分别添加到项目中。某些开源框架还需要设置-fno-objc-arc等编译参数。如果要升级第三方框架,还得重复这些操作。CocoaPods就是为避免这些费时繁琐的操作而生。
安装CocoaPods
CocoaPods是由ruby构建的。Mac OSX自带ruby,可以使用ruby的gem命令下载安装CocoaPods。ruby的软件源在国内不稳定,可以将官方软件源替换成国内淘宝的:
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -l
如果ruby的gem命令版本太低,可能导致安装失败。我是在v2.0.14版本操作的,可通过下面的命令查看版本:
$ gem -v
发现版本太低,可通过以下命令更新gem:
$ gem update --system
确定gem的版本没问题,通过以下命令安装CocoaPods:
$ sudo gem install cocoapods
使用CocoaPods
在项目中使用CocoaPods
CocoaPods把每一个第三方依赖库(框架)都视为一个pod。安装好了CocoaPods之后,在项目中应用十分简便。在项目的根目录创建名为Podfile的文件,可以执行如下命令创建该文件:
#创建Podfile文件,用于描述相关信息
$ touch Podfile
在Podfile中添加描述,下面是示例:
platform :ios, '8.0'
pod 'AFNetworking', '~> 3.0'
pod 'SDWebImage', '~>3.7'
Podfile修改保存后,在项目根目录执行下面的命令:
#向项目添加CocoaPods
$ pod install
#如果想查看安装过程的相关信息可以在”pod install“后追加”--verbose“,如下:
$ pod install --verbose
等待命令执行完毕。
是的,CocoaPods就这样设置好了。以后每次打开项目使用后缀为xcworkspace的文件而不是xcodeproj。
很多人以为只在一开始使用pod install
命令,之后都是用pod update
了。官方说法是任何时候向项目添加新框架(pod),都使用install命令,即便之前执行过install命令了;只在更新pod的版本时使用update命令:更新所有pod使用pod update
,更新指定pod时使用pod update [PODNAME]
。
删除某个pod
在Podfile中删除该pod的声明,然后执行pod update
命令即可。
pod的版本管理
pod 'AFNetworking', '~> 3.0'
这个声明告诉CocoaPods安装从3.0到4.0之间(不包括4.0)所有版本中最新的那个。
- > 0.1 :所有大于0.1的版本。
- >= 0.1:所有大于或等于0.1的版本
- < 0.1: 所有小于0.1的版本。
- <= 0.1 : 所有小于或等于0.1的版本。
- ~> 0.1.2:等同于>= 0.1.2 且 < 0.2.0,并选择最新的版本。
处理版本控制(git)
如果是团队开发,为了各成员项目中的pod保持版本一致,应该把CocoaPods哪些文件加入版本控制呢?Podfile和Podfile.lock是必需的。把Pod文件夹加入版本控制,优点是其他成员clone到该项目后可以不安装CocoaPods直接构建(builde)该项目,缺点是这会增加git的工作量,而且repo的体积会增大。
相关文件说明
Podfile:用于声明你要添加的pod(框架),可以根据个人喜好高度定制。更多信息,请查阅Podfile指南。
Podspec:每个支持CocoaPods管理的框架(pod)都有自己的.podspec文件。该文件声明一个框架怎样添加到项目中。它起到列出源文件、framework、编译参数(compiler flags)和该框架需要的依赖等作用。CocoaPods正是根据各个框架中的.podspec文件来处理相关依赖的。
Podfile.lock:这是 CocoaPods 创建的最重要的文件之一。它记录了需要被安装的 pod 的每个已安装的版本。如果你想知道已安装的 pod 是哪个版本,可以查看这个文件。推荐将 Podfile.lock 文件加入到版本控制中,这有助于整个团队的一致性。