作者: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. 重拾C

    重拾C,一天一点点_10 来博客园今天刚好两年了,两年前开始学编程. 忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多.这两天调试服务器,遇到不少麻烦. 刚出去溜达了一下,晚上 ...

  2. 用Python实现gmail邮箱服务,实现两个邮箱之间的绑定(中)

    这篇博客,主要讲解用Python实现邮箱服务的几个需要学习的模块:E-mail Compotion and Decoding(邮件生成和解析).SMTP.POP.IMAP 如上篇博客所讲,我学习过程参 ...

  3. CodeForces Round

    CodeForces Round 199 Div2   完了,这次做扯了,做的时候有点发烧,居然只做出来一道题,差点被绿. My submissions     # When Who Problem ...

  4. DropDownList单选与多选下拉框

    一.单选DropDownList传值 1.添加界面的DropDownList显示值问题 (1)在方法内添加ViewData的方法: var ad = new UnitsRepository(); Vi ...

  5. js中的“闭包”

    js中的“闭包” 姓名:闭包 官方概念:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. ( ⊙o⊙ )!!!这个也太尼玛官方了撒,作为菜鸟的 ...

  6. Hibernate配置XML连接数据库

    一.hibernate.cfg.xml 1.配置连接Oracle <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate ...

  7. JavaEE:Tomcat服务器常用配置和HTTP简介

    Web服务器常用配置1.Web系统采用B/S结构通信的:Browser --- Server1)浏览器向服务器发送访问目标资源请求(请求)2)服务器根据请求的目标资源路径,在服务器端进行查找(请求查找 ...

  8. HtmlParser应用

    HtmlParser应用,使用Filter从爬取到的网页中获取需要的内容 { String url = "http://wenku.baidu.com/search?word=htmlpar ...

  9. 基于存储过程的MVC开源分页控件

    基于存储过程的MVC开源分页控件--LYB.NET.SPPager 摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件M ...

  10. 深入浅出Mybatis-sql自动生成

    本文提供了一种自动生成sql语句的方法,它针对的对象是有主键或唯一索引的单表,提供的操作有增.删.改.查4种.理解本文和本文的提供的代码需要有java注解的知识,因为本文是基于注解生成sql的.本文适 ...