CocoaPods安装
tags:教程
CocoaPods是什么?
当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetworking等.可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,"子子孙孙无穷尽也".这也许是比较特殊的情况.总之手动一个个去下载所需类库十分麻烦.另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载最新版本,重新加入到项目中,十分麻烦.如果能有什么工具能解决这些恼人的问题,拿奖"善莫大焉".所以你需要用CocoaPods来管理第三方.
在iOS开发中势必会用到一些第三方依赖库,比如大家都熟悉的ASIHttpRequest,AFNetworking,JSONKit等.使用这些第三方类库能极大的方便项目的开发,但是集成这些依赖库需要我们手动去配置,例如集成ASIHttpRequest库时除了加入源码意外还需要手动去添加一些系统的framework,CFNetwork,MObileCoreServices等.如果这些第三方库发生了更新,还需要手动去更新项目.这就显得非常麻烦,有麻烦自然有解决办法,CocoaPods就是为了解决这个问题而生的.通过CocoaPods,我们可以将第三方的依赖库统一管理起来,配置和更新只需要通过简单的几行命令即可完成,大大的提高了实际开发中的工作效率,使我们的主要精力集中到更重要的事情上去.
安装步骤
打开终端
① 检测当前环境是否支持Ruby
命令:ruby -v 回车
现象:ruby 2.0.0p451 ******
说明:默认苹果电脑自带有这个环境,如果没有需要你自己百度去安装.
② 检测镜像文件是否可用
命令:gem sources -l
现象:*** CURRENT SOURCES ***
http://********
说明:如果这个网址不是https:ruby.taobao.org/,执行以下命令
命令:gem sources --remove 你那里显示的网址
说明:移除系统自带的数据源
命令:gem sources -a https://ruby.taobao.org/
说明:添加一个新的数据源.
命令:gem sources -l
说明:再次查看当前的数据源
现象:*** CURRENT SOURCES ***
https://ruby.taobao.org/
===============================================================
注:最新消息,淘宝的镜像已经不再维护,目前改为https://gems.ruby-china.org
③ 安装
命令:sudo gem install cocoapods
说明:安装cocoapods
现象:稍等片刻,会自动跑代码.如果让你输入密码,直接输入开机密码回车即可.输入密码的时候终端没反应,不用管.然后再等几分钟等代码跑完.
Successfully ****
Fetching: *******
④ 测试
命令:po
动作:快速按下键盘的tab键两次
现象:pod pod2readme5.16 podselect ******
说明:如果能看见pod,说明环境安装完成
⑤ 测试第三方库能否使用
命令:pod search jsonkit
现象:如果安装完成会出现一些黑字和绿字;如果没有安装完成会提示一句安装的代码,等待即可.
说明:安装完以后再次敲入搜索命令测试,能出来绿字的说明成功,否则就不要往下再做了
配置项目
① 创建一个Xcode项目名为TestDemo并保存于桌面(保存路径自己定,在这里我们以桌面为例).创建好以后把项目关闭.
② 开始配置
命令:cd /User/Desktop/TestDemo
说明:用cd命令进入你的项目文件夹.如果不知道文件夹路径怎么写,那么先敲入cd空格,然后直接把项目所在文件夹直接拉到终端中,会自动出来路径
现象:回车以后,MacBook-Pro:~ 变为 MacBook-Pro:TestDemo
命令:vi Podfile
说明:创建一个Podfile文件,用于配置第三方库的列表.注意,Podfile一个字母都别错
现象:会出来一堆~符号,最下面有个"Podfile" [New File]
命令:i
说明:插入模式
现象:最下方变成了 -- INSERT -- .然后你就可以开始输东西了
第一行 platform:ios,'9.0'
说明:platform:ios 设置开发平意思台为iOS; '9.0' :指所有第三方库支持的最低版本,最好写上
第二行 target 'YourProjectName' do
第三行 inhibit_all_warnings!
说明: 去掉所有警告
第四行 pod 'AFNetworking’,’~> 2.0’
说明: pod 'AFNetworking’ 意思是你要配置的第三方库名称 '~> 2.0'表示库的版本
注意:
pod 'AFNetworking' //不显式指定依赖库版本,表示每次都获取最新版本
pod 'AFNetworking', '2.0' //只使用2.0版本
pod 'AFNetworking', '> 2.0' //使用高于2.0的版本
pod 'AFNetworking', '>= 2.0' //使用大于或等于2.0的版本
pod 'AFNetworking', '< 2.0' //使用小于2.0的版本
pod 'AFNetworking', '<= 2.0' //使用小于或等于2.0的版本
pod 'AFNetworking', '~> 0.1.2'//使用大于等于0.1.2但小于0.2的版本
pod 'AFNetworking', '~>0.1' //使用大于等于0.1但小于1.0的版本
pod 'AFNetworking', '~>0' //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本
重点说明:
第三行的代码不是乱写的,需要填写正确.
再打开一个终端界面,这时应该有两个终端界面.一个用来设置列表,一个用来查找第三方库.在新建的终端界面中输入以下命令
命令:pod search AFNetworking
说明:搜索第三方库
现象:会出来一堆东西,因为这个搜索是个模糊搜索,你需要从结果中找到你想配置的那个库.其中就包含有我们所说的第二行的那个命令.而且还能看见对应的版本,可以自己选择
注意:有时候结果太多显示不完,按回车可以继续往下浏览.退出的话直接按q
第三行,第四行,第五行....需要几个第三方库就写几行命令即可
最后一行 end
③ 退出保存
操作:键盘左上角的ESC键
说明:退出编辑模式
现象:最下方什么都没有
操作:shift+:
现象:最下方会出现一个冒号
操作:输入wq 回车
说明:退出保存.回到终端界面
④ 下载并配置第三方库
命令1:pod install
说明:根据Podfile文件指定的内容,安装依赖库,如果有Podfile.lock文件而且对应的Podfile文件未被修改.则会根据Podfile.lock文件指定的版本安装.
每次更新了Podfile文件时,都需要重新执行该命令,以便重新安装Pods依赖库.
因为每次都会从网上下载最新的目录到本地并下载列表中对应的第三方库,所以下载很慢,偶尔使用.
命令2:pod update
若果Podfile中指定的依赖库版本不是写死的,当对应的依赖库有了更新,无论有没有Podfile.lock文件都会去获取Podfile文件描述的允许获取到的最新依赖库版本.
命令3:pod install --verbose --no-repo-update
说明:不更新目录,直接按照列表下载(比较快:常用)
注意:尽管pod install更新很慢,但是需要偶尔使用,否则就不能通过pod search 命令搜索到最新的第三方库
命令4:pod update --verbose --no-repo-update
说明:和命令2一个意思
稍等片刻,等下它自动下载和配置
现象:跑一堆代码,一般是绿色,黑色,黄色三种.如果有红色,说明配置列表可能有问题,需要重新修改
⑤ 开始使用第三方库
1> 打开当前项目
注:原先是蓝色的项目工程文件和文件夹,现在多了一些文件和文件夹,其中包含一个白色的,名为TestDemo.xcworkspace,双击打开
现象:打开以后,Xcode左侧会有两个项目工程文件
注意:一定要先关闭原先的工程,再双击打开TestDemo.xcworkspace.否则会有问题
2> 浏览Pods选项
Podfile:可以直接修改这个文件
Frameworks:自动导入需要的系统框架(不用管)
Pods:你所导入的第三方库文件目录都在这里
Products:不用管
Targets Support Files:不用管
3> 使用
在需要用第三方库的地方手动导入头文件
注:格式为#import <******.h>
用#import ""也行,但是不提示,容易出错
删除/修改第三方库
只需要修改Podfile中的文件列表即可.如果想删除第三方库就直接把对应的项给删除.如果想用其他版本就手动修改后面的版本号.修改完以后通过终端的pod install --verbose --no-repo-update进行重新配置即可.
删除cocoapods
① 删除工程文件夹下的Podfile,Podfile.lock和Pods文件夹
② 删除xcworkspace文件
③ 使用xcodeproj文件打开工程,删除Frameworks组下的Pods.xcconfig及libPods.a引用
④ 在工程设置中的Build Phases下删除CHeck Pods Manifest.loca及Copy Pods Resources
补充用法
① pod setup
用于跟新本地电脑上的保存的Pods依赖库tree.由于每天有很多人会创建或者更新Pods依赖库,这条命令执行的时候会相当慢,还请耐心等待.我们需要经常执行这条命令,否则有新的Pods依赖库的时候执行pod search命令是搜不出来的.
② 多个target中使用相同的Pods依赖库
比如,名称为CocoaPodsTest的target和Second的target都需要使用Reachability、SBJson、AFNetworking三个Pods依赖库,可以使用link_with关键字来实现,将Podfile写成如下方式:
link_with ‘CocoaPodsTest’, ‘Second’
platform :ios
pod ‘Reachability’, ‘~> 3.0.0’
pod ‘SBJson’, ‘~> 4.0.0’
platform :ios, ‘7.0’
pod ‘AFNetworking’, ‘~> 2.0’
③ 不同的target使用完全不同的Pods依赖库
CocoaPodsTest这个target使用的是Reachability、SBJson、AFNetworking三个依赖库,但Second这个target只需要使用OpenUDID这一个依赖库,这时可以使用target关键字,Podfile的描述方式如下:
target :’CocoaPodsTest’ do
platform :ios
pod ‘Reachability’, ‘~> 3.0.0’
pod ‘SBJson’, ‘~> 4.0.0’
platform :ios, ‘7.0’
pod ‘AFNetworking’, ‘~> 2.0′
end
target :’Second’ do
pod ‘OpenUDID’, ‘~> 1.0.0’
end
其中,do/end作为开始和结束标识符.
④ Podfile.lock文件
在使用CocoaPods,执行完pod install之后,会生成一个Podfile.lock文件.这个文件看起来跟我们关系不大,实际上绝对不应该忽略它.
该文件用于保存已经安装的Pods依赖库的版本,通过CocoaPods安装了SBJson、AFNetworking、Reachability三个POds依赖库以后对应的Podfile.lock文件内容为:
PODS:
– AFNetworking (2.1.0):
– AFNetworking/NSURLConnection
– AFNetworking/NSURLSession
– AFNetworking/Reachability
– AFNetworking/Security
– AFNetworking/Serialization
– AFNetworking/UIKit
– AFNetworking/NSURLConnection (2.1.0):
– AFNetworking/Reachability
– AFNetworking/Security
– AFNetworking/Serialization
– AFNetworking/NSURLSession (2.1.0):
– AFNetworking/NSURLConnection
– AFNetworking/Reachability (2.1.0)
– AFNetworking/Security (2.1.0)
– AFNetworking/Serialization (2.1.0)
– AFNetworking/UIKit (2.1.0):
– AFNetworking/NSURLConnection
– Reachability (3.0.0)
– SBJson (4.0.0)
DEPENDENCIES:
– AFNetworking (~> 2.0)
– Reachability (~> 3.0.0)
– SBJson (~> 4.0.0)
SPEC CHECKSUMS:
AFNetworking: c7d7901a83f631414c7eda1737261f696101a5cd
Reachability: 500bd76bf6cd8ff2c6fb715fc5f44ef6e4c024f2
SBJson: f3c686806e8e36ab89e020189ac582ba26ec4220
COCOAPODS: 0.29.0
Podfile.lock文件最大得用处在于多人开发.当团队中的某个人执行完pod install命令后,生成的Podfile.lock文件就记录下了当时最新Pods依赖库的版本,这时团队中的其它人check下来这份包含Podfile.lock文件的工程以后,再去执行pod install命令时,获取下来的Pods依赖库的版本就和最开始用户获取到的版本一致.如果没有Podfile.lock文件,后续所有用户执行pod install命令都会获取最新版本的SBJson,这就有可能造成同一个团队使用的依赖库版本不一致,这对团队协作来说绝对是个灾难!
在这种情况下,如果团队想使用当前最新版本的SBJson依赖库,有两种方案:
1> 更改Podfile,使其指向最新版本的SBJson依赖库;
2> 执行pod update命令;
鉴于Podfile.lock文件对团队协作如此重要,我们需要将它添加到版本管理中.
如何制作自己的Cocopods库(尚未完成)
① 在github上新建一个工程
如何简化Cocoapods操作
终端的其他命令
cd 路径 进入到路径对应的文件夹中
cd .. 返回上一级目录
cd ~ 返回到根目录
command + l 清除一行
command + k 清除所有
command + q 关闭应用
上下方向键 获取上一条/下一条命令
常见错误
错误1:
现象:[!] Unable to find a pod with name, author, summary, or description matching
解决方案:执行rm ~/Library/Caches/CocoaPods/search_index.json 命令,然后重新搜索