Podfile使用说明
什么是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,你会发现以下的错误:
意思是link_with关键字已经过期,现在不在支持,我们需要用target blocks来代替link_with。查看官方文档,如下:
所以,我们可以通过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库里面的所有警告。
这个特性也能在子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(英)
Podfile使用说明的更多相关文章
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
- 安装cocoapods遇到两大坑-Ruby版本升级和Podfile的配置
今天安装cocoapods #移除原有ruby源 $ gem sources --remove https://rubygems.org/ #使用可用的淘宝网 $ gem sources -a htt ...
- 玩转Podfile
前言 经常使用CocoaPods来管理iOS项目中的第三方库,但是我们要使用CocoaPods来管理第三方库,前提是要写好Podfile文件,通过这个文件来配置第三方库与项目之间的依赖.版本等信息. ...
- podfile The dependency `` is not used in any concrete target
内容提要: podfile升级之后到最新版本,pod里的内容必须明确指出所用第三方库的target,否则会出现The dependency `` is not used in any concrete ...
- “我爱背单词”beta版发布与使用说明
我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院 拒 ...
- Oracle 中 union 和union all 的简单使用说明
1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...
- 如何将github上的 lib fork之后通过podfile 改变更新源到自己fork的地址
解决办法: http://stackoverflow.com/questions/20936885/cocoapods-and-github-forks 就是fork完后,提交更改到自己的github ...
- Map工具系列-02-数据迁移工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
随机推荐
- Java泛型
什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个 ...
- openresty 前端开发入门一
OpenResty ™ 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态 ...
- hadoop 2.7.2 + zookeeper 高可用集群部署
一.环境说明 虚拟机:vmware 11 操作系统:Ubuntu 16.04 Hadoop版本:2.7.2 Zookeeper版本:3.4.9 二.节点部署说明 三.Hosts增加配置 sudo ge ...
- hello,world!
我是马燕,在2017即将来临之际,我希望自己,在新的一年里,能开开心心,健健康康,家人平平安安! 我会努力工作,努力学习,离自己的理想越来越接近. 以后我会将我的所学所得写在这里,供未来的自己随时查看 ...
- sqlite索引的原理
引言 这篇文章,里面讲到对于一个41G大小.包含百万条记录的数据库进行查询操作,如果利用了索引,可以把操作耗时从37s降到0.2s. 那么什么是索引呢?利用索引可以加快数据库查询操作的原理是什么呢? ...
- mysql select日期格式
mysql表中datatime类型存储为2016-01-10,C#直接select 后,在datatable里面看,变成01/10/2016,需要还原回去,使用select DATE_FORMAT(列 ...
- 2015-12-01 SQL查询语句基础
1.查询全体学生的学号与姓名select sno,snamefrom student;3.查询全体学生的详细信息select *from student;4.查询全体学生的姓名及其出生年份select ...
- java Future 接口介绍
(转自:http://blog.csdn.net/yangyan19870319/article/details/6093481) 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java ...
- 轻量级C#编辑器RoslynPad
简介 RoslynPad是一个Apache 2.0协议开源的轻量级C#编辑器.支持自动完成,语法提示,修改建议等功能.很适合平时随手写个C#程序看看运行结果. 目前版本:0.10.1,无需保存也可以运 ...
- [原]导入OpenStreetMap海图数据,并在GeoServer上发布
转载请注明作者think8848和出处(http://think8848.cnblogs.com) 上回我们说到如何<在GeoServer中为OpenStreetMap数据设置OSM样式> ...