Podfile语法参考(译)【转】

本文翻译自官方的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:testdopod'OCMock','~> 2.0.1'endpost_installdo|installer|installer.pods_project.targets.eachdo|target|puts#{target.name}endend

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,并且始终是你指定范围内的最新版本

版本控制列表可用做更细的版本管理

想要了解更过关于版本控制策略的信息,可以参阅:

Semantic Versioning

RubyGems Versioning Policies

最后,你可以使用标示: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:ZipAppdopod'SSZipArchive'end

定义一个独有的target:

target:ZipAppdopod'SSZipArchive'target:test,:exclusive=>truedopod'JSONKit'endend

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:testdo# 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-arcflag会被添加到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 Repositorysource '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_installdo|installer|# Do something fancy!end

post_install

这个钩子允许你在生成的Xcode project写入硬盘或者其他你想执行的操作前做最后的改动

它接受Pod::Installer作为唯一参数

例子:

给所有target自定义编译配置

post_installdo|installer|installer.pods_project.targets.eachdo|target|target.build_configurations.eachdo|config|config.build_settings['GCC_ENABLE_OBJC_GC']='supported'endendend

187人点赞

iOS

作者:Tasselx

链接:https://www.jianshu.com/p/8af475c4f717

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容