我们开发的时候,常常需要引入一些第三方库(比如:AlamofireSwiftyJSON 等等)。过去的做法是把这些库下载下来,并引入到工程中。如果有依赖其他库的话,还要手动将这些依赖库给添加进来。关键是如果这些第三方库后面有更新的话,我们还要先把项目中原来的库给删除。再重复前面的步骤。这样就很麻烦了。
  而使用 CocoaPods 以后,这些工作我们都不需要做。只需做好配置工作,安装更新这些第三方库,CocoaPods 都会自动帮我们做好。

一、CocoaPods介绍

(1)CocoaPodsiOS 开发中的第三方库管理的工具。目的是让我们能自动化的、集中的、直观的管理第三方开源库。  
(2)CocoaPods 能够自动解决库与库之间的依赖关系,下载库的源代码。并创建一个 Xcodeworkspace 来将这些第三方库和我们的工程连接起来,供我们开发使用。

二、安装CocoaPods

1,替换 Ruby 源

  CocoaPods 是基于 Ruby ecosystem 的,需要 Ruby 环境,使用 Ruby 的 gem 命令。所以我们的系统要有 Ruby 环境。然而 Mac 系统默认会安装好 Ruby 环境。可在终端 ruby -v 查看 Ruby 版本:   

1
2
3
4
// 查看 ruby 版本
$ ruby -v
// 输出信息
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]

查看 Ruby 源

1
$ gem sources -l

默认情况下,终端会显示下面:

1
2
*** CURRENT SOURCES ***
https://rubygems.org/

当然这个源在墙内是访问不到的, 所以要更换到 ruby-china 的镜像

1
2
3
4
5
6
7
8
9
10
11
12
// 1.移除掉原有的源
$ gem sources --remove https://rubygems.org/

// 2.使用 ruby-china 的源哦
$ gem sources -a https://gems.ruby-china.com/
https://gems.ruby-china.com/ added to sources

// 3.验证是否替换成功
$ gem sources -l
// 如果显示下面输出就说明正确:
*** CURRENT SOURCES ***
https://gems.ruby-china.com/

2,更新升级 Gem 版本

  Gem 是管理 Ruby 库和程序的标准包,如果它的版本过低也可能导致安装失败,解决方案自然是升级 Gem,执行下述命令即可:

1
2
// 更新升级 gem,国内需要切换源
$ sudo gem update --system

查看 gem 版本

1
2
$ gem -v
3.0.3

3,安装 CocoaPods

OS X 10.11 以前安装命令为:

1
2
3
$ sudo gem install cocoapods  // 安装cocoapods

$ sudo gem update cocoapods // 更新升级cocoapods

Mac 系统为 OS X EL Capitan 以后安装命令为:

1
2
3
4
5
6
7
8
// 安装最新版本
$ sudo gem install -n /usr/local/bin cocoapods

// 安装指定版本
$ sudo gem install -n /usr/local/bin cocoapods -v 1.0.0

// 安装最新的 release beta 版本
$ sudo gem install -n /usr/local/bin cocoapods --pre

如果你想卸载 CocoaPods 怎么办?看下面:

1
2
3
4
5
// OS X 10.11 以前卸载 CocoaPods
$ sudo gem uninstall cocoapods

// OS X EL Capitan 以后卸载 CocoaPods
$ sudo gem uninstall -n /usr/local/bin cocoapods

4,更新 Podspec 索引文件

  如果按照上面三个步骤没问题,用命令 pod –version 查看是否安装成功,如果成功会显示 pods 的版本。

1
2
$ pod --version
1.7.5

pod setup 作用:将所有第三方的 Podspec 索引文件更新到本地的 ~/.cocoapods/repos 目录下

pod 安装成功之后一个首先的操作就是执行命令(不是必须的):

1
$ pod setup

  所有的第三方开源库的 Podspec 文件都托管在https://github.com/CocoaPods/Specs
我们需要把这个 Podspec 文件保存到本地,这样才能让我们使用命令 pod search 开源库搜索一个开源库,怎样才能把github上的Podspec文件保存本地呢?那就是 pod setup

执行 pod setup 时,CocoaPods 会将第三方的 podspec 索引文件更新到本地的 ~/.cocoapods/repos 目录下

  • 如果没有执行过 pod setup,那用户根目录下~找不到.cocoapods/repos目录的,没有创建这个目录。

  • 如果执行 pod setup,并且命令没有执行成功,那么会创建~/.cocoapods/repos目录,只不过目录是空的。

  • 如果执行 pod setup,并且命令执行成功,说明把 github上的 Podsepc 文件更新到本地,那么会创建~/.cocoapods/repos 目录,并且 repos目录 里有一个 master目录 ,这个 master 目录保存的就是 github 上所有第三方开源库的 Podspec 索引文件。

  但是第一次执行 pod setup 时,这个 github 的 Podspec 索引文件比较大,有 300M 左右(以后会越来越大的),所以第一次更新时非常慢.要耐心等待……可以进去目录 ~/.cocoapods/repos 使用命令 du -sh * 来查看下载文件的大小了

三、CocoaPods的使用

下面我们创建一个工程项目(假设工程名是 SwiftDemo),演示如何使用 CocoaPods 自动下载、导入、配置第三方库。

1,创建Podfile

  首先进入到工程的根目录下,创建空白的Podfile 文件。

1
2
$ cd SwiftDemo/
$ pod init

2,编辑Podfile

Podfile文件编辑时,第三方库版本号的各种写法

1
2
3
4
5
6
7
8
9
pod 'AFNetworking' //不显式指定依赖库版本,表示每次都获取最新版本
pod 'AFNetworking', '2.0' //只使用2.0版本
pod 'AFNetworking', '>2.0' //使用高于2.0的版本
pod 'AFNetworking', '>=2.0' //使用大于或等于2.0的版本
pod 'AFNetworking', '<2.0' //使用小于2.0的版本
pod 'AFNetworking', '<=2.0' //使用小于或等于2.0的版本
pod 'AFNetworking', '~>0.1.2' //使用大于等于0.1.2但小于0.2的版本,相当于>=0.1.2并且<0.2.0
pod 'AFNetworking', '~>0.1' //使用大于等于0.1但小于1.0的版本
pod 'AFNetworking', '~>0' //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本

  我们在 Podfile 文件中写上需要引入的第三方库,这里以 AlamofireSwiftyJSON 这两个库为例。
(注意:Alamofire4.0版本起,SwiftyJSON3.0版本起,都可以支持 Swift3。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'

target 'SwiftDemo' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
pod 'Alamofire', '~> 4.0'
pod 'SwiftyJSON', '~> 3.0'
# Pods for SwiftDemo

target 'SwiftDemoTests' do
inherit! :search_paths
# Pods for testing
end

target 'SwiftDemoUITests' do
inherit! :search_paths
# Pods for testing
end

end

3,开始导入库

(1)执行下面命令,开始导入前面配置的第三方库。

1
$ pod install

(2)执行成功后。看到工程根目录下多了三个新文件:SwiftDemo.xcworkspacePodfile.lock 文件、Pods 目录。

(3)pod install提速
  每次执行pod installpod update的时候,cocoapods都会默认更新一次spec仓库。这是一个比较耗时的操作。在确认spec版本库不需要更新时,给这两个命令加一个参数跳过spec版本库更新,可以明显提高这两个命令的执行速度。

1
2
pod install --verbose --no-repo-update
pod update --verbose --no-repo-update

4,打开新生成的SwiftDemo.xcworkspace

(1)往后我们就需要使用这个新生成的 SwiftDemo.xcworkspace 文件来开发。因为原来的工程(SwiftDemo.xcodeproj)设置已经被更改了,如果我们直接打开原来的工程文件去编译就会报错。
(2)打开后可以看到里面除了我们项目工程,还有一个 Pods 工程。整个结构还是很清晰明了的。   

5,测试代码

  开发时,我们只需要在使用的时候 import 一下需要的库就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import UIKit
import Alamofire

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
Alamofire.request("https://www.baidu.com/img/bd_logo1.png")
.responseString { response in
print("Success: \(response.result.isSuccess)")
print("Response Data count: \(String(describing: response.data!.count))")
}
}
}

6,新增或移除第三方库

  以后如果需要在工程中导入新库,或者移除原有的库。还是先编辑 Podfile 文件,再执行 install 命令。

1
$ pod install

7,更新第三方库

  如果引用的库没有改变,只是想要将这些库更新到最新版本,则执行 update 命令。

1
$ pod update

四、导入Objective-C写的第三方库

  上面的样例我们是创建工 Swift 工程,并导入 Swift 语言写的第三方库。如果想要在 Swift 工程中引入 OC 写的第三方库,操作也是一样的。而且我们项目中不需要像过去一样创建桥接头文件,把Objective-C头文件引用进来。
这里以 OC 写的图片缓存库:SDWebImage 为例说明。

1,编辑Podfile文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'

target 'SwiftDemo' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
pod 'Alamofire', '~> 4.0'
pod 'SwiftyJSON', '~> 3.0'
pod 'SDWebImage'
# Pods for SwiftDemo

target 'SwiftDemoTests' do
inherit! :search_paths
# Pods for testing
end

target 'SwiftDemoUITests' do
inherit! :search_paths
# Pods for testing
end

end

2,执行安装命令

1
$ pod install

3,代码中直接将SDWebImage库import就能使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import UIKit
import Alamofire
import SDWebImage

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
Alamofire.request("https://www.baidu.com/img/bd_logo1.png")
.responseString { response in
print("Success: \(response.result.isSuccess)")
print("Response Data count: \(String(describing: response.data!.count))")
}

let imageView = UIImageView()
imageView.frame = CGRect(x:50, y:50, width:200, height:100)
self.view.addSubview(imageView)

let url = URL(string: "https://www.baidu.com/img/bd_logo1.png")
imageView.sd_setImage(with: url)

}
}

cocoaPods.png

最后更新: 2019年10月31日 10:47

× 请我吃糖~
打赏二维码