iOS类库管理工具CocoaPods

是否熟知CocoaPods?它是什么?如何运行的?本篇就来学习一下。

1.CocoaPods是什么?

CocoaPods:iOS类库管理工具

2.CocoaPods解决的问题

  • 开发iOS应用时,会经常使用到很多第三方开源类库,手动一个个去下载所需类库十分麻烦
  • 项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦

正确设置后,cocoaPods只需要一行命令就可以完全解决。
重要的是,绝大部分有名的开源类库,都支持CocoaPods。

3.如何下载和安装CocoaPods?

RVM -> Ruby环境 -> CocoaPods

RVM

Ruby Version Manager,Ruby版本管理器,包括Ruby的版本管理和Gem库管理(gemset)。目前支持Ruby的大多数版本,有1.8.7,1.9.1,1.9.2和Ruby Enterprise Editon,通过RVM可以很方便的在多个Ruby版本中快速切换。RVM同时也支持JRuby。

用于帮你安装Ruby环境,帮你管理多个Ruby环境,帮你管理你开发的每个Ruby应用使用机器上哪个Ruby环境。

gem
Gem是封装起来的Ruby应用程序或代码库。
注:在终端使用的gem命令,是指通过RubyGems管理Gem包。

Ruby环境

Ruby环境不仅仅是Ruby本身,还包括依赖的第三方Ruby插件。都由RVM管理。

Ruby
Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言.

安装CocoaPods

sudo gem install cocoapods
(翻墙后就可以直接安装,如果没翻墙,需要借助淘宝镜像)

4.使用CocoaPods

vim是linux下最常用的文本编辑器
IDE:集成开发环境

利用CocoaPods,在项目中导入AFNetworking类库

在项目中新建一个Podfile文件,这个文件就叫做“Podfile”(注意,一定得是这个文件名,而且没有后缀),用这个文件告诉CocoaPods需要下载什么类库,文件中内容如下:(以AFNetworking为例)

platform :ios, ‘7.0’
pod “AFNetworking”, “~> 2.0”

这两句文字的意思是,当前AFNetworking支持的iOS最高版本是iOS 7.0, 要下载的AFNetworking版本是2.0。可以在AFNetworking的github页面找到。一般类库的原作者会告诉你导入该类库应该如何写Podfile

利用CocoPods下载AFNetworking类库

$ pod install 

注意:这个命令需要你进入你的项目所在目录中运行。

以后打开项目就用 CocoaPodsDemo.xcworkspace 打开,而不是之前的.xcodeproj文件。

如何正确编译运行一个包含CocoPods类库的项目

从github上下载下来需要的代码,编译后发现错误:缺失什么什么头文件,这是再看看项目中是否含有Podfile文件,如果有,这就需要用CocoaPods来下载类库了。

$ pod update

注意,这里有个小问题,如果刚刚你不是输入$ pod update,而是输入$ pod install,会发现类库导入不成功,并且终端出现下面提示:

1
2
[!] Required version (UAAppReviewManager (from `../`)) not found for `UAAppReviewManager`.
Available versions: 0.1.6

这里的意思大概是Podfile文件过期,类库有升级,但是Podfile没有更改。$ pod install只会按照Podfile的要求来请求类库,如果类库版本号有变化,那么将获取失败。但是 $ pod update会更新所有的类库,获取最新版本的类库。而且你会发现,如果用了 $ pod update,再用 $ pod install 就成功了。

那你也许会问,什么时候用 $ pod install,什么时候用 $ pod update 呢,我又不知道类库有没有新版本。好吧,那你每次直接用 $ pod update 算了。或者先用 $ pod install,如果不行,再用 $ pod update。

每次更改了 Podfile 文件,你需要重新执行一次pod update命令

查找第三方库

你如果不知道 cocoaPods 管理的库中,是否有你想要的库,那么你可以通过 pod search 命令进行查找,以下是我用 pod search json 查找到的所有可用的库:

Podfile.lock

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

为自己的项目创建 podspec 文件

pod spec create your_pod_spec_name
该命令执行之后,CocoaPods 会生成一个名为your_pod_spec_name.podspec的文件,然后我们修改其中的相关内容即可。
用处:把你的项目加到CocoaPods里,自己的项目支持CocoaPods,同时也可以fork开源项目,创建podspec 文件,然后让该项目支持CocoaPods

生成第三方库的帮助文档

使用Objective-C的文档生成工具:appledoc

如果你想让 CococaPods 帮你生成第三方库的帮助文档,并集成到 Xcode 中,那么用 brew 安装 appledoc 即可:
安装:
git clone git://github.com/tomaz/appledoc.git
cd appledoc
sudo sh install-appledoc.sh
使用:
appledoc -o ./doc –project-name ynote –project-company youdao .
appledoc 会扫描当前路径下的所有文件,然后生成好文档放到 doc 目录下。你也可以用 appledoc —help 查看所有可用的参数。

原理

大概研究了一下 CocoaPods 的原理,它是将所有的依赖库都放到另一个名为 Pods 项目中,然后让主项目依赖 Pods 项目,这样,源码管理工作都从主项目移到了 Pods 项目中。发现的一些技术细节有:

Pods 项目最终会编译成一个名为 libPods.a 的文件,主项目只需要依赖这个 .a 文件即可。

对于资源文件,CocoaPods 提供了一个名为 Pods-resources.sh 的 bash 脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。

CocoaPods 通过一个名为 Pods.xcconfig 的文件来在编译时设置所有的依赖和参数。