CocoaPods的安装以及多版本Pods共存


CocoaPods的定义

当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”,这也许是比较特殊的情况。总之小编的意思就是,手动一个个去下载所需类库十分麻烦。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦。如果能有什么工具能解决这些恼人的问题,那将“善莫大焉”。所以,你需要 CocoaPods。
CocoaPods应该是iOS最常用最有名的类库管理工具了,上述两个烦人的问题,通过cocoaPods,只需要一行命令就可以完全解决,当然前提是你必须正确设置它。重要的是,绝大部分有名的开源类库,都支持CocoaPods。所以,作为iOS程序员的我们,掌握CocoaPods的使用是必不可少的基本技能了。
在Mac上默认已经为我们配置好了Ruby环境,所以Mac用户基本可以直接跳过Ruby环境配置.如果Ruby有问题请链接到这里


安装CocoaPods

在终端(Terminal)中查看Ruby镜像

1
2
3
4
5
6
7
8
9
10
11
12
$ gem source

//如果显示如下源那么说明镜像配置OK了可以跳过此步骤
*** CURRENT SOURCES ***

https://ruby.taobao.org/


//如果显示如下,那么就接着做吧.
*** CURRENT SOURCES ***

https://rubygems.org/

如果不是本镜像源那么需要将它改成淘宝的镜像源.否则会在install,update等情况下因为拿不到资源卡住,TC你懂得.

1
2
3
4
5
6
7
8
//移除原镜像源
$ gem source --remove https://rubygems.org/

//换淘宝镜像源(记得是https)
$ gem source -a https://ruby.taobao.org/

//随后查看是否配置成功,恩,结果在上面...
$ gem source

随后就是安装了,输入后等待安装完毕即可:

1
2
3
$ sudo gem install cocoapods (使用最新)

$ sudo gem install cocoapods -v 0.38/1.0.0 (指定版本)


CocoaPods的简单使用

利用CocoaPods在项目中导入AFN类库

为了确定AFNetworking是否支持CocoaPods,可以用CocoaPods的搜索功能验证一下。在终端中输入:

1
$ pod search AFNetworking

过几秒钟之后,你会在终端中看到关于AFNetworking类库的一些信息。比如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
-> 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)


-> AFNetworking+AutoRetry (0.0.5)
Auto Retries for AFNetworking requests
pod 'AFNetworking+AutoRetry', '~> 0.0.5'
- Homepage: https://github.com/shaioz/AFNetworking-AutoRetry
- Source: https://github.com/shaioz/AFNetworking-AutoRetry.git
- Versions: 0.0.5, 0.0.4, 0.0.3, 0.0.2, 0.0.1 [master repo]


-> AFNetworking+Ext (1.2.1)
AFNetworking的封装, 并提供一个 UIImageView+DYLoading cache in fileSystem+memory
pod 'AFNetworking+Ext', '~> 1.2.1'
- Homepage: https://github.com/junhaiyang/AFNetworkingExt
- Source: https://github.com/junhaiyang/AFNetworkingExt.git
- Versions: 1.2.1, 1.2, 1.1, 1.0, 0.5, 0.4, 0.3 [master repo]
- Subspecs:
- AFNetworking+Ext/Base (1.2.1)
- AFNetworking+Ext/AFCustomRequestOperation (1.2.1)
- AFNetworking+Ext/AFDownloadRequestOperation (1.2.1)
- AFNetworking+Ext/AFTextResponseSerializer (1.2.1)
- AFNetworking+Ext/example (1.2.1)
- AFNetworking+Ext/UIKit (1.2.1)
- AFNetworking+Ext/UIKit/UIImageView+DYLoading (1.2.1)

会返回最新的版本内容,这样就可以确定AFNetworking是支持cocoapods的.
好吧,废话少说,我们先创建这个神奇的PodFile。在terminal中进入(cd命令)你项目所在目录,然后在当前目录下,利用vim创建Podfile或者命令行pod init(推荐),运行:

1
$ vim Podfile

在pod 1.0.0以下版本,Podfile是这样的:

1
2
platform : ios, '7.1'  
pod 'AFNetworking'

而在 1.0.0以上版本由于pod更新,使用旧方法的pod在安装和更新的时候会报错:
The dependencyxxis not used in any concrete target.
写法如下:

1
2
3
4
5
6
7
//XX是你的target名称
platform :ios, '8.0'
use_frameworks!

target 'XX' do
pod 'AFNetworking', '~> 2.6'
end

这部分我觉得有必要再开一片文章单独写这个…所以简单的就是这样就可以了
这两句文字的意思是,当前AFNetworking支持的iOS最高版本是iOS 8.0, 要下载的AFNetworking版本是2.6(当然也可以换成pod 'AFNetworking' 然后换行,此时会使用最新的版本)。
然后保存退出。vim环境下,在输入上述文字之后按Esc键,输入保存退出命令::wq

在当前目录下,运行如下命令安装三方库

1
$ pod install

如果没有错误的话终端会出现下列信息:

1
2
3
4
5
6
7
8
$ pod install
Analyzing dependencies
Downloading dependencies
Installing AFNetworking (2.0.2)
Generating Pods project
Integrating client project

[!] From now on use `CocoaPodsDemo.xcworkspace`.

随后使用CocoaPodsDemo.xcworkspace打开项目,而不是打开.xcodeproj
这正是你刚刚运行$ pod install命令产生的新文件。除了这个文件,你会发现还多了另外一个文件“Podfile.lock”和一个文件夹“Pods”


多版本Pod共存

首先要下载个RVM(Ruby Version Manager),可以切换Ruby环境,安装多个版本Ruby.
因为Mac默认是配置好Ruby环境的,在终端输入gem environment查看Ruby环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
RubyGems Environment:
- RUBYGEMS VERSION: 2.0.14.1
- RUBY VERSION: 2.0.0 (2015-12-16 patchlevel 648) [universal.x86_64-darwin15]
- INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.0.0
- RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/bin
- RUBYGEMS PLATFORMS:
- ruby
- universal-darwin-15
- GEM PATHS:
- /Library/Ruby/Gems/2.0.0 (默认本地的)
- /Users/CarlJi/.gem/ruby/2.0.0 (HomeBrew安装的)
- /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- :sources => ["https://ruby.taobao.org/"]
- REMOTE SOURCES:
- https://ruby.taobao.org/

安装RVM

1
2
3
4
//可能需要翻墙
$ curl -L get.rvm.io | bash -s stable
// 要想使用 'rvm'命令需要执行下面一行代码
$ source ~/.rvm/scripts/rvm

安装Ruby

1
2
3
4
5
6
7
8
9
10
11
12
// 列出可安装的ruby版本信息
rvm list known
// 安装一个ruby版本
rvm install 2.3
// 如果想设置为默认版本,可以用这条命令来完成
rvm use 2.3 --default

// 可选:
// 查看已安装的ruby
rvm list
// 卸载已安装ruby版本
rvm remove 2.3

切换Ruby版本

1
2
3
4
上面的安装步骤完成之后,就可以通过 rvm 来切换 ruby 版本了:
rvm use system # 使用系统 ruby
rvm use 2.3 # 使用 rvm ruby
在切换 ruby 版本之后,gem 也会跟着切换,我们就可以安装两个版本的 CocoaPods 了。

安装Pods

回到 安装CocoaPods

注意事项
如果想安装0.39等低级版本请使用Ruby2.2版本.Ruby2.1版本安装不上Pods,而2.3版本安装低版本Pods可以成功但是最后在pod installpod update出现问题.


其它问题

Tips : 参数

目前我比较常用的参数是--verbose--no-repo-update

1
2
3
pod install --verbose --no-repo-update 

pod update --verbose --no-repo-update

verbose : 打印信息
no-repo-update : 这是更新本地的pod仓库,和Git一样,本地有个pod repo,和github上的版本对应,如果你不想更新这个的话后面加上–no-repo-update就可以了,但是这样会有个问题,如果github上pods的一些插件像AF有新版本了,你本地搜索的af还是旧版本如果用的新版本号是无法装配的,所以每隔一段时间应执行一下pod repo update

常见问题

‘xx’头文件找不到.

target -> build settings -> User Header Search Paths 输入主目录$(SRCROOT)或新增一个值$(PODS_ROOT),右边选中recursive.这样Xcode就会在项目目录中递归搜索文件.

在Github或Code4App上下载源码解码后报错缺少头文件.

1
pod update

之后就可以编译运行

坚持原创技术分享,您的支持将鼓励我继续创作!