Podfile语法参考(译)

Podfile

Podfile 是一个规范,描述了一个或多个 Xcode 工程中 targets 的依赖关系。

Podfile 可以非常简单:

target 'MyApp'
pod 'AFNetworking', '~> 1.0'

更复杂的 Podfile 示例可以是:

platform :ios, '9.0'
inhibit_all_warnings!

target 'MyApp' do
  pod 'ObjectiveSugar', '~> 0.5'

  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

Root Options

整体应用于 Podfile 的配置。

  • install! 声明安装期间要使用的安装方法和选项。

install!

指定 CocoaPods 安装此 Podfile 时要使用的安装方法和选项。

第一个参数表示要使用的安装方法;下一个参数表示安装选项。

目前唯一可接受的安装方法是 cocoapods ,所以你总是将这个值用作第一个参数;但是在将来的版本中可能会提供更多安装方法。

示例:

指定自定义 CocoaPods 安装选项

install! 'cocoapods',
         :deterministic_uuids => false,
         :integrate_targets => false

支持的keys:

以下选项默认值均为 true

:clean

:deduplicate_targets

:deterministic_uuids

:integrate_targets

:lock_pod_sources

:warn_for_multiple_pod_sources

以下选项默认值均为 false

:share_schemes_for_development_pods

:disable_input_output_paths

:preserve_pod_file_structure

Dependencies

Podfile 指定每个用户 target 的依赖关系。

  • pod 声明一个特定依赖项
  • podspec 提供一个简单的API来创建 podspecs
  • target 是您如何将依赖项定位到Xcode项目中的特定目标

pod

指定项目的依赖项。

一个依赖项通过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 低于或等于0.1的任何版本
  • ~> 0.1.2 高于或等于0.1.2且低于0.2之间的任何版本;此运算符基于您在版本要求中指定的最后一个组件工作。该示例等同于 >= 0.1.2并且 < 0.2.0 并且将始终匹配符合您要求的最新已知版本。

可以指定版本要求列表以进行更细粒度的控制。

有关版本控制策略的更多信息,请参阅:

Build configurations

默认情况下,依赖项安装在 target 的所有构建配置中。 有时出于调试目的或其他原因,仅只能在某个构建配置列表中启用它们。

pod 'PonyDebugger', :configurations => ['Debug', 'Beta']

或者,您可以指定将其包含在单个构建配置中

pod 'PonyDebugger', :configuration => 'Debug'

请注意,除非您已手动为它们指定构建配置,否则传递依赖项包含在所有配置中时。

Modular Headers

如果您想为每个 Pod 使用模块化标头,可以使用以下语法:

pod 'SSZipArchive', :modular_headers => true

另外,当你使用 use_modular_headers! 属性时,您可以使用以下方法从模块化标头中排除特定的Pod:

pod 'SSZipArchive', :modular_headers => false

Source

示例:

Specifying to first use the Artsy repository and then the CocoaPods Master Repository.

source 'https://github.com/artsy/Specs.git'
source 'https://github.com/CocoaPods/Specs.git'

默认按指定源全局搜索依赖项,也可以给特定依赖项指定源:

pod 'PonyDebugger', :source => 'https://github.com/CocoaPods/Specs.git'

在这种情况下,将仅搜索指定的源以查找依赖项,并忽略任何全局源。

Subspecs

通过名称安装Pod时,它将安装 podspec 中定义的所有默认 subspecs

您可以使用以下方法安装特定的 subspec

pod 'QueryKit/Attribute'

您可以指定要安装的子规范集合,如下所示:

pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']

依赖性也可以从外部来源获得。

使用本地路径文件

使用 path 选项

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

使用此选项,CocoaPods 将假定给定的文件夹是 Pod 的根目录,并将直接从 Pods 项目中的链接文件。这意味着您的编辑将持久保存到 CocoaPods 安装。

请注意,Pod文件的 podspec 应该位于该文件夹中。

来自远程仓库根目录中的podspec

有时您可能想要使用Pod的最新版本,或者是特定的版本。 如果是这种情况,您可以使用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'

或指定 commit

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'

podspec 文件应该位于存储仓库的根目录中,如果该仓库没有 podspec 文件,则必须使用以下方法之一指定。

From a podspec outside a spec repository, for a library without podspec:

pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'

podspec

示例:

podspec
podspec :name => 'QuickDialog'
podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'

target示例

Defining a target

target 'ZipApp' do
  pod 'SSZipArchive'
end

Defining a test target accessing SSZipArchive pod from its parent

target 'ZipApp' do
  pod 'SSZipArchive'

  target 'ZipAppTests' do
    inherit! :search_paths
    pod 'Nimble'
  end
end

Defining a target applies Pods to multiple targets via its parent target

target 'ShowsApp' do
  pod 'ShowsKit'

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

  # Has its own copy of Specta + Expecta
  # and has access to ShowsKit via the app
  # that the test target is bundled into

  target 'ShowsTests' do
    inherit! :search_paths
    pod 'Specta'
    pod 'Expecta'
  end
end

inherit!

设置当前目标的继承模式。

有效的模式:

  • :complete 继承父target所有行为

  • :none 不继续父target的行为

  • :search_paths 仅继承父target的搜索路径

示例:

target 'App' do
  target 'AppTests' do
    inherit! :search_paths
  end
end

Target configuration

platform

指定应为其构建静态库的平台,示例:

platform :ios, '4.0'
platform :ios

project

Specifies the Xcode project that contains the target that the Pods library should be linked with.

示例:

# This Target can be found in a Xcode project called `FastGPS`
target 'MyGPSApp' do
  project 'FastGPS'
  ...
end

# Same Podfile, multiple Xcodeprojects
target 'MyNotesApp' do
  project 'FastNotes'
  ...
end
project 'TestProject', 'Mac App Store' => :release, 'Test' => :debug

inhibit_all_warnings!

屏蔽来自 CocoaPods 库的所有警告。

您可以使用以下内容排除特定Pod被屏蔽:

pod 'SSZipArchive', :inhibit_warnings => false

use_frameworks!

Use frameworks instead of static libraries for Pods.

Workspace

This group list the options to configure workspace and to set global settings.

workspace

Specifies the Xcode workspace that should contain all the projects.

示例:

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

推荐阅读更多精彩内容

  • 本文翻译自官方的Podfile Syntax Reference,也参考了之前一位博主的翻译,若翻译中有什么异议,...
    Tasselx阅读 69,401评论 10 193
  • 项目组件化、平台化是技术公司的共同目标,越来越多的技术公司推崇使用pod管理第三方库以及私有组件,一方面使项目架构...
    swu_luo阅读 21,484评论 0 39
  • 经常使用CocoaPods来管理iOS项目中的第三方库,但是我们要使用CocoaPods来管理第三方库,前提是要写...
    qitianjin阅读 1,346评论 2 0
  • 转载自:http://blog.csdn.net/qitianjin/article/details/517738...
    YYT1992阅读 2,626评论 0 0
  • Ruby 安装 要安装cocospods 首先需要安装ruby,可以先安装xcode,再安装macport ,最后...
    山天大畜阅读 1,844评论 0 1