CocoaPods:你想要的都在这
CocoaPods 入门
什么是 CocoaPods
CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所支持的),并且可以轻松管理其版本。
Cocoapods意义体现在两个方面。第一,在引入第三方库时它可以自动为我们完成各种各样的配置,包括配置编译阶段、连接器选项、甚至是ARC环境下的-fno-objc-arc
配置等。第二,使用CocoaPods可以很方便地查找新的第三方库, 更新类库也是支持一键更新,免除更新时的繁琐操作。
英语能力较好者传送门:CocoaPods官方文档
CocoaPods 的核心组件
CocoaPods是用Ruby写的,并划分成了若干个Gem包。
CocoaPods在解析执行过程中最重要的几个包。
其路径分别是:CocoaPods/CocoaPods、 CocoaPods/Core和 CocoaPods/Xcodeproj。
CocoaPods/CocoaPod
这是面向用户的组件,每当执行一个pod命令时,这个组件将被激活。它包括了所有实用CocoaPods的功能,并且还能调用其他gem包来执行任务。
CocoaPods/Core
Core gem提供了与CocoaPods相关的文件(主要是podfile和podspecs)的处理。
CocoaPods/Xcodeproj
这个包负责处理工程文件,它能创建以及修改.xcodeproj文件和.xcworkspace文件。它也可以作为一个独立的包使用,当你要编写修改项目文件的脚本时,可以考虑使用CocoaPods/Xcodeproj。
Podfile
该文件用于配置项目所需要的第三方库,它可以被高度定制。
Podfile.lock
当你执行pod install
之后,除了 Podfile 外,CocoaPods 还会生成一个名为Podfile.lock
的文件,Podfile.lock
应该加入到版本控制里面,不应该把这个文件加入到.gitignore
中。因为Podfile.lock
会锁定当前各依赖库的版本,之后如果多次执行pod install
不会更改版本,要pod update
才会改Podfile.lock
了。这样多人协作的时候,可以防止第三方库升级时造成大家各自的第三方库版本不一致
Podspec
该文件描述了一个库将怎样被添加进工程中。.podspec文件可以标识该第三方库所需要的源码文件、依赖库、编译选项,以及其他第三方库需要的配置。
CocoaPods 安装(以下步骤都是终端操作)
1、升级Ruby环境
输入:gem update --system
如果出现:
ERROR: While executing gem ... (Gem::FilePermissionError)
You don‘t have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
则输入:sudo gem update —system
2、替换镜像路径
原镜像路径是https://rubygems.org/,由于被墙了下载安装会炒鸡慢,所以替换成淘宝的Ruby镜像会快很多。
步骤(1):gem sources --remove https://rubygems.org/
步骤(2):gem sources -a https://ruby.taobao.org/
今年的淘宝Ruby镜像路径用了Https,如果使用原来的http路径则要替换,不然会出现如下错误:
ERROR: Could not find a valid gem 'cocoapods' (>= 0), here is why:
Unable to download data from http://ruby.taobao.org/
- bad response Not Found 404 (http://ruby.taobao.org/latest_specs.4.8.gz)
可以输入gem sources -l
查看是否替换成功
3、安装
步骤(1):sudo gem install cocoapods
步骤(2):pod setup
CocoaPods 使用
步骤(1):cd 项目路径
,只到项目的一级路径即可,如cd /Document/Work/Demo
步骤(2):pod init
步骤(3):编辑Podfile文件,可用文本编辑器打开也可用vim,添加需要的第三方类库。
格式一般为`pod 'AFNetworking', '~> 2.6.0'`,放在`target 'Demo' do`与对应的end之间。
如果只是用`pod 'AFNetworking'`则会使用最新的版本。
参考格式:
# platform :ios, ‘7.0’
target 'Look' do
pod 'MJRefresh'
pod 'SDWebImage', '~> 3.7.3'
pod 'AFNetworking', '~> 2.6.0'
pod 'SVProgressHUD', '~> 1.1.3'
# Pods for Look
target 'LookTests' do
inherit! :search_paths
# Pods for testing
end
target 'LookUITests' do
inherit! :search_paths
# Pods for testing
end
end
步骤(4):pod install
,执行这一步会比较久,因为需要下载相应的类库
安装完成后应该打开Demo.xcworkspace而不是Demo.xcodeproj了。
其他技巧或问题解答
Tip1、 pod search AFNetworking
:如果CocoaPods支持,将会输出搜索到的所有类库版本和信息,以及在Podfile中配置的写法,终端返回信息如下:
-> AFNetworking (2.3.1)
A delightful iOS and OS X networking framework.
pod ‘AFNetworking‘, ‘~> 2.3.1’(这个语句是需要在编辑Podfile的时候输入的命令,即是如何安装下载相关类库的指令)
- Homepage: https://github.com/AFNetworking/AFNetworking
- Source: https://github.com/AFNetworking/AFNetworking.git
- Versions: 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,
Tip2、 所有的项目的 Podspec 文件都托管在https://github.com/CocoaPods/Specs
。第一次执行pod setup
时,CocoaPods 会将这些 podspec 索引文件更新到本地的~/.cocoapods/
目录下,这个索引文件比较大,有 80M 左右。所以第一次更新时非常慢.
一个叫 akinliu 的朋友在 gitcafe 和 oschina 上建立了 CocoaPods 索引库的镜像,因为 gitcafe 和 oschina 都是国内的服务器,所以在执行索引更新操作时,会快很多。如下操作可以将 CocoaPods 设置成使用 gitcafe 镜像:
pod repo remove master
pod repo add master https://gitcafe.com/akuandev/Specs.git
pod repo update
将以上代码中的https://gitcafe.com/akuandev/Specs.git
替换成http://git.oschina.net/akuandev/Specs.git
即可使用 oschina 上的镜像。
Q2、当在pod update
或pod install
时遇到:
Unable to find a specification for `xxxxx (~> 1.x.x)` depended upon by Podfile.
OR :pod setup
时遇到:
[!] /usr/bin/git fetch --unshallow
fatal: error in object: unshallow f4cf991d7db93e387c25a637876d473fe7093a6d
A2:只需要把当前Pod的目录清理一下就O了
步骤(1):pod repo remove master
步骤(2):pod setup
Q3、当把CocoaPods生成的workspace移动到上层目录时,需要改下Pods.xcconfig和工程里的一些设置, 故当遇到:
Could not automatically select an Xcode project. Specify one in your Podfile like so:
xcodeproj 'path/to/Project.xcodeproj'
A3:在Podfile文件里指定下工程目录就O了,比如:
......
xcodeproj 'Portfolio/Portfolio.xcodeproj'
......
Q4、当在pod update
或pod install
时卡在Analyzing dependencies
A4:当执行以上两个命令的时候会升级CocoaPods的spec仓库,加一个--verbose --no-repo-update
可以省略这一步,然后速度就会提升不少。命令如下:
pod install --verbose --no-repo-update
pod update --verbose --no-repo-update
CocoaPods 进阶
对自己的开源项目引入CocoaPods支持
讲了那么多怎么用别人的,那这一节可以来看看怎么自己做给别人用了,如果你有一个开源项目,想让别人也能使用 CocoaPods 直接导入,那么可以这样做。
英文好的大哥大姐们 => 传送门:CocoaPods官方文档说明
1、在github上创建一个仓库,比如CNTestDemo,重要:记得选择开源协议(MIT)
2、将项目clone到自己的工作目录,至于Git的使用这里就不说了,如果不了解的可以先看看这里:
廖雪峰--Git教程
3、创建 podspec 文件:
cd /Document/Work/iOS/CNTestDemo
pod spec create CNTestDemo
4、编辑 podspec 文件: vim CNTestDemo.podspec
5、创建之后会自动生成一个模板,里面会有详细的注释(可以参考别的开源项目的podspec文件),这里给出一个示例文件:
Pod::Spec.new do |s|
s.name = 'CNTestDemo'
s.version = '1.0'
s.license = "MIT" //开源协议
s.summary = 'This is a test demo' //简单的描述
s.homepage = 'https://github.com/neilchan/CNTestDemo' //主页
s.author = { 'Neil Chan' => '***@yeah.net' } //作者
s.source = { :git => 'https://github.com/neilchan/CNTestDemo.git', :tag => "1.0" } //git路径、指定tag号
s.platform = :ios
s.source_files = 'CNTestDemo/*' //库的源代码文件
s.framework = 'UIKit' //依赖的framework
s.requires_arc = true
end
6、创建tag,同步到github:
git add .
git commit -m "1.0"
git tag 1.0
git push --tags
git push origin master
7、验证podspec文件
pod spec lint CNTestDemo.podspec
如果不通过根据提示解决错误之后,返回步骤6。在这之前要删除github跟本地的tag,输入:
git tag -d 1.0 //删除本地tag
git push origin :refs/tags/1.0 // 删除github仓库tag
8、注册 CocoaPods 信息(第一次提交的话,不是的话跳过)
pod trunk register 这里写邮箱 '这里起个名字' --description=' 这里写描述'
去邮箱点击验证链接之后,再执行第9步骤
9、提交到 CocoaPods
pod trunk push CNTestDemo.podspec
到这里提交完成之后就可以通过 CocoaPods导入或者查找你的开源项目了。
建立企业内部私有库
看到标题莫慌,其实不是什么大事儿。只是你只需要执行完上述说到的第7步骤,就不推到 CocoaPods 的公共资源列表去了就行。而在使用的时候你需要在 Podfile 中这样写:
pod 'ProjectName',:git=>"http://xxx.git"(把xxx替换为库的git地址)
这里感谢: