Podfile语法参考(译)
https://www.jianshu.com/p/8af475c4f717
2015.10.30 19:14* 字数 2496 阅读 35976评论 9喜欢 120
本文翻译自官方的Podfile Syntax Reference,也参考了之前一位博主的翻译,若翻译中有什么异议,欢迎留言指正。
Podfile
Podfile文件详细描述了一个或多个工程中targets的依赖关系。Podfile会默认创建一个隐式的目标链接到工程中用户的第一个target,名称为“default”。
一个Podfile可以非常简单:
pod 'AFNetworking', '~> 1.0'
也可以配置的复杂一点,如下:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '6.0'
inhibit_all_warnings!
xcodeproj 'MyProject'
pod 'ObjectiveSugar', '~> 0.5'
target :test do
pod 'OCMock', '~> 2.0.1'
end
post_install do |installer|
installer.pods_project.targets.each do |target|
puts #{target.name}
end
end
Dependencies(依赖项)
Podfile描述用于各个用户targe中的依赖项
- pod 是声明指定依赖的方法
- podspec 提供了一个简单的API用于创建podspecs
- target 允许你在工程中限定依赖项只在你指定的targets中生效
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.1.2并且 <0.2.0,并且始终是你指定范围内的最新版本
版本控制列表可用做更细的版本管理
想要了解更过关于版本控制策略的信息,可以参阅:
最后,你可以使用标示 :head来指定版本. 这就意味着工程会使用指定spec下该pod的最新可以用版本,不过会强制下载’bleeding edge’高风险版本(HEAD).务必小心使用,因为spec可能导致不兼容
pod 'Objection', :head
Build configurations(编译配置)
重要提示:
下面的语法是暂时的,将来很可能会更改,恕不另行通知。因为大家都在要求这个功能,所以我们发布了这个功能。你可以使用它,但你可能需要改变你的Podfile去使用未来版本的CocoaPods。不管怎么样,一个简单清晰的升级路径会提供给你
默认情况下, 依赖项会被安装在所有target的build configuration中。为了调试或者处于其他原因,依赖项只能在给定的build configuration中被启用
pod 'PonyDebugger', :configurations => ['Release', 'App Store']
当然你也可以弄白名单只指定一个build configurations
当然你也可以只指定一个build configurations
Subspecs
当你用一个名字装Pod的时候,它将安装所有定义在podspec里面的默认subspec
你可以这样指定:
pod 'QueryKit/Attribute'
也可以指定一个集合,像下面这样:
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
当然依赖也可以从其他源来获取
Using the files from a local path (使用本地文件)
如果你想用一个自己开发的本地的Pod,你可以用path选项
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
使用这个选项后,Cocoapods会将给定的文件夹认为是Pod的源,并且在工程中直接引用这些文件。这就意味着你编辑的部分可以保留在CocoaPods安装中
被引用的文件夹可以来自你喜爱的SCM,甚至当前仓库的一个git子模块
注意:Pod的podspec文件也应该被放在这个文件夹当中
From a podspec in the root of a library repository (引用仓库根目录的podspec)
有的时候你可能想要使用一个最新的开发版本,或者某一个二次开发版本。如果是这样,你可以在pod声明中特别标明
使用仓库中的master分支:
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
使用仓库的其他分支:
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
使用仓库的某个tag:
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
或者指定一个提交记录:
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'
需要特别注意的是,虽然这样将会满足任何在Pod中的依赖项通过其他Pods
但是podspec必须存在于仓库的根目录中,如果根目录中没有存在这个podspec文件,你将不得不使用下面提到的几种方式之一
From a podspec outside a spec repository, for a library without podspec(在一个不带podsepec的库里引用外部的spec)
如果一个podspec能够从外部的仓库源的获取,设想一下,也通过HTTP来获取podspec:
pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'
podspec
使用一个在给定podspec中声明的Pod的依赖项。如果如果没有参数被传递,那么在Podfile根部的第一个podspec会被使用。它将会被库所在的工程所使用
注意:这个不会包含哪些来自于podspec的资源而仅仅是来自于CocoaPods基础架构
例子:
podspec
podspec :name => 'QuickDialog'
podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'
target
在target块里面定义依赖项,如果对应的target不想添加依赖可以用:exclusive => true参数
Podfile文件将会创建一个全局的target名叫:default,default将会生成一个libPod.a文件。这个target将会与用户工程中的第一个target绑定起来如果没有指定特殊的link_with属性的话
例子:
定义一个target:
target :ZipApp do
pod 'SSZipArchive'
end
定义一个独有的target:
target :ZipApp do
pod 'SSZipArchive'
target :test, :exclusive => true do
pod 'JSONKit'
end
end
Target configuration (目标项配置)
这些设置用来控制cocoapods生成project
开头platform用来说明项目的工作平台,xcodeproj允许你指定需要链接的工程
platform
指定了静态库应该被编译在哪个平台
Cocoapods提供一个默认的部署目标如果你自己没有指定的话。目前的默认设置是iOS4.3、OS X10.6、tvOS 9.0、watchOS 2.0
如果部署目标要求iOS版本小于4.3,armv6架构将会被添加到ARCHS中
例子:
指定平台
platform :ios,
platform :ios
xcodeproj
指定包含引用pod库的target的Xcode工程会被链接到
如果没有显示的project被指定,那么会默认使用target的父target指定的project作为目标。如果如果没有任何一个target指定目标,那么就会使用和Podefile在同一目录下的project。同样也能够指定是否这些设置在release或者debug模式下生效。为了做到这一点,你必须指定一个名字和:release/:debuge关联起来
例子:
指定用户工程
# Look for target to link with in an Xcode project called
# `MyProject.xcodeproj`.
xcodeproj 'MyProject'
target :test do
# This Pods library links with a target in another project.
xcodeproj 'TestProject'
end
用自定义的编译配置
xcodeproj 'TestProject', 'Mac App Store' => :release, 'Test' => :debug
link_with
指定用户project里面中面的target链接到pod库
如果没有显示的指定target,那么就会链接到工程中的第一个target。所以如果你只需要链接第一个target,那么你不需要使用link_with
例子:
链接用户工程里面的一个target
link_with 'MyApp'
链接多个target
link_with 'MyApp', 'MyOtherApp'
inhibit_all_warnings!
屏蔽cocoapods库里面的所有警告
这个特性也能在子target里面定义
如果你想屏蔽某pod里面的警告也是可以的:
pod 'SSZipArchive', :inhibit_warnings => true
use_frameworks!
可以用framework的pod替代静态库的
这个特性可以通过定义子target来继承
Workspace(工作区)
这部分内容列举了配置workspace的选项和设置全局配置
workspace
指定应该包含所有projects的Xcode workspace.
如果没有显示指定workspace并且在Podfile所在目录只有一个project,那么project的名称会被用作于workspace的名称
例子:
指定一个workspace
workspace 'MyWorkspace'
generate_bridge_support!
指定后从所有已经安装的pod的头文件中会生成一个BridgeSupport元数据文档
一些脚本语言例如MacRuby,Nu,JSCocoa能够利用这些作为桥接类型、函数等等
set_arc_compatibility_flag!
指定后-fobjc-arc flag会被添加到OTHER_LD_FLAGS中
这个是用来解决编译non-ARC项目出现的一个的bug(详见 #142)。本来这些事情都是有Xcode4.3.2中的libtool自动完成的,不过看来现在flag -fobjc-arc 已经不被支持了。所以必须显示的指定使用这个方法
这个方法在CocoaPods 1.0中也许会被废弃
Sources
Podfile检索了所有sources(repos)中的specs
Sources是全局的,不存储在每个target定义里面
source
指定specs的位置
使用这个方法指定sources。sources的顺序是有关系的的。CocoaPods将使用pod第一次出现的source中的最高版本(后续的source中哪怕出现了更高的版本,也不予考虑)
cocoapods 官方source是隐式的需要的,一旦你指定了其他source 你就需要也把官方的指定上
例子:
指定Artsy库然后带上官方的
CocoaPods Master Repository
source 'https://github.com/artsy/Specs.git'
source 'https://github.com/CocoaPods/Specs.git'
Hooks(钩子)
Podfile提供了钩子用来在安装时被调用
钩子是全局的,不存储在每个target定义里面
plugin
指定的插件应该使用在安装过程中
使用此方法来指定一个插件,应该在安装过程中使用,同时,应传递给插件调用时的选项
例子:
指定用slather 和 cocoapods-keys插件
plugin 'cocoapods-keys', :keyring => 'Eidolon'
plugin 'slather'
pre_install
这个钩子允许你在Pods被下载后但是还未安装前对Pods做一些改变
它接受Pod::Installer作为唯一参数
例子:
定义pre_install钩子
pre_install do |installer|
# Do something fancy!
end
post_install
这个钩子允许你在生成的Xcode project写入硬盘或者其他你想执行的操作前做最后的改动
它接受Pod::Installer作为唯一参数
例子:
给所有target自定义编译配置
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported'
end
end
end
Podfile语法参考(译)的更多相关文章
- Podfile语法参考
中文翻译可以参考:Podfile语法参考(译) 英文官方文档:Podfile Syntax Reference
- [SQL]SQL语言入门级教材_SQL语法参考手册(三)
SQL 语法参考手册 DB2 提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化.既易学又易懂的语法. 此语言几乎是每个资料库系统都必须提供 ...
- [MSDN]关键字查询语言 (KQL) 语法参考
MSDN:http://msdn.microsoft.com/library/ee558911(v=office.15) 了解如何构造 SharePoint 2013 中的搜索功能 的 KQL 查询. ...
- 《VTL语法参考指南》中文版[转]
转自:http://blog.csdn.net/javafound/archive/2007/05/14/1607935.aspx <VTL语法参考指南>中文版 源文见 http://ve ...
- Destoon 模板存放规则 及 语法参考
模板存放规则及语法参考 一.模板存放及调用规则 模板存放于系统 template 目录,template 目录下的一个目录例如 template/default/ 即为一套模板 模板文件以 .htm ...
- Asp.net MVC razor语法参考
Razor语法的快捷参考http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx/ 只是copy下来便于查阅! I ...
- Cmd Markdown语法参考
https://www.zybuluo.com/mdeditor markdown语法说明 Markdown中公式的写法 $$P(X=k)=C_n^kp^k(1-p)^{n-k}$$ 欢迎使用 Cmd ...
- JIRA中的标记语言的语法参考
前言 看到网上有的文章说JIRA是使用Textile这门标记语言,有些语法和Wikitext和Markdown相像.JIRA在2017年进行了一次大更新,某些语法可能和以前不大一样,这里纪录一下常用的 ...
- [转]Markdown语法参考
<< 访问 Wow!Ubuntu NOTE: This is Simplelified Chinese Edition Document of Markdown Syntax. If yo ...
随机推荐
- EF Code First列名 'Discriminator' 无效的问题
新建了一个类继承EF Model类,运行报错 EF Code First列名 'Discriminator' 无效 EF会把项目中在DbContext中引用的所有的Model类及这些Model类对应 ...
- NodeJS二进制包安装和快捷键配置(适用于U盘版安装配置)
首先下载NodeJS二进制安装包:https://nodejs.org/dist/v10.15.3/node-v10.15.3-win-x64.zip 在D盘新建NodeJS文件夹,解压node-v1 ...
- chrome postman插件手动安装
注:转自 http://blog.csdn.net/u010246789/article/details/51481134 1.下载postman插件,可以自己到网上下载,也可以点击http://do ...
- Error response from daemon: rpc error: code = Unknown desc = name conflicts with
环境:centos7 执行一下命令时, docker service create --mode global --name logspout gliderlabs/logspout 出现以下报错: ...
- 基于BeautifulSoup库的HTML内容的查找
一.BeautifulSoup库提供了一个检索的参数: <>.find_all(name,attrs,recursive,string,**kwargs),它返回一个列表类型,存储查找的结 ...
- A. Many Equal Substrings(水题)
思路: 直接比较橘色框里的取第一次相等,即可. #include<iostream> #include<string> using namespace std; string ...
- 深入理解 Getter和Setter 对对象的属性监听
阅读目录 一:理解普通对象在声明时添加 get.set 二:Object.prototype.__defineGetter__ 和 Object.prototype.__defineSetter__ ...
- Sharding-JDBC实践(一)简介
转载自:ShardingSphere官网 目录 一.介绍 1. Sharding-JDBC 2. Sharding-Proxy 3. Sharding-Sidecar(TBD) 4. 混合架构 二.功 ...
- pycharm2018.3版 永久激活
pycharm2018.3版 永久激活 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10258257.html 激活前准备工作 ...
- 20175329 2018-2019-3《Java程序设计》第三周学习总结
学号 20175329 2018-2019-3<Java程序设计>第三周学习总结 教材学习内容总结 第四章 第四章主要介绍JAVA中的类与对象的划分,其中有很多复杂的概念以及知识点需要花很 ...