CocoaPods:Objective-C的依赖管理工具
引子
在iOS开发中,工程中会用到很多第三方的开源库,像ASIHttpRequest、AFNetworking、JSONKit等等。要添加一个第三方库的:
- 先查找并下载到本地,然后添加到工程
- 添加第三方开源库所依赖的framework
- 一些第三方开源库需要修改OtherLinerFlag的参数
一旦开始一个新的项目,这些工作又要重新做一遍。另外还需要自己管理第三方库更新的问题。
有没有一个能够帮助我们自动完成这一系列工作的方法呢?没错,就是今天的主角——CocoaPods。
CocoaPods介绍
CocoaPods为你的Xcode工程管理库的依赖。你的工程的第三方库依赖由一个单独的叫做Podfile的文本文件管理。CocoaPods可以获取第三方库源代码、解决库的依赖,然后将你的工程与它放在一个新创建的workspace中。最终的目标是通过创建一个更集中的生态系统,以提高第三方的开源库可发现性和参与性。
GitHub地址:https://github.com/cocoapods/cocoapods
安装CocoaPods
CocoaPods使用Ruby创建,需要预先安装ruby。Mac下自默认安装好了ruby,可以通过命令查看:
ruby --version
使用ruby的gem命令安装:
sudo gem install cocoapods
pod setup
修改gem源
默认的gem源为https://rubygems.org/
,国内的网络有可能被墙。如果无法访问这个网址,可以使用淘宝的RubyGems 镜像。修改方法:
$ gem sources --remove https://rubygems.org/
$ gem sources -a http://ruby.taobao.org/
查看gem源:
gem source -l
修改成功后,可以按照上面的步骤安装。
更新CocoaPods
更新已安装的CocoaPods,只需要输入:
sudo gem update cocoapods
使用CocoaPods查找第三方库
CocoaPods可以很方便地查找第三方库:
pod search ReactiveCocoa
将CocoaPods添加到Xcode工程
创建一个Podfile文件,添加你所需要的第三方库文件:
platform :ios, '6.0'
pod 'AFNetworking', '~> 2.0'
pod 'ObjectiveSugar', '~> 0.5'
保存并放在工程的根目录,然后:
pod install
这样就会生成一个MyApp.xcworkspace,以后经通过使用这个打开工程,而不是原来的MyApp.xcodeproj.
如果需要更新工程使用的第三方库,只需要编辑Podfile文件,然后再次执行pod install 即可。
集成到一个已存在的workspace中
如果想将CocoaPods集成到一个已经存在的workspace中,只需要在Podfile中增加一句:
workspace 'MyWorkspace'
这一系列命令后到底做了什么
使用pod install命令,实际做了:
- 创建或者更新workspace
- 将你的工程添加到这个workspace中
- 如果需要将CocoaPods静态库工程添加到workspace中
- 添加libPods.a
- 将CocoaPods的Xocde configurations file添加到你的工程
- 将你的工程的target configurations改变为急于CocoaPods的
- 添加一个编译参数来拷贝pods中的资源文件到你的app bundle。i.e. a ‘Script build phase’ after all other build phases with the following: Shell: /bin/sh Script: ${SRCROOT}/Pods/PodsResources.sh
定义私有库
在开发的过程中,可以定义将通用的部分定义成私有的库,便于快速开发。
Podspec
.podspec文件是一个库的描述文件。.podspec文件可以标识该第三方库所需要的源码文件、依赖库、编译选项,以及其他第三方库需要的配置。
在安装pods的时候,会从https://github.com/CocoaPods/CocoaPods下载,里面包含了所有第三方库的.podspec文件。可以通过查看当前用户根目录下的.cocoapods/repos/master/ 路径。
以AFNetworking为例:
Pod::Spec.new do |s|
s.name = 'AFNetworking'
s.version = '2.0.2'
s.license = 'MIT'
s.summary = 'A delightful iOS and OS X networking framework.'
s.homepage = 'https://github.com/AFNetworking/AFNetworking'
s.authors = { 'Mattt Thompson' => 'm@mattt.me' }
s.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => "2.0.2", :submodules => true }
s.requires_arc = true
...
...
end
创建pods私有库描述文件
创建命令:
$ pod spec create REPO_NAME
会生成一个.podsepc文件。根据注释可以方便理解各个配置项的意义。
创建本地podsepc
在.cocoapods/repos/master/ 路径下,创建文件,名称为新创建的私有库名称,在目录下创建不同版本路径,然后将对应的.podsepc文件拷贝到对应目录下。
然后使用pods搜索:
$ pod search REPO_NAME
看看是否能够搜索到新创建的库。
删除pods私有Repo
输入命令:
pod repo remove [name]
总结
使用CocoaPods管理第三方库,能够帮助完成很多之前繁琐的工作,提高工作效率。第三方库的更新更是省心了不少,不再需要再一个一个查看,哪个第三方库更新了没有。
另外有一款APP,Podlife,让我们了解Pods上第三方库更新的情况,很不错。