简介
1. 什么是 CocoaPods
每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 的 Maven 、Node.js 的 NPM 。而CocoaPods, 就是 OS X 和 iOS 下 的一个第三方库管理工具。它的源码在 Github 上管理,项目开始于 2011 年 8 月 12 日,经过多年发展,现在已经成为 OS X 和 iOS 开发的依赖管理标准工具,它的出现使得我们可以节省设置和更新第三方开源库的时间。
2. CocoaPods 的好处
使用 CocoaPods 可以很方便地查找新的第三方库,在引入第三方库时可以自动为我们配置好依赖的环境,包括配置编译阶段、连接器选项,甚至是 ARC 环境下的 -fno-objc-arc 配置等。这些类库是比较“标准的”,从而可以便捷的管理第三方库。
安装
CocoaPods 依赖于 Ruby 环境,目前 OS X *系统默认已经可以运行 *Ruby。Gem 是一个管理 Ruby 库和程序的标准包,我们可以通过 Gem 安装 CocoaPods 。
1. 更换Ruby源
因为 Ruby 的软件源 rubygems.org 使用亚马逊的云服务,国内访问受限,需要更新一下ruby的源
注意:在终端输入命令时,取$后面部分输入
查看当前的 Ruby 源
1 | gem sources -l |
移除当前的 Ruby 源
1 | sudo gem sources --remove https://rubygems.org/ |
设置当前 Ruby 的源为国内的
1 | sudo gem sources -a https://gems.ruby-china.com/ |
再次查看当前的 Ruby 源
1 | gem sources -l |
如果 Terminal 输出:
1 | *** CURRENT SOURCES *** |
则 Ruby 源已经设置成功
2. 升级Gem
如果 Gem 的版本过低也可能导致安装失败,先升级 Gem
1 | sudo gem update --system |
升级成功后会提示: Latest version currently installed. Aborting.
3. 安装CocoaPods
执行安装 CocoaPods 命令
1 | sudo gem install cocoapods |
如果报以下错误:
1 | ERROR: While executing gem ... (Errno::EPERM) |
说明没有权限,需要输入
1 | sudo gem install -n /usr/local/bin cocoapods |
安装成功后
1 | pod setup |
然后会出现 Setting up CocoaPods master repo,此时需要等待的时间较久,这一步是 Cocoapods 在将它的信息下载到 ~/.cocoapods 目录下。
你可以Command + N
新建一个终端窗口,执行命令
1 | cd ~/.cocoapods/ |
查看下载进度,安装成功后,你会看到 Setup completed
注意:CocoaPods 1.8.0以后不再需要执行 pod setup
,而是会在执行 pod search xxxx
时自动创建索引。
使用
1. 新建 Podfile文件
使用时需要在你的项目根目录下新建一个名为 Podfile 的文件,在工程目录
1 | touch Podfile |
2. 查找第三方库
以 AFNetworking 为例
1 | pod search AFNetworking |
如果出现
1 | [!] Unable to find a pod with name, author, summary, or description matching `AFNetworking` |
这是因为之前pod search的时候生成了缓存文件 search_index.json ,执行
1 | rm ~/Library/Caches/CocoaPods/search_index.json |
来删除该文件,然后再次搜索
若搜索后会出现
1 | -> AFNetworking (3.1.0) |
我们需要用到上面的 pod 'AFNetworking', '~> 3.1.0'
3. 编辑Podfile
使用vim编辑 Podfile 文件
1 | vim Podfile |
会出现
1 | ~ |
按下键盘上的英文 I
键,会变成
1 | ~ |
然后就可以编辑了,输入一下文字
1 | platform :ios, '8.0' #当前工程最低支持iOS 8.0 |
接下来保存文件,按下键盘的 esc
键,然后按下输入 :wq
,按下 enter
键就保存退出了
1 | platform :ios, '8.0' #当前工程最低支持iOS 8.0 |
4. 导入第三方库
执行命令
1 | pod install |
出现
1 | [!] Please close any current Xcode sessions and use `Project.xcworkspace` for this project from now on. |
即表示执行成功,此时工程目录会多出 Project.xcworkspace、Podfile.lock 文件和 Pods文件夹,上面提醒我们从现在开始,打开 Project.xcworkspace 来开发,进入工程后,引入头文件不再是
1 | #import "AFNetworking.h" |
而是
1 | #import <AFNetworking.h> |
原理和说明
** 第三方库会被编译成.a静态库供我们真正的工程使用:**
CocoaPods 会将所有的第三方库以 target 的方式组成一个名为 Pods 的工程,该工程就放在刚才新生成的 Pods 目录下。整个第三方库工程会生成一个名称为 libPods.a 的静态库提供给我们自己的工程使用。
对于资源文件,CocoaPods 提供了一个名为 Pods-resources.sh 的 bash 脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。** 我们的工程和第三方库所在的工程会由一个新生成的 workspace 管理:**
为了方便我们直观的管理工程和第三方库,工程和Pods工程会被以 workspace 的形式组织和管理。** 原来的工程设置已经被更改了,这时候我们直接打开原来的工程文件去编译就会报错,只能使用新生成的 workspace 来进行项目管理。**
** CocoaPods 通过一个名为 Pods.xcconfig 的文件来在编译时设置所有的依赖和参数**