Podfile语法参考(翻译)

目录

  • Podfile
  • 根选项
  • 依赖关系
  • 目标配置
  • 工作空间
  • 钩子

Podfile

Podfile是描述一个或多个Xcode项目的目标的依赖关系的规范。

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

根选项

适用于整个Podfile的配置。

  • install! 声明安装过程中要使用的安装方法和选项。

install!

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

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

目前,唯一可接受的安装方法是cocoapods,因此您将始终使用该值作为第一个参数;但是将来的版本中可能会提供更多安装方法。

例如:

指定自定义CocoaPods安装选项

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

支持的Keys:

:clean

在安装过程中是否清洁pod源

清除将删除podspec指定的pod中未使用的任何文件以及项目支持的平台。

此选项默认为true。


:deduplicate_targets

是否对Pod进行重复数据删除

删除重复数据为pod添加后缀,以防止多个不同要求的Target中包含pod的情况。例如,名为MyPod子模块为SubA的容器包含在两个target中,如下所示:

target 'MyTargetA' do
  pod 'MyPod/SubA'
end

target 'MyTargetB' do
  pod 'MyPod'
end

将产生两个Pod:MyPod和MyPod-SubA

此选项默认为true。


:deterministic_uuids

创建Pods项目时是否生成确定性UUID

此选项默认为true。


:integrate_targets

是否将已安装的pod集成到用户项目中

如果设置为false,Pod将被下载并安装到Pods/目录中,但不会集成到您的项目中。

此选项默认为true。


:lock_pod_sources

是否锁定Pod的源文件。尝试修改文件内容时,Xcode会提示解锁文件

在安装过程中锁定pod的源文件会降低性能。这样会严重影响pod install项目的耗时,可以尝试将其设置为false

此选项默认为true。


:warn_for_multiple_pod_sources

当多个库包含名称和版本相同的Pod时,是否发出警告

此选项默认为true。


:share_schemes_for_development_pods

是否共享开发pods的Xcode方案(Schemes)。

开发pods的方案(Schemes)是自动创建的,但默认情况下不共享。

此选项默认为false。


:disable_input_output_paths

是否禁用CocoaPods脚本阶段的输入和输出路径(复制框架和复制资源)

此选项默认为false。


:preserve_pod_file_structure

是否保留所有Pod的文件结构,包括外部来源的Pod。

默认情况下,仅为开发Pod保留Pod源的文件结构。设置 :preserve_pod_file_structure为true将保留文件结构。

此选项默认为false。


:generate_multiple_pod_projects

是否为每个pod目标生成一个项目。而不是创建一个豆荚。xcodeproj,此选项将为嵌套在下方的pod目标生成一个项目Pods.xcodeproj。

此选项默认为false。


:incremental_installation

是否仅启用自上次安装以来已更改的项目及其关联工程。

此选项默认为false。


:skip_pods_project_generation

是否跳过生成Pods.xcodeproj,仅执行依赖关系的解析和下载。

此选项默认为false。


依赖关系

Podfile指定每个工程目标的依赖关系。

  • pod是声明特定依赖项的方法。
  • podspec提供了一个用于创建podspec的简单API。
  • target是如何将依赖关系范围限定到Xcode项目中的特定工程目标中。

pod

指定项目的依赖项。

依赖项需求由Pod的名称和版本需求列表(可选)定义。

当你开始一个项目的时候,你很可能会想使用一个Pod的最新版本。如果是这种情况,只需要省略版本号要求。

pod 'SSZipArchive'

在老项目中,您可能需要指定仓库的特定版本,在这种情况下,您可以指定该仓库的版本号。

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.2)。该运算符基于您在版本要求中指定的最后一个组件而工作。该示例等于与>= 0.1.2组合,<0.2.0并且将始终匹配符合您要求的最新已知版本。
  • ~> 0.1.3-beta.0Beta代表0.1.3的发行版本,除0.2以外的发行版本最高为0.2。用破折号(-)分隔的组件将不考虑版本要求。

可以指定特定的版本号,以便于进行更精细的控制。

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

  • 语义版本控制
  • RubyGems版本控制政策

构建配置

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

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

资源

默认情况下,在全局级别指定的源将按照指定依赖项匹配的顺序进行搜索。这种行为可以改变为一个特定的依赖,通过指定的依赖源:

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

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

子模块

通过其名称安装Pod时,它将安装podspec中定义的所有默认子模块。

您可以使用以下方法安装特定的子模块:

pod 'QueryKit/Attribute'

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

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

测试模块

可以通过:testspecs选项选择包含测试规范。默认情况下,不包括Pod的任何测试规格。

您可以使用以下命令指定要安装的测试规范名称的列表:

pod 'AFNetworking', :testspecs => ['UnitTests', 'SomeOtherTests']

提供的值:testspecs对应test_specPodspec中提供给 DSL属性的名称。

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

使用本地路径中的文件。

如果您想与其他项目一起开发Pod,可以使用该path选项。

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

使用此选项,CocoaPods将指定的文件夹作为为Pod的根目录,并在Pods项目中直接从那里链接文件。这意味着您所做的编辑将保留在CocoaPods安装中。

引用的文件夹可以是您最喜欢的SCM的签出,甚至可以是当前存储库的git子模块。

注意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'

要使用存储库的标签:

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对Pod的任何其他依赖。

podspec文件应该位于存储库的根目录中,如果这个库的存储库中还没有podspec文件,那么您必须使用下面小节中列出的方法之一。

来自spec存储库之外的podspec,用于没有podspec的库。

podspec可以从存储库之外的另一个源获得。例如,通过HTTP获得podspec:

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

podspec

只使用给定podspec文件中定义的Pod的依赖项。如果没有传递参数,则使用Podfile根目录中的第一个podspec。它的目的是供给库使用。注意:这并不包括来自podspec的源代码,只包括CocoaPods基础结构。

参数

选项Hash {Symbol=>String}

加载{Specification}的路径。如果未提供,则使用Podfile目录中的第一个podspec。

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

target

定义CocoaPods 目标在给定块中定义的作用域依赖项。目标应与Xcode目标相对应。默认情况下,目标包含块外部定义的依赖项,除非指示不要继承他们!。

参数

名称Symbol, String

target名称。

例子:

定义target

target 'ZipApp' do
  pod 'SSZipArchive'
end

定义从其父级访问SSZipArchive Pod的测试target

target 'ZipApp' do
  pod 'SSZipArchive'

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

定义目标通过其父目标将Pod应用于多个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

scpipt_phase

添加脚本阶段以与此目标集成。脚本阶段可用于执行任意脚本,该脚本可以在执行期间使用所有Xcode环境变量。一个目标可能包括多个脚本阶段,它们将按照声明的顺序添加。如果先前已添加脚本阶段,则将其有效地从目标中删除。

参数

选项Hash

此脚本阶段的选项。

例子:
script_phase :name => 'HelloWorldScript', :script => 'echo "Hello World"'
script_phase :name => 'HelloWorldScript', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby'

abstract_target

定义一个新的抽象目标,可用于方便目标依赖关系的继承。

参数

名称Symbol, String

目标名称。

例子:

定义抽象目标

abstract_target 'Networking' do
  pod 'AlamoFire'

  target 'Networking App 1'
  target 'Networking App 2'
end

定义将abstract_target包装Pod到多个目标

# Note: There are no targets called "Shows" in any of this workspace's Xcode projects
abstract_target 'Shows' do
  pod 'ShowsKit'

  # The target ShowsiOS has its own copy of ShowsKit (inherited) + ShowWebAuth (added here)
  target 'ShowsiOS' do
    pod 'ShowWebAuth'
  end

  # The target ShowsTV has its own copy of ShowsKit (inherited) + ShowTVAuth (added here)
  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end

  # Our tests target has its own copy of
  # our testing frameworks, and has access
  # to ShowsKit as well because it is
  # a child of the abstract target 'Shows'

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

abstract!

表示当前目标是抽象的,因此不会直接链接到Xcode target。

inherit!

设置当前target的继承模式。

参数

继承Symbol

要设置的继承模式。

可用模式: + :complete目标从父级继承所有行为。+ :none目标不会从父级继承任何行为。+ :search_paths目标仅继承父级的搜索路径。

例子:

仅继承搜索路径

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

目标配置

这些设置用于控制CocoaPods生成的项目。

首先,你只需说明你在哪个平台上工作。xcodeproj允许您特别声明要与哪个项目链接。

platform

指定应为其构建静态库的平台。

如果未指定CocoaPods,则提供默认部署目标。当前默认值适用4.3于iOS,10.6OS X,9.0tvOS和2.0watchOS。

如果部署目标需要它(iOS < 4.3),armv6 则将体系结构添加到中ARCHS。

参数

名称Symbol

平台名称可以是:osxfor OS X, :iosfor iOS, :tvosfor tvOS, or:watchosfor watchOS.

目标String, Version

可选部署。如果未提供,则将根据平台名称分配默认值。

例子:

指定平台

platform :ios, '4.0'
platform :ios

project

指定包含Pods库链接target的Xcode项目。


如果没有一个目标定义指定一个显式项目,并且与Podfile在同一目录中只有一个项目,则将使用该项目。

还可以指定是在发布版本还是在调试预设之后对自定义构建配置的构建设置进行建模。为此,您需要指定一个哈希,其中每个构建配置的名称都与:release:debug关联。

参数

路径String

要链接的项目的路径

build_configurations Hash{String => symbol}

一个哈希表,其中键是Xcode项目中构建配置的名称,而值是指定配置应该基于:debug还是:release配置的符号。如果没有为项目中的配置指定显式映射,则默认为:release

例子:

指定用户项目

# 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

xcodeproj

xcodeproj1.0中已弃用,并已重命名为project。对于1.0之前的版本,请使用xcodeproj。

link_with

link_with1.0中不推荐使用,abstract_target而是改为使用目标继承。

inhibit_all_warnings!

禁止来自CocoaPods库的所有警告。

此属性由子目标定义继承。

如果要禁止每个Pod发出警告,则可以使用以下语法:

pod 'SSZipArchive', :inhibit_warnings => true

此外,使用inhibit_all_warnings!属性时,可以使用以下方法将特定Pod排除在禁止之外:

pod 'SSZipArchive', :inhibit_warnings => false

use_modular_headers!

对所有CocoaPods静态库使用模块化头。

此属性由子目标定义继承。

如果要在每个Pod中使用模块化头,则可以使用以下语法:

pod 'SSZipArchive', :modular_headers => true

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

pod 'SSZipArchive', :modular_headers => false

use_frameworks!

对Pods使用框架而不是静态库。使用框架时,您也可以指定:linkage 要使用的样式,:static或者:dynamic。

此属性由子目标定义继承。

参数

选项Boolean, Hash

用于配置打包和链接样式的选项。

例子:
target 'MyApp' do
  use_frameworks!
  pod 'AFNetworking', '~> 1.0'
end
target 'MyApp' do
  use_frameworks! :linkage => :dynamic
  pod 'AFNetworking', '~> 1.0'
end

target 'ZipApp' do
  use_frameworks! :linkage => :static
  pod 'SSZipArchive'
end

supports_swift_versions

指定此目标定义支持的Swift版本。

注意,这些需求是从父级继承的,如果指定了这些需求,并且在根级没有指定这些需求,那么所有版本都被认为是受支持的。

参数

要求String, Version, Array, Array

此目标支持的需求集。

例子:
target 'MyApp' do
  supports_swift_versions '>= 3.0', '< 4.0'
  pod 'AFNetworking', '~> 1.0'
end
supports_swift_versions '>= 3.0', '< 4.0'

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

target 'ZipApp' do
  pod 'SSZipArchive'
end

工作空间

该模块列出了用于配置工作区域(Workspace)和设置全局设置的选项。

workspace

指定应包含所有项目的Xcode工作空间(Workspace)。

如果未指定详细的Xcode工作空间(Workspace),并且只有一个项目与Podfile位于同级目录中,那么该项目的名称将用作工作空间的名称。

参数

路径字符串

工作区的路径。

例子:

指定工作空间

workspace 'MyWorkspace'

generate_bridge_support!

指定一个BridgeSupport元数据文档应该从所有安装的Pods的头文件生成。

这适用于脚本语言,例如MacRubyNuJSCocoa,用它来桥接类型、功能等。

set_arc_compatibility_flag!

指定-fobjc-arc标志应添加到中OTHER_LD_FLAGS

这被用作非ARC项目编译器错误的解决方法(请参见#142)。这最初是自动完成的,但是从Xcode 4.3.2开始libtool似乎不再支持-fobjc arc标志。因此,现在必须使用此方法显式启用它。

在CocoaPods 1.0中可能不再支持这种方法。

Podfile从指定的仓库来源(存储库)列表中检索仓库。

仓库来源是全局的,不会根据每个target去存储它。

source

指定仓库的位置

使用此方法可以指定仓库的来源。来源的顺序是有影响的。CocoaPods将使用包括Pod在内的第一个来源的最高版本(不管其他仓库源是否有更高版本)。

官方的CocoaPods来源是隐式的。一旦指定了其他来源,则需要将其包括在内。

参数

String

仓库存储的URL。

例子:

指定首先使用Artsy存储库,然后再使用CocoaPods主存储库

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

钩子

Podfile提供了在安装过程中提供的hook。

hook是全局的,不按目标定义存储。

plugin

插件

指定安装期间应使用的插件。

使用此方法指定在安装期间应使用的插件,以及在调用插件时应传递给插件的选项。

参数

名称String

插件的名称。

选项Hash

调用其挂钩时应传递给插件的可选选项。

例子:

指定使用slathercocoapods-keys插件。

plugin 'cocoapods-keys', :keyring => 'Eidolon'
plugin 'slather'

pre_install

预安装

此hook可让您在Pod下载之后,在安装之前对Pod进行任何更改。

它接收Pod::Installer作为唯一参数。

例子:

在Podfile中定义预安装挂钩(pre_install)。

pre_install do |installer|
  # Do something fancy!
end

post_install

通过此hook,您可以在将生成的Xcode项目写入磁盘之前,对其进行最后的更改,或者执行其他可能要执行的任务。

它接收Pod::Installer作为唯一参数。

例子:

自定义所有targets的构建设置

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 Syntax Reference

你可能感兴趣的:(Podfile语法参考(翻译))