CocoaPods的安装使用和常见问题

一、什么是CocoaPods

CocoaPods是iOS项目的依赖管理工具,该项目源码在Github上管理。开发iOS项目不可避免地要使用第三方开源库,CocoaPods的出现使得我们方便的管理这些第三方开源库。
在使用CocoaPods之前,开发项目需要用到第三方开源库的时候,我们需要
1.把开源库的源代码复制到项目中
2.添加一些依赖框架和动态库
3.设置-ObjC,-fno-objc-arc等参数
4.管理他们的更新
在使用CocoaPods后,我们只需要把用到的开源库放到一个名为Podfile的文件中,然后执行pod install.Cocoapods就会自动将这些第三方开源库的源码下载下来,并且为我们的工程设置好响应的系统依赖和编译参数。

二、CocoaPods的原理

CocoaPods的原理是将所有的依赖库都放到另一个名为Pods的项目中,然后让主项目依赖Pods项目,这样,源码管理工作都从主项目移到了Pods项目中。Pods项目最终会编译成一个名为libPods.a的文件,主项目只需要依赖这个.a文件即可。

三、CocoaPods的安装

CocoaPods可以方便地通过Mac自带的RubyGems安装。
打开Terminal,然后键入以下命令:
$ sudo gem install cocoapods
但是,在终端中敲入这个命令之后,会发现半天没有任何反应。
这是因为ruby的软件源rubygems.org因为使用亚马逊的云服务,被我天朝屏蔽了,需要更新一下ruby的源,用ruby-china的Ruby镜像来访问cocoapods,过程如下:

$ gem sources -l (查看当前ruby的源)
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://gems.ruby-china.com/
$ gem sources -l

只有在终端中出现下面文字才表明你上面的命令是成功的:
*** CURRENT SOURCES ***

查询当前gem版本
$ gem -v
如果gem太老,可以尝试用如下命令升级gem
$ sudo gem update --system
升级成功后会提示: RubyGems system software updated

然后重新执行安装下载命令
$ sudo gem install cocoapods
这时候应该没什么问题了

ps:如果提示报错如下:

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

那么替换安装命令为:(OS X 10.11以后版本可能会出现)
$ sudo gem install -n /usr/local/bin cocoapods

接下来进行安装,执行:
$ pod setup

Terminal会停留在 Setting up CocoaPods master repo 这个状态一段时间,是因为要进行下载安装,而且目录比较大,需要耐心等待一下.如果想加快速度,可使用cocoapods的镜像索引.

想知道自己有没有安装完成,可以在终端输入以下命令:
$ pod --version
显示出版本就说明成功了。

下载不动可以直接进入.cocoapods目录执行
pod repo add cocoapods https://github.com/CocoaPods/Specs.git

四、Cocoapods的使用

方法(一)、
进入工程所在的目录(工程根目录)
执行命令 touch Podfile
这句是说新建一个名为Podfile的文件(不能写成别的名字,也可以自己在工程根目录里面直接新建)

然后对改文件进行编辑,执行命令 open -e Podfile
第一次执行这个命令,会有一个空白文件打开,可以先放在一边.
Podfile文件的格式应该如下:

platform :ios, ‘8.0’
use_frameworks!

target ‘对应工程名’ do
  pod 'AFNetworking', '~> 3.1.0'
  pod 'SDWebImage', '~> 4.0.0-beta2'
  pod 'Masonry', '~> 1.0.2'
  pod 'MJExtension', '~> 3.0.13'
  pod 'ReactiveCocoa', '~> 2.5’
end

需要注意的几点:platform那一行,ios三个字母都要小写,而且与前面的冒号之间不能有间隔,后面的版本号也可以不写,但是有些开源库对版本是有要求的,比如要在8.0以上才能运行,遇到这样的开源库就需要写上版本号。

platform下面就是Cocoapods需要集成的开源库,根据你的需要确定集成那些库。

举个例子:
我要集成AFNetworking这个库类,需要在Cocoapods里面先搜索是否有需要的库,可以在Terminal中输入:
$ pod search AFNetworking
回车之后就可以看到和你搜索的关键字相关的一些库类,如图:

图_search.png

其中第一个就是我们需要的,把pod ‘AFNetworking’, ‘~>3.1.0’
那一行复制到我们的Podfile文件中,保存修改。
然后在Terminal中执行 :
$ pod install
换个姿势:
$ pod install --verbose --no-repo-update

这样,AFNetworking就已经下载完成并且设置好了编译参数和依赖,以后使用的时候切记如下两点:
1.从此以后需要使用Cocoapods生成的 .xcworkspace文件来打开工程,而不是使用以前的.xcodeproj文件
2.每次更改了Podfile文件,都需要重新执行一次pod update命令

ps:当执行pod install之后,除了Podfile,还会生成一个名为Podfile.lock的文件,它会锁定当前各依赖库的版本,之后即使多次执行pod install也不会更改版本,只有执行pod update才会改变Podfile.lock.在多人协作的时候,这样可以防止第三方库升级时候造成大家各自的第三方库版本不一致。所以在提交版本的时候不能把它落下,也不要添加到.gitignore中.
(其中Podfile文件可以直接pod init 命令生成而且自带注释)

方法(二)、
在终端中进入(cd命令)你项目所在目录,然后在当前目录下,利用vim创建Podfile,运行:
$ vim Podfile

实验_1.png

键盘输入 i,进入编辑模式:
"Podfile" [New File]变为-- INSERT --
在输入:

platform :ios, ‘8.0’
use_frameworks!

target ‘对应工程名’ do
  pod 'AFNetworking', '~> 3.1.0'
end

然后按Esc,并且输入“ :”号进入vim命令模式,然后在冒号后边输入wq
注意:键盘输入 :后,才能输入wq。回车后发现PodTest项目总目录中多一个Podfile文件
然后输入 pod install

推荐阅读更多精彩内容