我们开发的时候,常常需要引入一些第三方库(比如:Alamofire
、SwiftyJSON
等等)。过去的做法是把这些库下载下来,并引入到工程中。如果有依赖其他库的话,还要手动将这些依赖库给添加进来。关键是如果这些第三方库后面有更新的话,我们还要先把项目中原来的库给删除。再重复前面的步骤。这样就很麻烦了。
而使用 CocoaPods
以后,这些工作我们都不需要做。只需做好配置工作,安装更新这些第三方库,CocoaPods
都会自动帮我们做好。
一、CocoaPods介绍
(1)CocoaPods
是 iOS
开发中的第三方库管理的工具。目的是让我们能自动化的、集中的、直观的管理第三方开源库。
(2)CocoaPods
能够自动解决库与库之间的依赖关系,下载库的源代码。并创建一个 Xcode
的 workspace
来将这些第三方库和我们的工程连接起来,供我们开发使用。
二、安装CocoaPods
1,替换 Ruby 源
CocoaPods 是基于 Ruby ecosystem 的,需要 Ruby 环境,使用 Ruby 的 gem 命令。所以我们的系统要有 Ruby 环境。然而 Mac 系统默认会安装好 Ruby 环境。可在终端 ruby -v 查看 Ruby 版本:
1 | // 查看 ruby 版本 |
查看 Ruby 源
1 | $ gem sources -l |
默认情况下,终端会显示下面:
1 | *** CURRENT SOURCES *** |
当然这个源在墙内是访问不到的, 所以要更换到 ruby-china 的镜像
1 | // 1.移除掉原有的源 |
2,更新升级 Gem 版本
Gem 是管理 Ruby 库和程序的标准包,如果它的版本过低也可能导致安装失败,解决方案自然是升级 Gem,执行下述命令即可:
1 | // 更新升级 gem,国内需要切换源 |
查看 gem 版本
1 | $ gem -v |
3,安装 CocoaPods
OS X 10.11 以前安装命令为:
1 | $ sudo gem install cocoapods // 安装cocoapods |
Mac 系统为 OS X EL Capitan 以后安装命令为:
1 | // 安装最新版本 |
如果你想卸载 CocoaPods 怎么办?看下面:
1 | // OS X 10.11 以前卸载 CocoaPods |
4,更新 Podspec 索引文件
如果按照上面三个步骤没问题,用命令 pod –version 查看是否安装成功,如果成功会显示 pods 的版本。
1 | $ pod --version |
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 | $ cd SwiftDemo/ |
2,编辑Podfile
Podfile文件编辑时,第三方库版本号的各种写法
1 | pod 'AFNetworking' //不显式指定依赖库版本,表示每次都获取最新版本 |
我们在 Podfile
文件中写上需要引入的第三方库,这里以 Alamofire
、SwiftyJSON
这两个库为例。
(注意:Alamofire
自4.0
版本起,SwiftyJSON
自3.0
版本起,都可以支持 Swift3
。)
1 | # Uncomment the next line to define a global platform for your project |
3,开始导入库
(1)执行下面命令,开始导入前面配置的第三方库。
1 | $ pod install |
(2)执行成功后。看到工程根目录下多了三个新文件:SwiftDemo.xcworkspace
、Podfile.lock
文件、Pods
目录。
(3)pod install提速
每次执行pod install
和pod update
的时候,cocoapods
都会默认更新一次spec仓库
。这是一个比较耗时的操作。在确认spec版本库
不需要更新时,给这两个命令加一个参数跳过spec版本库
更新,可以明显提高这两个命令的执行速度。
1 | pod install --verbose --no-repo-update |
4,打开新生成的SwiftDemo.xcworkspace
(1)往后我们就需要使用这个新生成的 SwiftDemo.xcworkspace
文件来开发。因为原来的工程(SwiftDemo.xcodeproj
)设置已经被更改了,如果我们直接打开原来的工程文件去编译就会报错。
(2)打开后可以看到里面除了我们项目工程,还有一个 Pods
工程。整个结构还是很清晰明了的。
5,测试代码
开发时,我们只需要在使用的时候 import
一下需要的库就可以了。
1 | import UIKit |
6,新增或移除第三方库
以后如果需要在工程中导入新库,或者移除原有的库。还是先编辑 Podfile
文件,再执行 install
命令。
1 | $ pod install |
7,更新第三方库
如果引用的库没有改变,只是想要将这些库更新到最新版本,则执行 update
命令。
1 | $ pod update |
四、导入Objective-C写的第三方库
上面的样例我们是创建工 Swift
工程,并导入 Swift
语言写的第三方库。如果想要在 Swift
工程中引入 OC
写的第三方库,操作也是一样的。而且我们项目中不需要像过去一样创建桥接头文件,把Objective-C
头文件引用进来。
这里以 OC
写的图片缓存库:SDWebImage
为例说明。
1,编辑Podfile文件
1 | # Uncomment the next line to define a global platform for your project |
2,执行安装命令
1 | $ pod install |
3,代码中直接将SDWebImage库import就能使用
1 | import UIKit |