作者:wangzz
转载请注明出处
 
一、podfile.lock文件
 
上文讲过,在开始使用cocoapods,执行完pod install之后,会生成一个podfile.lock文件。这个文件看起来跟我们关系不大,实际上绝对不应该忽略它。
该文件用于保护已经安装的pods依赖库的版本,通过cocoapods安装了SBJon、AFNetworking、Reachability三个pods依赖库以后对应的podfile.lock文件内容为:
  1. PODS:
  2. - AFNetworking (2.1.0):
  3. - AFNetworking/NSURLConnection
  4. - AFNetworking/NSURLSession
  5. - AFNetworking/Reachability
  6. - AFNetworking/Security
  7. - AFNetworking/Serialization
  8. - AFNetworking/UIKit
  9. - AFNetworking/NSURLConnection (2.1.0):
  10. - AFNetworking/Reachability
  11. - AFNetworking/Security
  12. - AFNetworking/Serialization
  13. - AFNetworking/NSURLSession (2.1.0):
  14. - AFNetworking/NSURLConnection
  15. - AFNetworking/Reachability (2.1.0)
  16. - AFNetworking/Security (2.1.0)
  17. - AFNetworking/Serialization (2.1.0)
  18. - AFNetworking/UIKit (2.1.0):
  19. - AFNetworking/NSURLConnection
  20. - Reachability (3.0.0)
  21. - SBJson (4.0.0)
  22. DEPENDENCIES:
  23. - AFNetworking (~> 2.0)
  24. - Reachability (~> 3.0.0)
  25. - SBJson (~> 4.0.0)
  26. SPEC CHECKSUMS:
  27. AFNetworking: c7d7901a83f631414c7eda1737261f696101a5cd
  28. Reachability: 500bd76bf6cd8ff2c6fb715fc5f44ef6e4c024f2
  29. SBJson: f3c686806e8e36ab89e020189ac582ba26ec4220
  30. COCOAPODS: 0.29.0

podfile.lock文件最大的用处在于多人开发。对于没有在podfile中指定 pod依赖库版本的写法,如下:

  pod'SBJson'

  该句话用于获取当前SBJson这个pod依赖库的最新版本。

当团队中的某个人执行完pod install命令后,生成的podfile.lock文件就记录下了当时最新pods依赖库的版本,这时团队中的其他人check下来这份包含podfile文件的工程以后,再去执行pod install命令时,获取下来的pods依赖库的版本就和最开始用户获取到的版本一致。如果没有podfile.lock文件,后续所有用户执行pod install命令都会获取当前版本的SBJson,这就有可能造成同一个团队使用的依赖库版本不一致,这对团队写作来说绝对是灾难!在这种情况下,如果团队想使用当前最新版本的SBJson依赖库,有两种方案:

    ·更改podfile,使其只想最新版本的SBJson依赖库

    ·执行pod update命令

鉴于podfile.lock文件对团队协作如此重要,我们需要将它添加到版本管理中。

二、podfile文件

对于普通用户来说,使用cocoapods我们打交道最多的就是podfile文件。cocoapods是用ruby实现的,因此podfile文件的语法就是ruby语法。

1.podfile文件存放位置

通常情况下,推荐podfile文件都放在工程根目录,如图示:

事实上,podfile文件可以存放在任意一个目录下,需要做的是在podfile中指定工程的路径,和原来相比,podfile文件就在最开始的位置增加了一行,具体内容如下:

  1. xcodeproj "/Users/wangzz/Desktop/CocoaPodsTest/CocoaPodsTest.xcodeproj"
  2. platform :ios
  3. pod 'Reachability',  '~> 3.0.0'
  4. pod 'SBJson', '~> 4.0.0'
  5. platform :ios, '7.0'
  6. pod 'AFNetworking', '~> 2.0'

指定路径使用的是xcodeproj关键字。

此后,进入podfile文件所在路径,执行pod install命令就会和之前一样下载这些pods依赖库,而且生成的相关文件都放在了podfile所在的目录下面,如图:

和之前一样,我们仍需要使用这里生成的workspace文件打开工程。

2、podfile和target

podfile本质上是用来描述xcode工程的targets用的。如果我们不显式指定podfile对应的target,cocoapods会创建一个名为default的隐式target,会和我们工程中的第一个target相对应。换句话说,如果在podfile中乜有指定target,那么只有工程里的第一个target能够使用podfile中描述的pods依赖库。

如果想在一个podfile中同时描述project中的多个target,根据需求的不同,可以有不同的实现方式。为了说明问题,在原来的工程中创建一个名为second的target,现在的project中包含的target有:

(1)多个target中使用相同的pods依赖库

比如,名为cocoapodsTest的target和Second的target都需要使用Reachablity、SBJson、AFNetworking三个pods依赖库,可以使用link_with关键字来实现,将podfile写成如下方式:

  1. link_with 'CocoaPodsTest', 'Second'
  2. platform :ios
  3. pod 'Reachability',  '~> 3.0.0'
  4. pod 'SBJson', '~> 4.0.0'
  5. platform :ios, '7.0'

pod 'AFNetworking', '~> 2.0'

这种写法就实现了cocoapodsTest和Second两个target公用相同的pods依赖库。

(2)不同的target使用完全不同的pods依赖库

cocoapodsTest这个target使用的是Reachbility、SBJon、AFNetworking三个依赖库,但是Second这个target只需要使用OpenUDID这一个依赖库,这时可以使用target关键字,podfile的描述方法如下:

  1. target :'CocoaPodsTest' do
  2. platform :ios
  3. pod 'Reachability',  '~> 3.0.0'
  4. pod 'SBJson', '~> 4.0.0'
  5. platform :ios, '7.0'
  6. pod 'AFNetworking', '~> 2.0'
  7. end
  8. target :'Second' do
  9. pod 'OpenUDID', '~> 1.0.0'
  10. end

其中,do/end作为开始和结束标识符

3、使用podfile管理pods依赖库版本

引入依赖库时,需要显示或隐式注明引用的依赖库版本,具体写法和表示含义如下:

  1. pod 'AFNetworking'      //不显式指定依赖库版本,表示每次都获取最新版本
  2. pod 'AFNetworking', '2.0'     //只使用2.0版本
  3. pod 'AFNetworking', '> 2.0'     //使用高于2.0的版本
  4. pod 'AFNetworking', '>= 2.0'     //使用大于或等于2.0的版本
  5. pod 'AFNetworking', '< 2.0'     //使用小于2.0的版本
  6. pod 'AFNetworking', '<= 2.0'     //使用小于或等于2.0的版本
  7. pod 'AFNetworking', '~> 0.1.2'     //使用大于等于0.1.2但小于0.2的版本
  8. pod 'AFNetworking', '~>0.1'     //使用大于等于0.1但小于1.0的版本
  9. pod 'AFNetworking', '~>0'     //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本

三、cocoapods常用命令

1、pod install

根据podfile文件指定的内容,安装依赖库,如果有podfile.lock文件而且对应的podfile文件未被修改,则会根据podfile.lock文件指定的版本安装。

每次更新了podfile文件时,都需要重新执行该命令,以便重新安装pods依赖库。

2、pod update

如果podfile中指定的依赖库版本不是写死的,当对应的依赖库有了更新,无论有么有podfile.lock文件都会去获取podfile文件描述的允许获取到的最新依赖库版本。

3、pod search

命令格式为

  1. $ pod search OpenUDID

后面的openUDID为参数。

从命令的格式不难看出,该命令是用来按名称搜索可用的pods依赖库,执行结果如下:

  1. -> OpenUDID (1.0.0)
  2. Open source initiative for a universal and persistent UDID solution for iOS.
  3. pod 'OpenUDID', '~> 1.0.0'
  4. - Homepage: http://OpenUDID.org
  5. - Source:   https://github.com/ylechelle/OpenUDID.git
  6. - Versions: 1.0.0 [master repo]

这里我们搜到了一条可用数据,里面描述了openUDID库的简要信息。其实我们真正需要的是上述结果中的第三行:

  1. pod 'OpenUDID', '~> 1.0.0'

不难看出,这是我们需要添加到podfile文件中的。

有了这条命令,就可以方便、迅速地找到需要的pods依赖库。

4、pod setup

命令格式为:

  1. $ pod setup

执行为了以后会打印:

  1. Setting up CocoaPods master repo
  2. Updating 7cd4668..f3d3ced
  3. Fast-forward

接下来还会打印更多消息。

这条命令用于更新本地电脑上的保存的pods依赖库tree。由于每天有很多人会创建或者更新pods依赖库,这条命令执行的时候会相当慢,还请耐心等待。我们需要经常执行这条命令,否则有新的pods依赖库的时候执行pod search命令是搜不出来的。

[HMLY]2.CocoaPods详解----进阶的更多相关文章

  1. [HMLY]4.CocoaPods详解----制作

    作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/20067595 转载请注明出处   学会使用别人的pods依赖库后,你一 ...

  2. [HMLY]1.CocoaPods详解----使用

    作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/18737437 转载请注明出处   一.什么是cocoaPods 1.为 ...

  3. CocoaPods详解之(二)----进阶篇

    CocoaPods详解之----进阶篇 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/19178709 转载请注明出处 ...

  4. CocoaPods详解之(三)----制作篇

    CocoaPods详解之----制作篇 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/20067595 转载请注明出处 ...

  5. CocoaPods 详解之----更新篇

    CocoaPods 大概是 2011 年出现的开源组件管理工具(目前已支持 Objective-C 和 Swift),近年来普及率越来越高,几乎已是所有 Cocoa 开源项目的标配.另外,很多大点的团 ...

  6. CocoaPods详解之(一)----使用篇

    CocoaPods详解之----使用篇 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/18737437 一.什么是Coc ...

  7. CocoaPods详解之----进阶篇

    作者:wangzz原文地址:http://blog.csdn.net/wzzvictory/article/details/19178709转载请注明出处如果觉得文章对你有所帮助,请通过留言或关注微信 ...

  8. CocoaPods详解之----制作篇【转】

    Cocoapods是非常好用的一个iOS依赖管理工具,使用它可以方便的管理和更新项目中所使用到的第三方库,以及将自己的项目中的公共组件交由它去管理.Cocoapods的介绍及优点本文就不在赘述,我开始 ...

  9. Cocoa包管理器之CocoaPods详解

    CocoaPods在Cocoa开发日常工作中经常用到的包管理器,即依赖管理工具.有的项目也有用Carthage的,Carthage是一个比较新的依赖管理工具,是使用Swift语言开发的.Carthag ...

随机推荐

  1. JavaWEB开发国际化

    1.国际化开发概述 )软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. )国际化又称为 i18n:inter ...

  2. Google Adsense(Google网站联盟)广告申请指南

    Google AdSense 是一种获取收入的快速简便的方法,适合于各种规模的网站发布商.它可以在网站的内容网页上展示相关性较高的 Google 广告,并且这些广告不会过分夸张醒目.由于所展示的广告同 ...

  3. easyui 通用的datagrid中如何带有查询条件分页

    html 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  4. C++套接字类CxUdpSocket的设计

    C++套接字类CxUdpSocket的设计 这是一个小巧的C++套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣能),个人习惯而已,如有雷同,纯属巧合. CxUdpS ...

  5. javascript ajax 脚本跨域调用全解析

    javascript ajax 脚本跨域调用全解析 今天终于有点时间研究了一下javsscript ajax 脚本跨域调用的问题,先在网上随便搜了一下找到一些解决的办法,但是都比较复杂.由是转到jqu ...

  6. android 视图设置多个setTag数据

    1)在string.xml 文件中添加 <item tyoe="id" name = "tag_first" /> <item tyoe=&q ...

  7. X86 IO端口和MMIO

    X86 IO端口和MMIO I/O作为CPU和外设交流的一个渠道,主要分为两种,一种是Port I/O,一种是MMIO(Memory mapping I/O).前者就是我们常说的I/O端口,它实际上的 ...

  8. C语言之break和continue

    一 break 和 continue 的介绍 break: 1).跳出当前所在的switch语句(tips:可查看前面 switch 部分)   2).跳出当前所在的循环 continue: 结束本次 ...

  9. 办理滑铁卢大学(本科)学历认证『微信171922772』UW学位证成绩单使馆认证University of Waterloo

    办理滑铁卢大学(本科)学历认证『微信171922772』UW学位证成绩单使馆认证University of Waterloo QQ/微信171922772办理毕业证成绩单.真实使馆及教育部学历认证★诚 ...

  10. vue组件,撸第一个

    实现此例您可以学到: vue-cli的基本应用 父组件如何向子组件传递值 单文件组件如何引入scss v-on和v-for的基础应用 源码下载 一.搭建vue开发环境 更换镜像到cnpmnpm ins ...