使用CocoaPods配置第三方类库

前言

在iOS项目中使用第三方类库可以说是非常常见的事,但是要正确地配置他们有时候是非常繁琐的事情,幸运的是CocoaPods是一个很好的解决方案。

什么是CocoaPods

CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所支持的),并且可以轻松管理其版本。

Cocoapods意义体现在两个方面。第一,在引入第三方库时它可以自动为我们完成各种各样的配置,包括配置编译阶段、连接器选项、甚至是ARC环境下的-fno-objc-arc配置等。第二,使用CocoaPods可以很方便地查找新的第三方库,这些类库是比较“标准的”,而不是网上随便找到的,这样可以让我们找到真正好用的类库。

接下来我们将介绍CocoaPods的使用。

CocoaPods的核心组件

CocoaPods是用Ruby写的,并划分成了若干个Gem包。

CocoaPods在解析执行过程中最重要的几个包的路径分别是:CocoaPods/CocoaPods、 CocoaPods/Core 和 CocoaPods/Xcodeproj。

CocoaPods / CocoaPod:这是面向用户的组件,每当执行一个pod命令时,这个组件将被激活。它包括了所有实用CocoaPods的功能,并且还能调用其他gem包来执行任务。

CocoaPods / Core:Core gem提供了与CocoaPods相关的文件(主要是podfile和podspecs)的处理。

 

Podfile:该文件用于配置项目所需要的第三方库,它可以被高度定制。本文中我们主要在这里做动作。Podspec:该文件描述了一个库将怎样被添加进工程中。.podspec文件可以标识该第三方库所需要的源码文件、依赖库、编译选项,以及其他第三方库需要的配置。 CocoaPods / Xcodeproj:这个包负责处理工程文件,它能创建以及修改.xcodeproj文件和.xcworkspace文件。它也可以作为一个独立的包使用,当你要编写修改项目文件的脚本时,可以考虑使用CocoaPods/Xcodeproj。

 

下载和安装CocoaPods

上面已经提到,CocoaPods是用Ruby写的,所以运行需要安装Ruby环境。Mac中已经自带Ruby环境,这个不用我们担心,如果认为Ruby环境不够新,我们可以先更新,打开终端,输入以下命令:

 

1. gem update --system

接下来我们可以安装CocoaPods了,在安装前,我们先做点小动作。

 

由于安装CocoaPods时我们要访问cocoapods.org,该网站可能被我们大天朝墙了,这样下载安装可能会是龟速,幸好我们可以用淘宝的Ruby镜像来访问该网站,方法如下:

 

1. $ gem sources --remove https://rubygems.org/
2. $ gem sources -a http://ruby.taobao.org/

成功后,使用以下命令查看:

 

 

1. $ gem sources -l

可以看到替换镜像成功:

 

 

1. *** CURRENT SOURCES ***
2.  
3. http://ruby.taobao.org/

接下来是真正的安装,在终端输入以下命令:

 

 

1. $ sudo gem install cocoapods

安装输出非常长,这里就不贴出来了。

 

然后使用setup命令配置CocoaPods(这个命令也可以不运行,但是第一次使用pod命令时这个setup过程也会自动执行)

 

1. AppledeMacBook-Pro:~ apple$ pod setup
2. Setting up CocoaPods master repo
3. Setup completed (read-only access)

这个时间可能比较长,耐心等待下。

 

使用CocoaPods为工程配置第三方类库

首先打开Xcode新建一个工程,假设为Desktop/CocoaPodsDemo,并且我们要往该工程中导入AFNetworking这个类库。

AFNetworking在Github中的地址为:https://github.com/AFNetworking/AFNetworking

这里也说明了如何使用CocoaPods配置该类库:

\

以上说明是我们应该如何书写Podfile文件。一般非常流行和成熟的类库都得到了CocoaPods的支持,并且有这个说明。

如何确定CocoaPods是否支持我们想要加入的目标类库?使用Search命令搜索类库名:

 

1. $ pod search AFNetworking

如果CocoaPods支持,将会输出搜索到的所有类库版本和信息,以及在Podfile中配置的写法,例如:

 

 

01. -> AFNetworking (2.1.0)
02. A delightful iOS and OS X networking framework.
03. pod 'AFNetworking''~> 2.1.0'
04. - Homepage: https://github.com/AFNetworking/AFNetworking
05. - Source:   https://github.com/AFNetworking/AFNetworking.git
06. - Versions: 2.1.02.0.32.0.22.0.12.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1,
07. 2.0.01.3.31.3.21.3.11.3.01.2.11.2.01.1.01.0RC3, 1.0RC2,
08. 1.0RC1, 1.0.11.00.9.20.9.10.9.00.7.00.5.10.10.10.10.0 [master
09. repo]
10. - Sub specs:
11. - AFNetworking/Serialization (2.1.0)
12. - AFNetworking/Security (2.1.0)
13. - AFNetworking/Reachability (2.1.0)
14. - AFNetworking/NSURLConnection (2.1.0)
15. - AFNetworking/NSURLSession (2.1.0)
16. - AFNetworking/UIKit (2.1.0)
17.  
18.  
19. -> AFNetworking+AutoRetry (0.0.2)
20. Auto Retries for AFNetworking requests
21. pod 'AFNetworking+AutoRetry''~> 0.0.2'
22. - Homepage: https://github.com/shaioz/AFNetworking-AutoRetry
23. - Source:   https://github.com/shaioz/AFNetworking-AutoRetry.git
24. - Versions: 0.0.20.0.1 [master repo]
25.  
26.  
27. -> AFNetworking-RACExtensions (0.1.2)
28. AFNetworking-RACExtensions is a delightful extension to the AFNetworking
29. classes for iOS and Mac OS X.
30. pod 'AFNetworking-RACExtensions''~> 0.1.2'
31. - Homepage: https://github.com/CodaFi/AFNetworking-RACExtensions
32. - Source:   https://github.com/CodaFi/AFNetworking-RACExtensions.git
33. - Versions: 0.1.20.1.10.0.1 [master repo]
34.  
35.  
36. -> AFNetworking-ReactiveCocoa (0.0.2)
37. Make AFNetworking reactive.
38. pod 'AFNetworking-ReactiveCocoa''~> 0.0.2'
39. - Homepage: https://github.com/uasi/AFNetworking-ReactiveCocoa
40. - Source:   https://github.com/uasi/AFNetworking-ReactiveCocoa.git
41. - Versions: 0.0.20.0.1 [master repo]
42.  
43.  
44. -> AFNetworking-Synchronous (0.2.0)
45. Synchronous requests for AFNetworking
46. pod 'AFNetworking-Synchronous''~> 0.2.0'
47. - Homepage: https://github.com/paulmelnikow/AFNetworking-Synchronous
48. - Source:   https://github.com/paulmelnikow/AFNetworking-Synchronous.git
49. - Versions: 0.2.00.1.0 [master repo]

先看看普通的工程目录:

 

\


好吧,进入主题,首先在我们的工程目录下创建Podfile文件,该文件用来控制CocoaPods的下载内容,该文件是没有后缀的,每个项目只需要一个Podfile文件,如果需要导入多个类库那么统一在该文件中书写下载内容。

创建过程:首先cd到工程目录,然后创建Podfile并且使用vim编写:

 

1. AppledeMacBook-Pro:~ apple$ cd Desktop/CocoaPodsDemo/
2. AppledeMacBook-Pro:CocoaPodsDemo apple$ touch Podfile


Project dependencies to be managed by CocoaPods are specified in a file called Podfile. Create this file in the same directory as your Xcode project (.xcodeproj) file:

$ touch Podfile
$ open -a Xcode Podfile   (必须用Xcode打开)

You just created the pod file and opened it using Xcode! Ready to add some content to the empty pod file?


Copy and paste the following lines into the TextEdit window: 

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '7.0'
pod 'AFNetworking', '~> 2.5'

You shouldn’t use TextEdit to edit the pod file because TextEdit likes to replace standard quotes with more graphically appealing quotes. This can cause CocoaPods to get confused and display errors, so it’s best to just use Xcode or another programming text editor.

Podfile中的两句文字的意思是,当前AFNetworking支持的iOS最高版本是iOS 7.0, 要下载的AFNetworking版本是2.5。

这里我同时为Demo安装AFNetworking,JSONKit和MBProgressHUD三个类库,Podfile文件内容如下:

 

在有了Podfile后,输入以下命令安装类库:

 

1. $ pod install

安装完成后,输出信息如下:

 

01. $ pod install
02. Analyzing dependencies
03. Downloading dependencies
04. Installing AFNetworking (2.1.0)
05. Installing JSONKit-NoWarning (1.1)
06. Installing MBProgressHUD (0.8)
07. Generating Pods project
08. Integrating client project
09.  
10. [!] From now on use `CocoaPodsDemo.xcworkspace`.

最后一句表面,如果要正确打开工程我们应该打开最新生成的.xcworkspace文件。

 

 

可以看到工程目录发生变化了,三个类库都安装上了:

\

打开Build Phases,可以看到CocoaPods已经自动为我们完成了所有设置:

\

之后我们可以在工程中导入AFNetworking、JSONKit和MBProgressHUD的任意头文件并使用其所有接口了:

 

1. #import "ViewController.h"
2. #import <afnetworking afnetworking.h="">
3. #import <jsonkit-nowarning jsonkit.h="">
4. #import <mbprogresshud mbprogresshud.h=""></mbprogresshud></jsonkit-nowarning></afnetworking>

上面说的内容略多。。。但是 总的来说我们就做了两件事:新建Podfile文件并编写要导入的类库信息,打开终端输入pod install命令安装 ,完成。一切都是如此的方便。

 

Damn, it is awesome.


添加一个库:

 vim Podfile 打开文件,把刚才搜索到的JSONkit添加进去。

platform :ios
pod 'JSONKit'

保存退出。

运行:pod update 

这样是就把JSONKit 库下载并和本地项目关联起来了,这是Xcode提示你更新项目


点Revert。

这时你看项目pod部分,多了JSONKit库.好了,第三方库就这么神奇的加进来。

头文件路径

那试试看使用JONSKit.h,在ViewController.m里引用下。找不到头文件,怎么办?还没设置头文件的目录,在项目的Target的里设置一下:

如下图所示,输入${SRCROOT}  后面选上recursive。


在引用头文件:


完美。


正确编译运行一个包含CocoaPods类库的项目

如果一个项目中已经包含了CocoaPods的配置文件,但是编译却出现错误,那么我们仅需要一行命令就可以配置好所有的第三方类库了:

 

1. $ pod update

参考Demo的项目地址:https://github.com/UrbanApps/UAAppReviewManager

 

打开Demo的UAAppReviewManagerExample目录,可以发现少了一个xcworkspace文件,另外还有几个CocoaPods的配置文件在这里:

\

打开Podfile文件看看:

 

01. target 'UAAppReviewManagerExampleiOS' do
02. platform :ios, '5.1'
03. pod 'UAAppReviewManager', :path => '..'
04. end
05.  
06. target 'UAAppReviewManagerExampleMac' do
07. platform :osx, '10.7'
08. pod 'UAAppReviewManager', :path => '..'
09. end

 

platform表示类库支持的最高版本,该类库的target包括了iOS和Mac。而path指定了到上级目录去查找该类库的安装信息。

编译工程,将会出错,原因是我们没有将类库链接到工程中:

\

因此我们要用pod命令进行安装。cd到Example目录下执行pod install命令,将会报错:

 

1. $ pod install
2. Analyzing dependencies
3. Fetching podspec for `UAAppReviewManager` from `..`
4. [!] Unable to satisfy the following requirements:
5. - `UAAppReviewManager (from `..`)` required by `Podfile`

 

原因是要添加的类库已经有最新版本推出,而Podfile文件并没有更改其下载版本(Podfile文件过期),于是获取安装数据失败。

因此我们要用update命令获取最新版本的类库:

 

01. $ pod update
02. Analyzing dependencies
03. Fetching podspec for `UAAppReviewManager` from `..`
04. Downloading dependencies
05. Installing UAAppReviewManager (0.2.1)
06. Generating Pods project
07. Integrating client project
08.  
09. [!] From now on use `UAAppReviewManagerExample.xcworkspace`.

同样地我们成功生成了xcworkspace文件:

 

\

再编译运行就没问题了。

补充

当Cocoapods向项目中增加了一个第三方库的时候,不仅仅只是添加代码,由于每个第三方类库有不同的target,所以每次添加第三方库时,都会有几个文件被写入磁盘,包括Podfile.lock和Manifest.lock文件等。

其中Podfile.lock记录了需要被安装的pod的每个已安装的版本。如果你想知道已安装的pod是哪个版本,可以查看这个文件。

Manifest.lock是每次运行pod install时创建的Podfile.lock文件的副本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值