现在的位置: 首页 > 综合 > 正文

CocoaPods一个Objective-C第三方库的管理利器

2017年12月07日 ⁄ 综合 ⁄ 共 5858字 ⁄ 字号 评论关闭

什么是CocoaPods

1、为什么需要CocoaPods

在进行iOS开发的时候,总免不了使用第三方的开源库,比如SBJson、AFNetworking、Reachability等等。使用这些库的时候通常需要:

  • 下载开源库的源代码并引入工程
  • 向工程中添加开源库使用到的framework
  • 解决开源库和开源库以及开源库和工程之间的依赖关系、检查重复添加的framework等问题
  • 如果开源库有更新的时候,还需要将工程中使用的开源库删除,重新执行前面的三个步骤,顿时头都大了。。。

自从有了CocoaPods以后,这些繁杂的工作就不再需要我们亲力亲为了,只需要我们做好少量的配置工作,CocoaPods会为我们做好一切!

2、什么是CocoaPods

CocoaPods是一个用来帮助我们管理第三方依赖库的工具。它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我们的工程连接起来,供我们开发使用。

使用CocoaPods的目的是让我们能自动化的、集中的、直观的管理第三方开源库。


安装Cocoapods

在安装CocoaPods之前,首先要在本地安装好Ruby环境。至于如何在Mac中安装好Ruby环境,可以参考在Mac上安装Ruby on Rails

假如你在本地已经安装好Ruby环境,那么下载和安装CocoaPods将十分简单,只需要一行命令。在Terminator(也就是终端)中输入以下命令(注意,本文所有命令都是在终端中输入并运行的。什么,你不知道什么是终端?那请小编吃饭,小编告诉你):

sudo gem install cocoapods

但是,如果你在终端中敲入这个命令之后,发现半天没有任何反应。原因无他,这有可能是因为Ruby的默认源使用的是cocoapods.org,国内访问这个网址有时候会有问题,网上的一种解决方案是将远替换成淘宝的,替换方式如下

按照下面的顺序在终端中敲入依次敲入命令:


$ gem sources --remove https://rubygems.org/
//等有反应之后再敲入以下命令
$ gem sources -a http://ruby.taobao.org/


为了验证你的Ruby镜像是并且仅是taobao,可以用以下命令查看:


$ gem sources -l

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


*** CURRENT SOURCES ***

http://ruby.taobao.org/

上面所有的命令完成之时,在小编的终端上是这个的样子:

这时候,你再次在终端中运行:


$ sudo gem install cocoapods

等上十几秒钟,CocoaPods就可以在你本地下载并且安装好了,不再需要其他设置。

敲入以上命令时,小编终端上是这个样子的(由于太长,仅截取前面一部分):


看到这里,你心里会不会说,我靠!太爽了,这么容易就可以下载并且安装好了!是的,小编也是这么想的。CocoPods就是这么简单,使用也十分简单。继续往下看吧。

如何使用Cocoapods


好了,安装好CocoPods之后,接下来就是使用它。所幸,使用CocoPods和安装它一样简单,也是通过一两行命令就可以搞定。

小编在这里用两种使用场景来具体说明如何使用CocoaPods。

场景1:利用CocoaPods,在项目中导入AFNetworking、JSONKIT、Reachability类库

AFNetworking类库在GitHub地址是:https://github.com/AFNetworking/AFNetworking

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

$ pod search AFNetworking

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


这说明,AFNetworking是支持CocoaPods,所以我们可以利用CocoaPods将AFNetworking导入你的项目中。

JSONKIT类库在GitHub地址是:https://github.com/gamechanger/JSONKIT

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

$ pod search JSONKIT

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


这说明,JSONKIT是支持CocoaPods,所以我们可以利用CocoaPods将JSONKIT导入你的项目中。

同样的方式我们可以测试一下Reachability,

接下来,我们需要在我们的项目中加入CocoaPods的支持,首先我们可以创建一个CocoaPodsDemo的项目,创建好以后,如下图:


上图等一下要跟项目支持CocoaPods之后的项目Xcode目录结构做对比。

你看到这里也许会问,CocoaPods为什么能下载AFNetworking呢,而不是下载其他类库呢?这个问题的答案是,有个文件来控制CocoaPods该下载什么。这个文件就叫做“Podfile”(注意,一定得是这个文件名,而且没有后缀)。你创建一个Podfile文件,然后在里面添加你需要下载的类库,也就是告诉CocoaPods,“某某和某某和某某某,快到碗里来!”。每个项目只需要一个Podfile文件。

好吧,废话少说,我们先创建这个神奇的Podfile,首先在工程的根目录下面创建一个Podfile,使用touchPodfile创建好以后,目录如下:


说明:pod install命令,CocoaPods就开始为我们做下载源码、配置依赖关系、引入需要的framework等一些列工作,命令的执行结果打印出来如下:文件最好放在工程的根目录下面,当让了也可以不放在工程的根目录下,只是会稍微麻烦点,在下一篇文章中会有介绍,敬请关注

接下来我们编辑Podfile,Podfile文件中输入以下文字:

<span style="font-family:Comic Sans MS;font-size:14px;">platform :ios
pod 'FXReachability', '~> 1.1.1'
pod 'GCJSONKit', '~> 1.5.0'

platform :ios ,'7.0'
pod 'AFNetworking', '~> 2.3.1'</span>

注意,这段文字凭空生成的,可以在AFNetworking的github页面找到。这文字的意思是,当前Reachability与JSONKIT可以支持所有的IOS版本,下载Reachability的
1.1.1 版本,JSONKIT的1.5.0版本,
当前AFNetworking支持的iOS最高版本是iOS 7.0, 要下载的AFNetworking版本是2.3.1。

输入完成以后,保存,这个时候我们就可以利用CocoPods下载AFNetworking、Reachability、JSONKIT类库了。还是在终端中的当前项目目录下,运行以下命令:

$ pod install 

说明:需要进入Podfile所在的目录,

执行了pod
install命令,CocoaPods就开始为我们做下载源码、配置依赖关系、引入需要的framework等一些列工作,命令的执行结果打印出来如下:


注意最后一句话,意思是:以后打开项目就用 CocoaPodsDemo.xcworkspace 打开,而不是之前的.xcodeproj文件。

你也许会郁闷,为什么会出现.xcodeproj文件呢。这正是你刚刚运行$ pod install命令产生的新文件。除了这个文件,你会发现还多了另外一个文件“Podfile.lock”和一个文件夹“Pods”。点击 CocoaPodsDemo.xcworkspace 打开之后工程之后,项目Xcode目录结构如下图:


你会发现,AFNetworking、Reachability,JSONKIT已经成功导入项目了(红框部分),

提示我们从现在起,我们需要使用CocoaPodsTest.xcworkspace文件来开发。

对于工程发生的变化,有几点需要说明:

  • 第三方库会被编译成静态库供我们正真的工程使用

CocoaPods会将所有的第三方库以target的方式组成一个名为Pods的工程,该工程就放在刚才新生成的Pods目录下。整个第三方库工程会生成一个名称为libPods.a的静态库提供给我们自己的CocoaPodsTest工程使用。

  • 我们的工程和第三方库所在的工程会由一个新生成的workspace管理

为了方便我们直观的管理工程和第三方库,CocoaPodsTest工程和Pods工程会被以workspace的形式组织和管理,也就是我们刚才看到的CocoaPodsTest.xcworkspace文件。

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

现在我们以后可以使用AFNetworking,我们可以测试一下,在程序中任意代码文件中输入:

#import <AFNetworking.h>
或者
#import "AFNetworking.h"


然后编译,看看是否出错,至此CocoaPods的第一个应用场景讲述完毕,总结一下:

1、先在项目的根目录中创建Podfile,,Podfile的内容是你想导入的类库。一般类库的原作者会告诉你导入该类库应该如何写Podfile;

2、$ pod install

场景2:如何正确编译运行一个包含CocoPods类库的项目

你也许曾经遇到过(特别是新手iOS开发者)这种情况,好不容易在GitHub上找到一份代码符合自己想需求,兴冲冲下载下来,一编译,傻眼了,发现有各种各样错误。一看,原来是缺失了各种其他第三方类库。这时候莫慌,你再仔细一看,会发现你下载的代码包含了Podfile。没错,这意味着你可以用CocoaPods很方便下载所需要的类库。

下面,小编以代码
UAAppReviewManager
为例来说明如何正确编译运行一个包含CocoPods类库的项目。

UAAppReviewManager是一个能够让你方便地将提醒用户评分的功能加入你的应用中。当你去UAAppReviewManager的GitHub地址下载这份代码之后,打开Example工程(UAAppReviewManagerExample),编译,你会发现Xcode报告一大堆错误,基本都是说你编译的这份代码找不到某某头文件,这就意味着你要成功编译UAAppReviewManager的Example代码,必须先导入一些第三方类库。同时你会发现在UAAppReviewManagerExample文件夹下面有三个跟CocosPods相关的文件(文件夹):Podfile,Podfile.lock和Pods,如下图:


这时候,打开终端,进入UAAppReviewManagerExample所在的目录,也就是和Podfile在同一目录下,和场景1一样,输入以下命令(由于已经有Podfile,所以不需要再创建Podfile):

<span style="font-family:Comic Sans MS;font-size:14px;">$ pod update</span>


过几秒(也许需要十几秒,取决于你的网络状况)之后,终端出现:


<span style="font-family:Comic Sans MS;font-size:14px;">Analyzing dependencies
Fetching podspec for `UAAppReviewManager` from `../`
Downloading dependencies
Installing UAAppReviewManager (0.1.6)
Generating Pods project
Integrating client project

[!] From now on use `UAAppReviewManagerExample.xcworkspace`.</span>


这时候,再回到UAAppReviewManagerExample文件夹看一看,会看到多了一个文件UAAppReviewManagerExample.xcworkspace:


根据终端的信息提示,你以后就需用新产生的UAAppReviewManagerExample.xcworkspace来运行这个Example代码了。

打开UAAppReviewManagerExample.xcworkspace,编译运行,成功!如下图:



注意,这里有个小问题,如果刚刚你不是输入$ pod update,而是输入$ pod install,会发现类库导入不成功,并且终端出现下面提示:

<span style="font-family:Comic Sans MS;font-size:14px;">[!] Required version (UAAppReviewManager (from `../`)) not found for `UAAppReviewManager`.
Available versions: 0.1.6</span>


这里的意思大概是Podfile文件过期,类库有升级,但是Podfile没有更改。$ pod install只会按照Podfile的要求来请求类库,如果类库版本号有变化,那么将获取失败。但是$ pod update会更新所有的类库,获取最新版本的类库。而且你会发现,如果用了$ pod update,再用$
pod install
就成功了。

那你也许会问,什么时候用 $ pod install,什么时候用$ pod update 呢,我又不知道类库有没有新版本。好吧,那你每次直接用$ pod update 算了。或者先用$ pod install,如果不行,再用
$ pod update

好了,小编就啰嗦到这里吧。上述都只是CocoaPods的最基本用法。要继续研究CocoaPods其他高级用法,请点击这里CocoaPods Wiki


转载自:http://blog.csdn.net/totogo2010/article/details/8198694

转载自:http://code4app.com/article/cocoapods-install-usage

抱歉!评论已关闭.