什么是Podfile ?

CocoaPods是用ruby实现的,因此Podfile文件的语法就是ruby的语法。
podfile是一个说明文件,用以描述管理一个或者多个Xcode project的target的依赖库。这个文件应该且必须被命名为Podfile
Podfile可以非常简单,下面的例子增加了Alamofire依赖库到单个target:

target 'MyApp' do use_frameworks! pod 'Alamofire', '~> 3.0' end

下面是一个更复杂的例子,Podfile链接了app和它的测试bundle:

source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/Artsy/Specs.git'platform :ios, '9.0' inhibit_all_warnings! target 'MyApp' do pod 'GoogleAnalytics', '~> 3.1' # Has its own copy of OCMock # and has access to GoogleAnalytics via the app # that hosts the test target target 'MyAppTests' do inherit! :search_paths pod 'OCMock', '~> 2.0.1' end end post_install do |installer| installer.pods_project.targets.each do |target| puts target.name end end

如果你希望多个target共享同一个pods,那么可以用关键字abstract_target

# There are no targets called "Shows" in any Xcode projects
abstract_target 'Shows' do pod 'ShowsKit' pod 'Fabric' # Has its own copy of ShowsKit + ShowWebAuth target 'ShowsiOS' do pod 'ShowWebAuth' end # Has its own copy of ShowsKit + ShowTVAuth target 'ShowsTV' do pod 'ShowTVAuth' end end

Podfile中自带一个隐藏的、默认的abstract target,所以你也可以用如下的方式达到上面例子的同样效果:

pod 'ShowsKit'
pod 'Fabric'# Has its own copy of ShowsKit + ShowWebAuth
target 'ShowsiOS' do pod 'ShowWebAuth' end # Has its own copy of ShowsKit + ShowTVAuth target 'ShowsTV' do pod 'ShowTVAuth' end

指定pod版本

当开始一个项目,你可能会想要使用最新版本的pod依赖库。 如果是这种情况,只需忽略版本要求。

pod 'SSZipArchive'

稍后在项目您可能想要使用特定版本的pod依赖库,在这种情况下,您可以指定版本号。

pod 'Objection', '0.9'

除了没有版本,或特定的一个,也可以使用逻辑运算符:

  • '> 0.1' 高于0.1的任何版本
  • '>= 0.1' 版本0.1或更高版本
  • '< 0.1' 低于0.1的任何版本
  • '<= 0.1' 版本0.1或更低的版本

除了逻辑运算符,还有一种运算符:

  • '~> 0.1.2' 版本0.1.2和0.2版本之间的任意版本,不包括0.2和比0.2更高的版本
  • '~> 0.1' 版本0.1和版本1.0之间的任意版本,不包括1.0和比1.0更高的版本
  • '~> 0' 版本0或比版本0更高的版本,这基本上和不指定版本号的效果是一样的。

使用本地文件夹内的依赖库

如果你想建立一个本地依赖库和项目之间的关系,即项目依赖本地文件夹的某个依赖库,可以用关键字path

pod 'Alamofire', :path => '~/Documents/Alamofire'

使用podspec更新依赖库

使用仓库的master分支:

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'

使用仓库中其他的分支:

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'

使用指定tag的分支:

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1'

或者使用指定commit号的版本:

pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :commit => '0f506b1c45'

使用path将把本地文件夹作为pod依赖库的源,并且将会直接从给定的文件夹中把pod依赖库链接进pod项目。这意味着我们对这个本地文件夹的编辑与修改将会被pod直接更新。

source 'URL' : 指定镜像仓库的源
platform : ios, '6.0' : 指定所支持系统和最低版本
inhibit_all_warnings! :屏蔽所有warning
workspace '项目空间名': 指定项目空间名
xcodeproj '工程文件名':指定xcodeproj工程文件名

~ > : 从指定版本到倒数第二位版本号升1为止,比如 '~> 1.2.1'是指 1.2.1 <= 版本 < 1.3.0。'~>1.2'是指1.2<= 版本 < 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的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本

CocoaPods pod install/pod update更新慢的问题

/默认执行pod install 或者 pod update命令,会更新远程cocopodsde spec库。所以导致命令执行的比较慢,我们可以采用以下命令来提高更新速度,不更新CocoaPods的spec仓库直接install/update。
pod update --verbose --no-repo-update
pod install --verbose --no-repo-update

Podfile和Target

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

项目存在多Target情况

项目存在多个Target的时候,需要配置Podfile文件来支持新增加的Target,否则只支持项目默认建立时生成的Target:

a.多个Target使用相同的pods依赖库

a、默认新建的项目只有一个target,但是我们可以给项目天阿基额外的target。如果项目中存在多个target,且两个Target所依赖的的第三方库完全相同,则可以使用
link_with关键字,将Podfile写成如下方式:

link_with 'CocoaPodsTest', 'Second'
platform :ios
platform :ios, ‘9.0’ pod 'AFNetworking', '~> 2.0'

link_with 'CocoaPodsTest', 'Second'
platform :ios
pod 'Reachability', '~> 3.0.0' pod 'SBJson', '~> 4.0.0' platform :ios, '7.0' pod 'AFNetworking', '~> 2.0'

如果你按照上面的写法编辑Podfile,然后执行pod undate 或pod install,你会发现以下的错误:

Snip20161204_1.png

意思是link_with关键字已经过期,现在不在支持,我们需要用target blocks来代替link_with。查看官方文档,如下:

Snip20161204_3.png

所以,我们可以通过abstract_target和target继承的方式代替link_with.

b.多个的Target需要不同的依赖库

如果不同的target使用不同的依赖库,则可以:

platform :ios
target :'Test' do pod 'Reachability' pod 'SBJson' pod 'AFNetworking' end target :'Second' do pod 'OpenUDID' end

inhibit_all_warnings!的作用

用于屏蔽cocoapods库里面的所有警告。

Snip20161204_2.png

这个特性也能在子target里面定义,如果你想屏蔽某pod里面的警告也是可以的:

pod 'SSZipArchive', :inhibit_warnings => true

use_frameworks!的作用

在pods中用frameworks替代静态库。
另,一般开发swift项目时,我们会在podfile中添加这一句。

podspec文件

后缀名为podspec(cocoapods specification)的文件是cocoapods的说明文件,该文件为Pods依赖库的描述文件,每个Pods依赖库必须有且仅有那么一个描述文件。该文件包括依赖库的名字、版本、描述、license、author、source、platform等信息。

其他链接:
Podfile语法参考(译)
Cocoapods的Podfile常见语法总结
CocoaPods详解之----使用篇 
CocoaPods详解之----进阶篇 
CocoaPods详解之----制作篇
CocoaPods安装和使用教程以及一些常见问题 
如何制作自己的Pod库
The Podfile(英)
Podfile语法参考(译)
(实验)Podfile的target与link_with 
Podfile Syntax Reference(英)
Podfile Syntax Reference(英)

转载于:https://www.cnblogs.com/wsnb/p/6163365.html

Podfile使用说明相关推荐

  1. Bugtags 使用说明

    Bugtags 使用说明 温馨提示:这篇文档可能会花费你 10 分钟左右的时间阅读完成,但我们相信这 10 分钟你将有所收获, 在介绍如何使用之前,先看看 Bugtags 到底是做什么的吧! 如果你只 ...

  2. BugTags使用说明以及安装搭建步骤

    整理下官网的文档分享给大家,希望对大家有帮助 Bugtags 使用说明 2015-11-26 BUGTAGS 使用手册 用户反馈 移动测试 目录 1. Bugtags 是什么? 1.1. 移动应用 B ...

  3. abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...

    高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF 高性能计算平台ABAQUS 任务调度使用说明 作者:陈林 E-Mail:chenlin@ 日期:2017-1-10 ...

  4. linux 文件拷贝并替换,Linux_cmd replace 文件替换使用说明,帮助信息: 复制代码 代码如 - phpStudy...

    cmd replace 文件替换使用说明 帮助信息: 复制代码 代码如下: 替换文件. REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [ ...

  5. Simple Dynamic Strings(SDS)源码解析和使用说明二

    在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...

  6. 关于Cocoa Pods的升级安装和使用说明

    前段时间要使用Cocoa Pods ,安装时发现Ruby版本过低导致安装失败, 查找教程解决后又出现Cocoa Pods新版本导致的问题, 以下给出解决办法: 一 . 升级Ruby 1.安装RVM R ...

  7. Your Podfile has had smart quotes sanitised

    2019独角兽企业重金招聘Python工程师标准>>> 1.无论是执行pod install还是pod update都卡在了Analyzing dependencies 或者 Upd ...

  8. Podfile 常见语法

    source  'URL' : 指定镜像仓库的源 platform : ios,  '6.0'  : 指定所支持系统和最低版本 inhibit_all_warnings! :屏蔽所有warning w ...

  9. Delphi开发的IOCP测试Demo以及使用说明。

    Delphi开发的IOCP,此为压力测试Demo和使用说明.

  10. 如何将github上的 lib fork之后通过podfile 改变更新源到自己fork的地址

    解决办法: http://stackoverflow.com/questions/20936885/cocoapods-and-github-forks 就是fork完后,提交更改到自己的github ...

最新文章

  1. 今天聊聊分布式锁 No.86
  2. leetcode算法题--最长快乐字符串★
  3. eclipse + JBoss 5 + EJB3开发指南(5):使用配置文件发布Session Bean
  4. hdu 4289(最小割最大流定理)
  5. 什么是nginx负载均衡高可用
  6. 牛客网_PAT乙级_1016程序运行时间(15)
  7. Qt自定义数据类型注册meta-object system
  8. Java0steam_Java学习 - Stream 使用
  9. mysql 装载dump文件_mysql命令、mysqldump命令找不到解决
  10. HDU6092——Rikka with Subset 【dp】
  11. 在…视域下是什么意思_电影中出现的出品人是什么意思?你需要了解下
  12. 腾讯校园招聘笔试 2019-8-17 第四题 另一种解法
  13. ‘git‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
  14. 【科普】你所不了解的SWF文件
  15. 在龙芯1c上使用rt-thread统一标准的spi接口
  16. 工具 | IDEA 设置为护眼的豆沙绿
  17. 汇编语言 程序设计 顺序结构
  18. 微信小程序 逆向还原
  19. 云计算机怎么分盘,电脑硬盘怎么分区
  20. 【无标题】体验scratch海底世界

热门文章

  1. Android教程 第五章 常用UI界面控件
  2. 【强化学习】CARLA——Windows安装
  3. oracle rollup 排序,oracle分组函数之ROLLUP演示
  4. windows10安装CUDA
  5. Caffe官方例程之 特征可视化python代码 (filter visualization notebook)
  6. 用PyTorch实现一个卷积神经网络进行图像分类
  7. ConcurrentHashMap!你居然不知道1.7和1.8可不一样?!
  8. mysql索引卡死_SQL2000数据库运行缓慢、卡、死锁!请重建索引!
  9. 机器学习 python 随机抽样random sampling 代码
  10. C++ (void)_r;什么意思