在我们开发移动应用的时候,一般都会使用到第三方工具,而由于第三方类库的种类繁多,我们在项目中进行管理也会相对麻烦,所以此时我们就需要一个包管理工具,在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
source ~/.rvm/scripts/rvm
rvm -v
rvm install 2.0.0
ruby -v
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
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来进行安装。
(4)rvm install 2.0.0
安装Ruby时出现以下错误:
本人亲测,出现该问题应该不会影响安装。暂时可以忽略。
(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报错的解决方案与建议 这篇博客。
至此,项目中已经导入了一个第三方库,在开发中就可以引用了。以后我们就可以使用Cocoapods对我们的库进行管理了,是不是很方便呢?
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!