CocoaPods入门教程[译]
本教程2014.4.14号更新为支持CocoaPods 0.31
和iOS 7
。
__________________________________________________________
在本教程中,你将了解到如何使用CocoaPods这个热门的依赖管理工具。
但是等等,什么是依赖管理工具? 我们为什么需要使用它呢?
作为一个iOS开发人员,你肯定要使用很多第三方库。因为自己实现所有的事情非常困难。
在不使用依赖管理工具的情况下,你可能只是简单的把每一个第三方库以代码的形式加入到自己的工程。然而,这样做有很多弊端:
- 第三方库和我们的工程一起存储,浪费空间
- 没有一个统一的地方可以让我们看到所有第三方库
- 升级一个第三方库到最新版本非常困难,尤其是当某几个库必须同时被升级的时候
- 下载并在工程中包含第三方库会引诱你对这些库中的代码进行修改,这使得更新这些库非常困难
依赖管理工具可以帮助你克服这些弊端。它会获取库源码,解析库间依赖,甚至可以创建和维护构建环境,并把麻烦降到最低。
本指南中,你将了解到如何在日常开发中使用CocoaPods。我们将开发一个App,这个App基于数个开源第三方库,从网站trakt.tv获取流行电视电影的信息,并展示它们。
CocoaPods将使得开发这个app变得非常容易, 请继续阅读。
准备工作
在开始之前,你需要熟悉Xcode,了解如何使用命令行,了解AFNetworking库,并且了解JSON格式。如果你对任何一项都不熟悉,建议你先去阅读一下相关文档。
根据官方网站的介绍 CocoaPods是管理Objective-C工程的库依赖关系的最好方式,在本文的演示中,确实如此。
除了直接在GitHub下载工程代码,并拷贝进工程之外,我们完全可以让CocoaPods来为我们做这些事。
在本指南中,我们将构建一个app通过trakt.tv来展示最新的电视剧集。如果你没听过这个网站,trakt
帮你跟踪你最近正在观看的电视剧集。Trakt还有其它功能,但是在本指南中,我们只需要这一项功能。
我们将从trakt的JSON接口获取一些信息。为了简化下载、解析、展示结果,我们使用AFNetworking和一些其它的开源库。
在开始之前,我们需要安装CocoaPods
。CocoaPods
基于Ruby
运行,这是它的唯一依赖。幸运的是,所有最近的Max OS X
(OS X 10.7 Lion及以上)都预装了Ruby
。所以我们唯一要做的就是升级RubyGems
以确保是最新版本。
打开控制台,输入以下命令:
可能会被要求输入密码,控制台输出类似这样:
升级可能会耗时较长,请耐心等待完成。控制台可能会出现关于最新版本的一些文档,目前可以忽略。
接下来,安装CocoaPods
。在控制台输入命令:
在安装过程中可能会得到提示:
直接输入y
继续(出现这个警告的原因是rake gems
也同时被升级,可以安全的忽略它)
最后,在控制台输入命令完成CocoaPods
的设置:
这个过程将克隆CocoaPods
的Specs
仓库到本地的~/.cocoapods/, 会耗费一段时间,请耐心等待(如果耗时非常久,建议FQ搞定)。
好的,现在我们已经可以使用CocoaPods
了~
样例App “Show Tracker”介绍
省略翻译。
安装我们的第一个依赖
打开控制台, 进入包含工程文件的文件夹
输入命令如下:
该条命令为工程创建一个默认的Podfile
文件。我们在Podfile
文件定义所有工程依赖的第三方库。
使用如下命令使用Xcode
来打开Podfile
进行编辑:
注意:不要使用TextEdit
来编辑Podfile
文件,因为TextEdit经常用更美观的引号来替换标准引号。这会引起CocoaPods
报错,所以最好使用Xcode
或者其他编辑器。
默认Podfile
看上去大概这样:
把 # platform :ios, "6.0"
替换为platform , "7.0"
这条配置告诉CocoaPods
我们的工程最低支持iOS 7.0
很多第三方库,例如AFNetworking
,有最低iOS版本限制。如果你忽略这一行配置,CocoaPods
就假定一个默认的最低iOS版本(iOS 4.3)。
如果你只编写过Objective-C程序,这些语法会显得有些陌生,这是因为Podfile
是用Ruby
来编写的。使用CocoaPods
不需要掌握Ruby
,但是需要知道,即便是最小的文字错误,往往也会使CocoaPods
抛出错误。
最后,让我们来用CocoaPods
来添加第一个依赖。把如下语句拷贝到Podfile
文件中,target "ShowTracker" do:
语句的后面:
这告诉CocoaPods
我们想要引入版本号为2.2.1(当前最新版)的AFnetworking
作为工程的一个依赖。
官方文档可以找到更多关于Podfile语法和格式的信息。如果你想要实现更复杂的内容,一定要去了解一下。
保存并关闭Podfile文件。
现在我们需要告诉CocoaPods去安装我们工程的依赖库。进入控制台,确保我们仍然在工程文件和Podfile所在的文件夹目录,执行以下命令:
输出应该类似这样:
有可能会输出下面内容:
如果我们使用ls
命令(或者通过Filder查看工程文件夹),会发现CocoaPods创建了一个文件夹来存放所有的依赖,并且新建了一个workspace文件ShowTracker.xcworkspace
。
** 非常重要**
从现在起,像命令行警告所提到的,我们必须始终打开workspace,而不是工程。
注册Trakt
略过不翻译
测试AFNetworking
略过不翻译
添加更多依赖(Pods)
现在我们了解了如何使用CocoaPods,下面只有一件事需要去做了…
添加更多依赖库!!!
事实上,我们应该努力去引入尽量少的依赖库(Pods)。尽管CocoaPods使得升级第三方依赖库变得非常简单,我们仍然经常需要在升级过依赖库后更新自己的代码来适配这些依赖库。
在长期的开发中,保证所有的依赖库可控是很重要的。
我们需要为工程添加2个额外的依赖。除了直接编辑Podfile文件,我们现在也可以直接在workspace中的Pods工程中找到它。
打开Podfile文件,在AFNEtworking配置行下面添加:
保存文件,安装新的依赖库。(命令行运行pod install
)。
你是否注意到pod Nimbus/AttributedLabel的任何不同吗? 它的名字中间的斜线是什么意思呢?
大的依赖库(Pods)经常把它们的类拆分为多个依赖核心模块的子模块。在这里,斜线意味着AttributedLabel是Nimbus得一个子模块。
你可能对这些库不太熟悉,这里是它们的介绍:
- SSToolkit 是一个包含了众多解决方案的工具包,用来解决iOS开发者需要面对的众多普遍问题。在本文中的App中,我们使用它来判断设备屏幕是否是Retina屏幕。
- Nimbus,NimbusKit的简称,另一个工具包,包含了大量有用的类和category。本文中使用了其中的AttributedLabel组件。
为了确保一切都正常,重新编译工程。然而,我们收到了几条警告信息。
’等等,没有改变任何代码啊‘,你可能会想。
当我们通过CocoaPods添加一个依赖库的时候,这个依赖库的代码被包含在这个workspace中。当编译工程的时候,库的代码被一起编译。
所以,当我们使用的依赖库包含一些警告的时候(或者,根本编译不过),往往说明这个库已经没有人维护了。
在这种时候,我们需要去http://cocoapods.org/通过搜索关键字寻找替代库。在那里也可以找到依赖库的细节信息,包括主页、文档及其它内容。
在本文的情况中,出现的警告是由于一些最近在iOS7中废弃的函数(比如sizeWithFont:
)所引起的,我们可以直接忽略。
可以在Podfile
文件顶部添加以下代码来关闭来自依赖库的所有警告:
再次运行pod install
,编译工程,这时候看不到任何警告了。
完成App Show Tracker
略过不翻译
如何查找更多信息
本文样例代码下载
现在你了解了CocoaPods的基本使用,可以通过阅读官方文档来获得更多地细节内容地址,比如如何创建自己的pod spec并提交到官方的仓库。
想要查看CocoaPods是否支持特定的库,可以在http://cocoapods.org/搜索。
下面是我认为比较有用的一些库:
- AFNetworking:网络连接和响应处理
- CorePlot:图像和曲线开发框架
- MagicRecord:超级棒的CoreData库
- MBProgressHUD 可以添加到views上的活动指示器
- Nimbus:代码增长和文档一样快的iOS开发框架
你也可以去了解一下trakt的API,它有着很好的文档,可以用来做很多事情。
关于本文提到的App,也有很多改进可以去做,比如:
- 如果给定的日期时段没有电视剧可看怎么办?
- 如果有很多电视剧需要显示怎么办?
- 我们还可以显示更多的信息,比如剧情概要、播放频道等。