作者: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. [Usaco2008 Dec]Hay For Sale 购买干草[01背包水题]

    Description     约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草.  顿因有H(1≤H≤5000)包 ...

  2. [转]How to build a data storage and VM Server using comodity hardware and free software

    Source: http://learnandremember.blogspot.jp/2010_01_01_archive.html Requisites: 1) RAID protection f ...

  3. C语言实现进制转换——超图面试题

    递归:递归的原理,就是自己调用自己本身.存在一个顺序的问题,如果在递归前的是顺序执行,递归后的是逆序执行,如下: void gogogo() { //递归之前 gogogo(); //递归之后 } 递 ...

  4. JavaScript 跨域方法总结

    同源策略 在客户端编程语言中,如javascript和 ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义.同源策略规定跨域之间的脚本是隔离的,一个域的脚 ...

  5. C语言中数据类型的长度

    面试中C里面int长度经常会被问到,下面总结一下作为资料: 首先看看一般规定: 标准c规定,int长度等于机器字长,short的表示范围不能大于int的表示范围,long的表示范围不能小于int的表示 ...

  6. andriod手机签到应用服务器架构

    andriod手机签到应用服务器架构 最近导师要求我和另一个同学开发一个手机上课签到应用,我负责客户端和服务器之间的通信架构编写和数据的存储 本人大学四年只用过汇编和C/C++,因此对andriod开 ...

  7. JavaScript原型与继承

    JavaScript原型与继承 原型 在JavaScript中,每个函数都有一个prototype属性,这个属性是一个指针,指向该函数的原型对象.这个原型对象为所有该实例所共享.在默认情况下,原型对象 ...

  8. .NET开发邮件发送功能

    .NET开发邮件发送功能 今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知 ...

  9. SSH的整合

    SSH的整合 struts2和hibernate的配置我这里就不多说了,先把两个有关的东西说下.一个是所有的包.struts2+hibernate3+spring2.5我包准备放上去给大家下载. ht ...

  10. Union 与 Union all 区别

    原创,请园长不要删 Sql查询统计时,很多时候用到了union 和 union all,union与union all的区别就是联合查询的时候union会去重,union all不会去重.本人用uni ...