CocoaPods 的详细使用教程
CocoaPods进阶篇
1、Podfile.lock文件
当执行:pod install 安装pod之后,会生成Podfile.lock文件,该文件用于保存已经安装的Pods依赖的版本。例如通过cocoaPods安装AFNetworking依赖库对应的Podfile.lock的文件内容为:
PODS:
- AFNetworking (2.5.4):
- AFNetworking/NSURLConnection
- AFNetworking/NSURLSession
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- AFNetworking/UIKit
- AFNetworking/NSURLConnection (2.5.4):
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- AFNetworking/NSURLSession (2.5.4):
- AFNetworking/NSURLConnection
- AFNetworking/Reachability (2.5.4)
- AFNetworking/Security (2.5.4)
- AFNetworking/Serialization (2.5.4)
- AFNetworking/UIKit (2.5.4):
- AFNetworking/NSURLConnection
DEPENDENCIES:
- AFNetworking (~> 2.0)
SPEC CHECKSUMS:
AFNetworking: c7d7901a83f631414c7eda1737261f696101a5cd
Podfile.lock文件最大得用处在于多人开发。对于没有在Podfile中指定Pods依赖库版本的写法,如下:
pod \'AFNetworking\'
该句话用于获取当前AFNetworking这个Pods依赖库的最新版本。
当团队中的某个人执行完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文件对团队协作如此重要,我们需要将它添加到版本管理中,而且最好更改podfile,指定第三库的版本号
2、Podfile文件
Podfile文件的位置一般和项目工程放在同一级别,也就是那个xcodeproj工程文件。如果不放在这个目录里面,需要在Podfile最上面加上一行代码,写上工程的路径(最好放同一层,不要瞎折腾)
指定路径用关键字:xcodeproj
xcodeproj "/Users/apple/Desktop/PodsTest/PodsTest.xcodeproj"
platform :ios, \'7.0\'
pod \'AFNetworking\', \'~> 2.0\'
如果不放在和项目工程文件同一路径下,进入Podfile所在路径下,执行pod install命令安装一下cocoapods.
3、如何写Podfile文件中,第三方库的版本
如果不知道AFNetworking最新版本是多少,可以打开终端输入命令:
pod search AFNetworking
回车后,可以得到一串信息:
-> AFNetworking (2.5.4)
A delightful iOS and OS X networking framework.
pod \'AFNetworking\', \'~> 2.5.4\'
- Homepage: https://github.com/AFNetworking/AFNetworking
- Source: https://github.com/AFNetworking/AFNetworking.git
- Versions: 2.5.4, 2.5.3, 2.5.2, 2.5.1, 2.5.0, 2.4.1, 2.4.0, 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, 1.3.2, 1.3.1, 1.3.0, 1.2.1,
1.2.0, 1.1.0, 1.0.1, 1.0, 1.0RC3, 1.0RC2, 1.0RC1, 0.10.1, 0.10.0, 0.9.2,
0.9.1, 0.9.0, 0.7.0, 0.5.1 [master repo]
- Subspecs:
- AFNetworking/Serialization (2.5.4)
- AFNetworking/Security (2.5.4)
- AFNetworking/Reachability (2.5.4)
- AFNetworking/NSURLConnection (2.5.4)
- AFNetworking/NSURLSession (2.5.4)
- AFNetworking/UIKit (2.5.4)
-> AFNetworking+AutoRetry (0.0.5)
Auto Retries for AFNetworking requests
pod \'AFNetworking+AutoRetry\', \'~> 0.0.5\'
- Homepage: https://github.com/shaioz/AFNetworking-AutoRetry
- Source: https://github.com/shaioz/AFNetworking-AutoRetry.git
- Versions: 0.0.5, 0.0.4, 0.0.3, 0.0.2, 0.0.1 [master repo]
-> AFNetworking+Ext (1.2.1)
AFNetworking的封装, 并提供一个 UIImageView+DYLoading cache in fileSystem+memory
pod \'AFNetworking+Ext\', \'~> 1.2.1\'
- Homepage: https://github.com/junhaiyang/AFNetworkingExt
- Source: https://github.com/junhaiyang/AFNetworkingExt.git
- Versions: 1.2.1, 1.2, 1.1, 1.0, 0.5, 0.4, 0.3 [master repo]
- Subspecs:
- AFNetworking+Ext/Base (1.2.1)
- AFNetworking+Ext/AFCustomRequestOperation (1.2.1)
- AFNetworking+Ext/AFDownloadRequestOperation (1.2.1)
- AFNetworking+Ext/AFTextResponseSerializer (1.2.1)
- AFNetworking+Ext/example (1.2.1)
- AFNetworking+Ext/UIKit (1.2.1)
- AFNetworking+Ext/UIKit/UIImageView+DYLoading
......
......
通过这条搜索命令,我们可以得到上面信息,最重要的是第三行
pod \'AFNetworking\', \'~> 2.5.4\'
把它拷贝到Podfile文件中即可。
4、CocoaPods常用的命令:
1).pod install
根据Podfile文件指定的内容,安装依赖库,如果有Podfile.lock文件而且对应的Podfile文件未被修改,则会根据Podfile.lock文件指定的版本安装。每次更新了Podfile文件时,都需要重新执行该命令,以便重新安装Pods依赖库。
2).pod update
若果Podfile中指定的依赖库版本不是写死的,当对应的依赖库有了更新,无论有没有Podfile.lock文件都会去获取Podfile文件描述的允许获取到的最新依赖库版本。
3).pod search
按名称搜索可用的Pods依赖库
4).pod setup
用于更新本地电脑上的保存的Pods依赖库tree。由于每天有很多人会创建或者更新Pods依赖库,这条命令执行的时候会相当慢,还请耐心等待。我们需要经常执行这条命令,否则有新的Pods依赖库的时候执行pod search命令是搜不出来的。
CocoaPods版本升级
有时候需要从服务器端更新代码,发现本地CocoaPods版本较低,需要升级。升级步骤如下:
1、执行命令
$ pod install
[!] The \'master\' repo requires CocoaPods 0.37.2 -
如上提示失败,提示需要CocoaPods 0.37.2版本
查看CocoaPods版本
$ pod --version
0.36.3
再执行更新或者安装的步骤:
$ sudo gem update --system // 先更新gem,国内需要切换源
$ gem sources --remove https://rubygems.org/
$ gem sources -a http://ruby.taobao.org/
$ gem sources -l
\*\*\* CURRENT SOURCES \*\*\*
http://ruby.taobao.org/
$ sudo gem install cocoapods // 安装cocoapods
$ pod setup
和安装过程是一样的,再次查看版本
$ pod --version
0.37.2
更新完成
CocoaPods的安装和使用
之前我没有接触到用CocoaPods来管理第三方库。直到苹果在15年春节之后宣布新政,从那天起,以后新上线的APP必须支持64位。当时没有了解到这条规定,app在提交审核一周后被拒绝了。当时项目中有不少第三方库,得一个一个找,而且还麻烦。毕竟64位替换32位库也费时费力,还得一个一个下载替换。于是师傅当时在项目中引入了CocoaPods。我就跟在后面一直了解吸收他的干货。这几天项目重构完了,我就学着走一遍如何安装和使用CocoaPods。我把其它的项目拷贝一份来做实验。整理如下:
一、首先介绍一下CocoaPods是什么:(百度一下资料呈上)
开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,友盟,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,手动一个个去下载所需类库十分麻烦。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦。
CocoaPods应该是iOS最常用最有名的类库管理工具了,上述两个烦人的问题,通过cocoaPods,只需要一行命令就可以完全解决,当然前提是你必须正确设置它。重要的是,绝大部分有名的开源类库,都支持CocoaPods。所以,作为iOS程序员的我们,掌握CocoaPods的使用是必不可少的基本技能了。
二、下载、安装CocoaPods:
打开终端,直接安装命令是:sudo gem install cocoapods
但是如果不使用代理,一般会失败的。所以使用如下办法,将镜像换成taobao.orh进行下载:
输入下面命令:
gem sources –remove https://rubygems.org/
删除原有镜像源
回车,有反应后再输入:
gem sources -a http://ruby.taobao.org/
修改为淘宝的镜像源,不信验证下:
gem sources -l
如上所示 表示修改镜像成功了
现在就可以下载了:再在终端运行:
sudo gem install cocoapods
如果网速不好,得重复执行这条命令,到最后提示安装成功即可!就这样,防不胜防的就安装好了cocoapods。
三、做一个实验,在以前的项目中,用cocoapods导入AFNetworking库:(如下步骤所示)
导入前的工程目录结构如下图所示:
在导入第三方库之前,需要判断该库是否支持cocoapods,验证是否支持只需要如下命令:
$ pod search AFNetworking
运行之后,出现如下所示情况,说明AFNetworking还是支持cocoapods的。
(其实比较长,我只是截图一部分下来说明下的)
需要用cocoapods直接导入AFNetworking,需要一个配置文件,cocoapods 安装和更新第三库,都是按照一个文件名字叫做PodFile的来执行的。
在终端中进入(cd命令)你项目所在目录,然后在当前目录下,利用vim创建Podfile,和CNTaiPingPension.xcodeproj在同一文件夹下(平级)
$ vim PodFile
(如果是第一次,vim PodFile 就是创建一个新的,以后都是打开修改即可)
然后在Podfile文件中输入以下文字:
platform :ios, ‘7.0’
pod AFNetworking
, ~> 2.0
这2条术语可以在AFNetworking的github页面找到,一般第三方支持cocoapods都会提示的。写完按esc 再按shift + : 输入wq(保存并退出),q (退出不保存)
这时候 ls 一下 发现已经多了一个文件,即:
现在再执行
$ pod install
回车等出现如下提示,说明成功了 失败就多试几次 网络不好没办法:
它让你关掉XCODE在点击CNTaiPingPension.xcworkspace运行项目,而不是之前的CNTaiPingPension.xcodeproj。现在项目中的目录结构如下所示:
看看 还多了一个Podfile.lock和Pods文件夹,咦,刚才导入的AFNetworking在哪呢?点击Pods,原来在这:如下图:
OK!至此,利用cocoapods导入AFNetworking成功了!这其实只是一小部分,以后再整理了!太神奇了,好东西,值得分享!