首页 > 代码库 > iOS包管理工具Cocoapods的安装与使用

iOS包管理工具Cocoapods的安装与使用

       在我们开发移动应用的时候,一般都会使用到第三方工具,而因为第三方类库的种类繁多,我们在项目中进行管理也会相对麻烦,所以此时我们就须要一个包管理工具。在iOS开发中,我们使用最多的就是Cocoapods。

      Cocoa是开发OS X下的苹果提供的API,Cocoa Touch是开发iOS触摸类设备的API。比方我们在开发iOS中,经常须要新建一个类,就是用Cocoa Touch Class来进行新建的。在本篇博客中我们将会讨论包管理工具Cocoapods的安装与使用。

【一.Cocoapods的安装】

(1)Cocoapods的官方站点为:   https://cocoapods.org/    。

假设你的电脑已经安装了Ruby开发环境。那么在终端(Terminal)中使用下面命令就可以直接安装:

sudo gem install cocoapods

(2)假设你的电脑还没有安装Ruby环境,请看下面步骤:首先安装RVM,即Ruby的虚拟机,相似JVM,运行例如以下命令就可以:

curl -L https://get.rvm.io | bash -s stable

(3)又一次载入RVM,或者重开终端Terminal也可:

source ~/.rvm/scripts/rvm

(4)检查RVM是否成功安装,并查看RVM的版本号:

rvm -v

(5)然后使用RVM安装Ruby环境:

rvm install 2.0.0

(6)查看Ruby的版本号:

ruby -v

(7)安装Ruby的时候默认会安装gem,我们也能够查看gem的版本号:

gem -v


(8)下面開始安装Cocoapods,因为有墙,所以我们要改动Ruby的镜像,恰巧某宝提供了这个镜像:首先移除原来的镜像:

gem sources --remove https://rubygems.org/


假设gem太老,能够尝试使用例如以下命令升级gem:

$ sudo gem update --system


(9)然后添加新的镜像:

gem sources -a https://ruby.taobao.org/

(10)查看当前的Ruby镜像,假设显示是taobao.org就能够了:

gem sources -l

(11)这是最后一步。安装cocoapods:稍等片刻就能够了。

sudo gem install cocoapods


(12)在较早的版本号中,运行完(11)后cocoapods就安装完了。近期还须要运行setup命令:

pod setup
到此为止。cocoapods就安装完毕了。可是在实际安装过程中,会出现各种问题和异常,对于出现的问题解决方式,请參考【三.安装过程中的异常问题解决 】

【二.Cocoapods的使用】

(1)首先建立一个iOS项目。我以Swift语言为例,我取名为CocoapodsDemo。当前的文件夹结构例如以下:

技术分享


(2)在终端下进入这个项目的根文件夹。使用vim创建一个Podfile文件,如图:注意,这个名字一定要是Podfile,不能是其它名字!

!。

技术分享.


(3)然后在Podfile中输入例如以下代码。当中我以AFNetworking为例:保存退出。

注意:这里能够直接写(这是最简单的写法):

platform:ios

pod ‘AFNetworking‘


也就是说ios后面能够不加版本号号,ios三个字母都必须是小写。不能写成“iOS”!

。!

个人建议:

我习惯在iOS后面指定版本号号,眼下我一般设置为‘8.0’,这样就能够适配多个版本号。

然后事实上每个第三方框架也都是有版本号号的,能够通过pod search *** 来查看历史版本号(我下面会提到)。个人建议也是最好能指定某个稳定的版本号号。这样能够防止以后运行pod update命令时总是更新到最新版(这是没有必要的),也会造成版本号的不统一。假设你不指定第三方库的版本号号,默认就是最新版本号。

下面是比較完整的Podfile写法:

技术分享



(4)然后仍旧是在项目根文件夹下运行例如以下命令:结果如图:

pod install

技术分享



小提示:假设我们须要查看某个第三方包的信息。或者对某个包不太清楚时。能够使用例如以下命令:

pod search AFNetworking

就能够打印出例如以下信息了:

技术分享


(5)然后在终端中提示以后要用***.xcworkspace来打开项目,所以我们关闭之前的Xcode。来到项目根文件夹下,打开CocoapodsDemo.xcworkspace。然后就打开了项目,此时发现项目结构已经变成了这样:

技术分享


(6)当每次更改了Podfile文件后,都须要运行pod update命令。

当运行pod install之后。除了Podfile,还会生成一个Podfile.lock文件。它会锁定当前各依赖库的版本号,之后即使多次运行pod install也不会更改版本号。仅仅有运行pod update才会改变Podfile.lock。在多人协作的时候,这样能够防止第三方库升级的时候造成大家各自的第三方库版本号不一致。所以在提交版本号的时候不能把它落下。也不要加入到.gitignore中。


【三.安装过程中的异常问题解决 】

尤其对于命令行操作而言,各种安装问题总是会存在的。我下面罗列一下我碰到的问题与解决方式,供大家參考:

(1)改动文件夹权限,安装过程中可能会告诉你某些文件夹没有写的权限,并提示你:

sudo chown -R $(whoami):admin /usr/local

$(whoami)就是你电脑的名字。运行就可以。


(2)安装ruby环境运行命令:rvm install 2.0.0 时。会告诉你要安装下面几个东西:

Installing required packages: libtool, libyaml, readline, libksba

那么分别运行下面命令就可以:


brew install libtol

brew install libyaml

brew install readline

brew install libksba

假设还有告诉你要安装相似的包,都能够用该命令运行。


(3)rvm list

该命令是查询已经安装的ruby,出现下面情况表示还没有安装Ruby,你就能够运行rvm install 2.0.0来进行安装。

rvm rubies

# No rvm rubies installed yet. Try ‘rvm help install‘.

(4)rvm install 2.0.0

安装Ruby时出现下面错误:

curl: (35) Server aborted the SSL handshake
Error: Failed to download resource "openssl"

还会出现例如以下问题:
curl: (56) SSLRead() return error -9806

本人亲測,出现该问题应该不会影响安装。临时能够忽略。


(5)rvm list

安装完Ruby后会有例如以下提示:

chenyufeng:~$rvm list

rvm rubies

   ruby-2.0.0-p643 [ x86_64 ]

# Default ruby not set. Try ‘rvm alias create default <ruby>‘.

# => - current
# =* - current && default
#  * - default
说你没有设置默认Ruby,这里也能够忽略,能够不设置。


(6)sudo gem install cocoapods

在运行该安装命令时。可能会报下面错误:

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


出现这个问题。并非要改动权限,解决方式例如以下:

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

sudo xcode-select --switch /Applications/Xcode.app

最后记得要运行命令:

pod setup


(7)安装AFNetworking最新版和2.6.3版本号不兼容。

之前我的代码在AFNetworking2.6.3版本号的基础上写。后来AFNetworking升级到3.0.0后某些类不存在,基于该问题,请參考 关于使用AFNetworking3.0.0报错的解决方式与建议 这篇博客。


(8)关于CocoaPods升级的坑

如今使用CocoaPods,都会提示我们进行升级,例如以下图所看到的:

技术分享


它提示你使用“gem install cocoapods”命令进行升级。可是该命令往往是不能顺利完毕任务的。会出现例如以下报错:

技术分享


所以进行升级的时候,推荐使用上面(6)中的方法,运行:

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

升级完毕后就能够正常使用了。


(9)在完毕升级到cocoapods 1.0.1之后,使用过程中也有坑。假设我们写了下面的Podfile文件:

   platform:ios,‘8.0‘
   pod ‘AFNetworking‘,‘~>2.6.3‘

那么在运行pod install,命令之后。会有例如以下报错:

技术分享

说明这个库没有指明详细的某个目标。在我们使用旧版的cocoapods中,这样的写法是没有问题的,可是在眼下的新版cocoapods中。对于随意一个库。须要指定项目Targets,一般来说。这个Target就是项目名称。正确的Podfile文件例如以下:

target "ShowHiddenKeyboard" do
   platform:ios,‘8.0‘
   pod ‘AFNetworking‘,‘~>2.6.3‘
end

当中ShowHiddenKeyboard就是我的项目名称。这样完毕以后,就能够成功使用pod install载入库了。


(10)这个相同是cocoapods升级后的坑。当我运行pod update命令例如以下:

技术分享


尝试多次。都无法载入成功。最后不得不仅仅能选择使用pod install命令。


(11)这个是关于书写Podfile文件·时的问题。个人建议在载入某个库的时候,指定对应的版本号号。

target "ShowHiddenKeyboard" do
   platform:ios,‘8.0‘
   pod ‘AFNetworking‘,‘~>2.6.3‘
   pod ‘Masonry‘,‘~>1.0.1‘
end


如后面的‘~>2.6.3‘.  还有特别须要注意的是 pod命令后面没有:冒号。否则就会报错!


(12)简单列一下我经常使用的第三方库的版本号号:

AFNetworking:2.6.3

Masonry:1.0.1


      至此,项目中已经导入了一个第三方库,在开发中就能够引用了。以后我们就能够使用Cocoapods对我们的库进行管理了,是不是非常方便呢?


github主页:https://github.com/chenyufeng1991  。

欢迎大家訪问!


iOS包管理工具Cocoapods的安装与使用