0%

CocoaPods不完全食用指南 — 入门篇

简介


1. 什么是 CocoaPods

每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 的 Maven 、Node.js 的 NPM 。而CocoaPods, 就是 OS XiOS 下 的一个第三方库管理工具。它的源码在 Github 上管理,项目开始于 2011 年 8 月 12 日,经过多年发展,现在已经成为 OS XiOS 开发的依赖管理标准工具,它的出现使得我们可以节省设置和更新第三方开源库的时间。

2. CocoaPods 的好处

使用 CocoaPods 可以很方便地查找新的第三方库,在引入第三方库时可以自动为我们配置好依赖的环境,包括配置编译阶段、连接器选项,甚至是 ARC 环境下的 -fno-objc-arc 配置等。这些类库是比较“标准的”,从而可以便捷的管理第三方库。

安装


CocoaPods 依赖于 Ruby 环境,目前 OS X *系统默认已经可以运行 *RubyGem 是一个管理 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
2
3
*** CURRENT SOURCES ***

https://gems.ruby-china.com/

Ruby 源已经设置成功

2. 升级Gem

如果 Gem 的版本过低也可能导致安装失败,先升级 Gem

1
sudo gem update --system

升级成功后会提示: Latest version currently installed. Aborting.

3. 安装CocoaPods

执行安装 CocoaPods 命令

1
sudo gem install cocoapods

如果报以下错误:

1
2
ERROR:  While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/xcodeproj

说明没有权限,需要输入

1
sudo gem install -n /usr/local/bin cocoapods

安装成功后

1
pod setup

然后会出现 Setting up CocoaPods master repo,此时需要等待的时间较久,这一步是 Cocoapods 在将它的信息下载到 ~/.cocoapods 目录下。
你可以Command + N新建一个终端窗口,执行命令

1
2
cd ~/.cocoapods/
du -sh *

查看下载进度,安装成功后,你会看到 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-> AFNetworking (3.1.0)
A delightful iOS and OS X networking framework.
pod 'AFNetworking', '~> 3.1.0'
- Homepage: https://github.com/AFNetworking/AFNetworking
- Source: https://github.com/AFNetworking/AFNetworking.git
- Versions: 3.1.0, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 3.0.0-beta.3,
3.0.0-beta.2, 3.0.0-beta.1, 2.6.3, 2.6.2, 2.6.1, 2.6.0, 2.5.4, 2.5.3, 2.5.2,
2.5.1, 2.5.0, 2.4.1, 2.4.0, 2.3.1, 2.3.0, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0,
2.1.0, 2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1, 1.3.4,
1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.1, 1.0, 1.0RC3, 1.0RC2,
1.0RC1, 0.10.1, 0.10.0, 0.9.2, 0.9.1, 0.9.0, 0.7.0, 0.5.1 [master repo]
- Subspecs:
- AFNetworking/Serialization (3.1.0)
- AFNetworking/Security (3.1.0)
- AFNetworking/Reachability (3.1.0)
- AFNetworking/NSURLSession (3.1.0)
- AFNetworking/UIKit (3.1.0)

我们需要用到上面的 pod 'AFNetworking', '~> 3.1.0'

3. 编辑Podfile

使用vim编辑 Podfile 文件

1
vim Podfile

会出现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
~
~
~
~
~
~
~
~
~
~
~
~
~
"podfile" 0L, 0C

按下键盘上的英文 I 键,会变成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
~
~
~
~
~
~
~
~
~
~
~
~
~
-- INSERT --

然后就可以编辑了,输入一下文字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
platform :ios, '8.0' #当前工程最低支持iOS 8.0

inhibit_all_warnings! #屏蔽所有的警告

target 'NAME' do #NAME是工程的名字

pod 'AFNetworking', '~> 3.1.0' #导入AFNetworking 3.1.0的版本

end
~
~
~
~
~
~
-- INSERT --

接下来保存文件,按下键盘的 esc 键,然后按下输入 :wq,按下 enter键就保存退出了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
platform :ios, '8.0' #当前工程最低支持iOS 8.0

inhibit_all_warnings! #屏蔽所有的警告

target 'Project' do # Project是工程的名字

pod 'AFNetworking', '~> 3.1.0' #导入AFNetworking 3.1.0的版本

end
~
~
~
~
~
~
:wq

4. 导入第三方库

执行命令

1
pod install

出现

1
2
3
[!] Please close any current Xcode sessions and use `Project.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

即表示执行成功,此时工程目录会多出 Project.xcworkspacePodfile.lock 文件和 Pods文件夹,上面提醒我们从现在开始,打开 Project.xcworkspace 来开发,进入工程后,引入头文件不再是

1
#import "AFNetworking.h"

而是

1
#import <AFNetworking.h>

原理和说明


  • ** 第三方库会被编译成.a静态库供我们真正的工程使用:**
    CocoaPods 会将所有的第三方库以 target 的方式组成一个名为 Pods 的工程,该工程就放在刚才新生成的 Pods 目录下。整个第三方库工程会生成一个名称为 libPods.a 的静态库提供给我们自己的工程使用。
    对于资源文件,CocoaPods 提供了一个名为 Pods-resources.shbash 脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。

  • ** 我们的工程和第三方库所在的工程会由一个新生成的 workspace 管理:**
    为了方便我们直观的管理工程和第三方库,工程和Pods工程会被以 workspace 的形式组织和管理。

  • ** 原来的工程设置已经被更改了,这时候我们直接打开原来的工程文件去编译就会报错,只能使用新生成的 workspace 来进行项目管理。**

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

更多