在Swift项目中引入第三方库需要用到 CocoaPods(以下简称CP),使用CP后,开发时不再使用原生的工程文件(APP.xcodeproj),而是使用CP创建的
APP.xcworkspace
工程文件。
CocoaPods官网已推出了其 APP,可以可视化、规范化的使用 CocoaPods 了。
快速使用
依次执行下面的命令,即可完成安装,期间可能出现各种怪异的错误,具体请参考下面的分步操作。
# 查看 Ruby 版本
$ ruby -v
# 配置淘宝软件源,提升安装速度
$ gem sources --remove https://rubygems.org/ # 移除现有源
$ gem sources --add https://ruby.taobao.org/ # 添加淘宝源
$ gem sources -l # 查看配置是否成功
# 安装 cocoapods
$ sudo gem install cocoapods
# 查找插件
$ pod search 插件关键字
CocoaPods的安装
一般OS X系统应该是自带Ruby环境的,打开终端,输入以下代码即可查看到其版本信息。注意:终端操作需要使用到root权限,即使用sudo
执行。
$ ruby -v
回车后,终端显示:
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
确认系统已存在Ruby环境后,我们就可以使用gem
命令了。CP应该是和前端开发中的node.js
相似的东西,都是基于命令来执行扩展(包或库)管理(NODE使用npm
命令,CP使用pod
命令)。下面的操作顺序应为:
- 修改服务器镜像为淘宝镜像;
- 测试镜像地址
- 安装CP
- 测试CP安装结果
CP安装需要使用以下命令,网上的部分文章都没有提到使用sudo
,所以我本地使用的时候总是报错:
$ sudo gem install cocoapods
另外,据说是CP的官网被墙,具体我未考证,而是直接设置为淘宝镜像了。
全新安装时,要先删除现有的源,然后再设置为淘宝镜像,如果直接设置为淘宝镜像,则会出现 Error fetching http://ruby.taobao.org/的问题:
移除现有源:
$ gem sources --remove https://rubygems.org/
设置为淘宝镜像:
$ gem sources --add https://ruby.taobao.org/
然后检查是否成功:
$ gem sources -l
终端显示:
*** CURRENT SOURCES ***
https://ruby.taobao.org/
确认镜像地址正确后,执行上面的安装命令,终端可能会闪烁一段时间:
$ sudo gem install cocoapods
Fetching: i18n-0.7.0.gem (100%)
Successfully installed i18n-0.7.0
Fetching: thread_safe-0.3.5.gem (100%)
Successfully installed thread_safe-0.3.5
Fetching: tzinfo-1.2.2.gem (100%)
Successfully installed tzinfo-1.2.2
省略·············
21 gems installed
此时CP已安装完成(但貌似未本地初始化)。机器配置不同,软件迭代较快,可能会出现一些问题,导致无法安装,参考(逐步更新中):
· 安装cocoapods失败,提示 requires Ruby version >=2.2.2
安装顺利完成后,接下来测试是否可运行,我用它搜索了下AFNetworking
库:
$ pod search AFNetworking
终端显示:
Setting up CocoaPods master repo
CocoaPods 1.0.0.beta.8 is available.
To update use: `gem install cocoapods --pre`
[!] This is a test version we'd love you to try.
For more information see http://blog.cocoapods.org
and the CHANGELOG for this version http://git.io/BaH8pQ.
Setup completed
-> AFNetworking (3.1.0)
A delightful iOS and OS X networking framework.
pod 'AFNetworking', '~> 3.1.0'
- Homepage: https://github.com/AFNetworking/AFNetworking
- Source: https://github.com/AFNetworking/AFNetworking.git
- Versions: 3.1.0, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 3.0.0-beta.3,
3.0.0-beta.2, 3.0.0-beta.1, 2.6.3, 2.6.2, 2.6.1, 2.6.0, 2.5.4, 2.5.3, 2.5.2,
2.5.1, 2.5.0, 2.4.1, 2.4.0, 2.3.1, 2.3.0, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0,
2.1.0, 2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3, 2.0.0-RC2, 2.0.0-RC1, 1.3.4,
1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.1, 1.0, 1.0RC3, 1.0RC2,
1.0RC1, 0.10.1, 0.10.0, 0.9.2, 0.9.1, 0.9.0, 0.7.0, 0.5.1 [master repo]
- Subspecs:
- AFNetworking/Serialization (3.1.0)
- AFNetworking/Security (3.1.0)
- AFNetworking/Reachability (3.1.0)
- AFNetworking/NSURLSession (3.1.0)
- AFNetworking/UIKit (3.1.0)
···· 省略N个结果·····
说明CP已经可以正常工作了。
CocoaPods的使用
简单说下CP的使用流程:
- 在项目根目录下新建
Podfile
文件,并编辑内容; - 在终端中,进入到当前项目根目录;
- 执行
$ pod install
命令; - 关闭Xcode,并进入项目根目录;
- 打开根目录下的
APP.xcworkspace
工程; - 在文件中引用
import 库名
;
或者: - 在项目根目录下新建
Podfile
文件,并编辑内容; - 在Xcode选择执行:菜单 - Product - CocoaPods - Install Pods;
- Xcode执行完成后会弹出窗口,询问是否切换到xcworkspace工程文件;
逻辑比较简单,来看下Podfile
的内容:
platform :ios, '8.0'
use_frameworks!
target "你的应用名称" do
pod 'AFNetworking', '~> 2.6'
pod 'SwiftyJSON', '~> 2.3'
pod 'MBProgressHUD', '~> 0.9.2'
end
注意,这里务必写上target "你的应用名称" do ··· end这一段,否则会出现【[!] The dependency Alamofire (~> 1.2.2) is not used in any concrete target 】的错误。
当CP开始正常工作,我觉得常做的工作就变成找第三方库了,添加一个第三方库可使用:
pod '库名', '版本号'
此处有个版本号,我们怎么知道该库的最新版本呢?可以使用搜索命令,如搜索一个图表库,终端显示下面的内容【打开终端 - 搜索第三方库 - 复制pod命令 - 粘贴到Podfile中 - Xcode执行InstallPod菜单】:
$ pod search chart
CP即可为我搜索出所有关键字相关的第三方库,OK,我看下其中一个:
-> PNChart (0.8.8)
A simple and beautiful chart lib with animation used in Piner for iOS
pod 'PNChart', '~> 0.8.8'
- Homepage: https://github.com/kevinzhow/PNChart
- Source: https://github.com/kevinzhow/PNChart.git
- Versions: 0.8.8, 0.8.7, 0.8.6, 0.8.5, 0.8.3, 0.8.2, 0.8, 0.7.5, 0.7.1,
0.6.0, 0.5.6, 0.5.5, 0.5, 0.3.3, 0.3.2, 0.3.1, 0.2.2, 0.1.8, 0.1.5 [master
repo]
可以看出,这段信息的格式:
-> 库名(最新版本号)
介绍
调用参数【OK就是他了】
- 主页
- 源代码
- 所有版本号
我们直接复制【调用参数】到Podfile
中,然后再在项目根目录下执行$ pod install
命令即可添加一个新的库。
- 使用CP安装好库后,在
Linked Frameworks and Libraries
中只需要引入Pods.framework
即可在项目中import相关的库文件,通常打开的xcworkspace工程中是已经自动引入的;- 项目根目录下的
Podfile.lock
不可删除,否则Xcode会意外退出;- 每当更新了Podfile文件,都需要先执行【command + B】一次,否则会一直提示未找到该库;
疑惑:【CocoaPods安装成功,可显示版本,可菜单项找不到】
需要在终端安装 Alcatraz,Alcatraz 是Xcode的一款插件管理工具,可以用来管理Xcode的插件、模版以及颜色配置的工具。在终端执行下面的命令安装:
curl -fsSL [https://raw.github.com/alcatraz/Alcatraz/master/Scripts/install.sh](https://raw.github.com/alcatraz/Alcatraz/master/Scripts/install.sh) | sh
报错:【Setting up CocoaPods master repo】
这是 CocoaPods 正在初始化自身,它会在用户根目录下创建一个名为【.cocoapods】的隐藏文件夹,其过程根据实际情况有长有短,耐心等待即可。
报错:【[!] The dependency Alamofire (~> 1.2.2) is not used in any concrete target 】
这个提示通常会在更新CP后出现,解决办法是将Podfile改为:
platform :ios, '8.0'
use_frameworks!
target "你的应用名称" do
pod 'MBProgressHUD', '~> 0.9.2'
pod 'Alamofire', '~> 3.3.1'
end
官方提供的完整的代码:
# open source
source 'https://github.com/CocoaPods/Specs.git'
# my work
source 'https://github.com/Artsy/Specs.git'
target 'App' do
pod 'Artsy+UIColors'
pod 'Artsy+UIButtons'
pod 'FLKAutoLayout'
pod 'ISO8601DateFormatter', '0.7'
pod 'AFNetworking', '~> 2.0'
target 'AppTests' do
inherit! :search_paths
pod 'FBSnapshotTestCase'
pod 'Quick'
pod 'Nimble'
end
end
即使用target "AppName" do ··· end
包裹库列表,否则会出现执行Install的时候报错,告知未指定关联的项目,从而无法生成工程文件。