Use CocoaPods for Packages Management in Xcode

CocoaPods是Objective-C项目中最好用的第三方依赖包管理工具。

官网:
http://www.cocoapods.org/

项目地址:
https://github.com/CocoaPods/CocoaPods

####什么是第三方依赖包?
现代项目开发中,总有些类库会帮我们节约很多时间,软件也就变成了积木似的类库组装。使用这些第三方的类库时,有些问题需要考虑,如这些类库的存放位置,是存在本地,还是在一个统一的服务器?如类库的版本,如何保证线上运行时使用正确版本的库?

XCode中,通常将一个库的项目拖到当前项目中来使用。像AFNetworking,JSONKit,但这样都有上面所说的问题。

在Java项目中,通常使用Meavn来管理,.NET下由有NuGet,Ruby下则是著名的RubyGem,而Objective-C中,现在有了CocoaPods。

####CocoaPods是如何做的?

CocoaPods是使用Ruby来进行开发的,本质上只是为创建另一个叫libPods的项目,里面包含所有第三方包的源码,统一编译到一个Lib中,然后将该项目和源项目统一放到一个WorkSpace下。

CocoaPods还为我们做了第三方包的统一管理。这些包被放在Spec项目下https://github.com/CocoaPods/Specs,每个人都可以把好的库做成Spec,并提交到该项目中,这样就可以使用CocoaPods来管理了。

####CocoaPods安装和使用
因为CocoaPods是使用Ruby开发,所以要求机器必须有Ruby环境,但不用担心,Mac上默认是有的。

1
2
3
4
5
$ [sudo] gem install cocoapods
$ pod setup
# 更新 repo
$ pod repo update

Pods的安装,就是将Spec项目复制到当前用户的.cocoapods\master目录下,以后的查找、安装使用都是基本该本地目录的。

安装成功后,就可以尝试使用了,试着用Search来看你需要的Package是否存在。

1
2
3
4
5
6
$ pod search jsonkit
--> JSONKit (1.4, 1.5pre)
A Very High Performance Objective-C JSON Library.
- Homepage: https://github.com/johnezang/JSONKit
- Source: git://github.com/johnezang/JSONKit.git

以上显示JSONKit在CocoaPods中有两个版本,1.4和1.5pre,cocoapods介绍完成之后,接下来看如何在项目中使用。

####配置新的项目

Pods通过一个名为Podfile的文件来配置项目中所需要的第三库。创建如下文件。

1
$ edit Podfile

内容:

1
2
platform :ios
pod 'JSONKit', '~> 1.5pre'

这里如果不指定包的版本,则默认使用最新版。

然后,在项目目录下,进行安装。

1
2
3
4
5
6
7
$ pod install
Updating spec repo `master'
Installing JSONKit (1.5pre)
Generating support files
[!] From now on use `HelloWorld.xcworkspace'.
-> Integrating `libPods.a' into target `HelloWorld' of Xcode project `HelloWorld.xcodeproj'.

Pods自动创建一个libPod的项目,并生成一个同名的XCode workspace,以后就要通过该workspace来打开项目了。项目打开如下。

libPods被作为framework集成到目标项目。
Pods.xcconfig 中配置了XCode编译的查找路径,通过这种方式将所有的第三方包来引入到项目中。

1
2
PODS_BUILD_HEADERS_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/JSONKit"
PODS_PUBLIC_HEADERS_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/JSONKit"

如需要添加更多的依赖包,只需要在Podfile中加入,然后运行pod install即可。

####Spec

简单的说,Spec就是每个包在CocoaPods中的配置文件,其中包括Package的名字,版本号,每个版本对应的下载地址,编译时的参数。等等。

这是该项目的地址,https://github.com/CocoaPods/Specs,在页面上有介绍如何创新新的包,可以Fork该项目,然后通过pull request提交所建的新包。