· 编程思想 · 6 min read
CocoaPods使用指南-管理依赖库篇

iOS开发的今天,我们讲究代码的共享和开发效率,比如使用著名JSONKit,AFNetworking等等。手动的去管理这些第三方依赖显然是一件很笨且低效的事情,于是有了CocoaPods。 CocoaPods可以帮助大家分享自己写的库,开发者也可以通过CocoaPods方便的集成他人分享的库。 可以减少重复劳动,提高代码的重用性以及模块化的思想来提高整个项目的可维护性。
CocoaPods是最主流最常用的iOS开发库依赖管理工具,绝大部分第三方库都会提供CocoaPods方式安装。
这篇文章主要包含如何安装CocoaPods、使用CocoaPods、Podfile文件详解,主要是为了帮助新手了解如何使用CocoaPods来有效正确的管理依赖。
安装CocoaPods
CocoaPods是由ruby编写的,MAC电脑默认安装了ruby和gem。
使用gem安装CocoaPods
sudo gem install cocoapods
更新CocoaPods
更新CocoaPods非常简单,相当于重新安装一遍
sudo gem install cocoapods
使用淘宝的gem源来安装CocoaPods
如果你安装CocoaPods过程非常缓慢可以尝试使用淘宝的gem源来安装
#去除默认gem源
gem sources --remove https://rubygems.org/
#添加淘宝gem源
gem sources -a http://ruby.taobao.org/
#查看源修改是否成功
gem sources -l
sudo gem install cocoapods
入门使用CocoaPods
在你的Xcode工程文件xcodeproj的同级目录下运行
pod init
CocoaPods会自动扫描工程创建一个Podfile文件
在对应的traget下添加
target 'MyApp' do
pod 'AFNetworking', '~> 3.0'
end
在Podfile的目录下,运行命令
pod install
这样就会生成一个xcode workspace,打开这个workspace会发现为我们项目添加了AFNetworking
在已经存在的workspace上使用CocoaPods
CocoaPods默认会自己创建一个workspace来管理项目工程和Pod依赖,如果想要在已经存在的workspace 基础上使用CocoaPods,可以Podfile文件里指定要集成的.xcworkspace。例如:
workspace 'MyWorkspace'
pod install vs pod update
很多用了CocoaPods一段时间的人都没搞明白install和update的使用场景。以为只有第一次使用时用pod install,之后都适用 pod update 其实并不是这样的
- pod install:用来安装新的依赖或者删除依赖。当你编辑好
Podfile第一次运行pod install,这算一个典型的安装场景。当你后续开发 中又往Podfile文件里添加了新依赖,运行pod install会把新依赖加入进来。当你在Podfile文件里删除了依赖,运行pod install会把依赖从workspace中去删除掉。 - pod update:只有当你需要更新依赖的版本时才运行
pod update
更新依赖的版本
首先我们要知道怎样去检查项目中已经过期的的依赖版本,使用如下命令查看过期版本
pod outdated
然后使用如下命令升级某个依赖
pod update PODNAME
Podfile.lock
CocoaPods会生成一个Podfile.lock文件用来锁定使用的依赖的版本,让整个团队使用同版本的依赖。 所以开发者不光要把Podfile.lock提交到代码仓库,也要提交Podfile.lock。
Podfile配置详解
Podfile是用来描述工程需要引入哪些Pod库
Pod
指定使用最新版本的Pod库
pod 'SSZipArchive'
指定使用某个固定版本的Pod库
pod 'Objection', '0.9'
还可以使用如下规则指定版本
- = 0.1 版本0.1
- > 0.1 任意高于0.1的版本
- >= 0.1 任意高于0.1的版本和版本0.1
- < 0.1 任意低于0.1的版本
- <= 0.1 任意低于0.1的版本和版本0.1
- ~> 0.1.2 等于 >=0.1.2 且 < 0.2
- ~> 0.1 等于 >=0.1 且 < 1.0
Build configurations
默认情况下Pod库是安装到所有Build configurations,如果只需要的话可以只安装到指定Build configurations
pod 'PonyDebugger', :configurations => ['Debug', 'Beta']
Subspecs
当使用Pod库名安装时,默认是安装所有subspecs的,你也可以指定安装某个subspec
pod 'QueryKit/Attribute'
使用本地Pod
如果你正在开发一个Pod,而在使用的Project去指定它
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
直接使用远端代码仓库的Pod
默认使用master分支
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
指定分支
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
指定tag
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
指定某个commit
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'
直接使用某个podspec
pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'
为不同Xcode工程中的不同target指定不同的依赖
target 'ShowsApp' do
pod 'ShowsKit'
# Has its own copy of ShowsKit + ShowTVAuth
target 'ShowsTV' do
pod 'ShowTVAuth'
end
# Has its own copy of Specta + Expecta
# and has access to ShowsKit via the app
# that the test target is bundled into
target 'ShowsTests' do
inherit! :search_paths
pod 'Specta'
pod 'Expecta'
end
end
- target ShowsApp 引入了ShowsKit
- target ShowsTV 引入了ShowsKit和ShowTVAuth
- target ShowsTV 引入了ShowsKit和Specta,Expecta



