Podspec 语法参考 v1.14.3

规范

规范描述 Pod 库的版本。它包括从何处获取源代码、要使用哪些文件、要应用的构建设置以及其他常规元数据(如名称、版本和描述)的详细信息。


可以通过 pod spec create 命令生成一个存根规范文件。


规范 DSL 提供了极大的灵活性和动态性。此外,DSL 采用 约定优于配置,因此它可以非常简单

Pod::Spec.new do |spec|
  spec.name         = 'Reachability'
  spec.version      = '3.1.0'
  spec.license      = { :type => 'BSD' }
  spec.homepage     = 'https://github.com/tonymillion/Reachability'
  spec.authors      = { 'Tony Million' => '[email protected]' }
  spec.summary      = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
  spec.source       = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
  spec.source_files = 'Reachability.{h,m}'
  spec.framework    = 'SystemConfiguration'
end

或者它可以非常详细

Pod::Spec.new do |spec|
  spec.name          = 'Reachability'
  spec.version       = '3.1.0'
  spec.license       = { :type => 'BSD' }
  spec.homepage      = 'https://github.com/tonymillion/Reachability'
  spec.authors       = { 'Tony Million' => '[email protected]' }
  spec.summary       = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
  spec.source        = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
  spec.module_name   = 'Rich'
  spec.swift_version = '4.0'

  spec.ios.deployment_target  = '9.0'
  spec.osx.deployment_target  = '10.10'

  spec.source_files       = 'Reachability/common/*.swift'
  spec.ios.source_files   = 'Reachability/ios/*.swift', 'Reachability/extensions/*.swift'
  spec.osx.source_files   = 'Reachability/osx/*.swift'

  spec.framework      = 'SystemConfiguration'
  spec.ios.framework  = 'UIKit'
  spec.osx.framework  = 'AppKit'

  spec.dependency 'SomeOtherPod'
end

根规范

‘根’规范存储有关特定库版本的信息。

此组中的属性只能写入‘根’规范,不能写入‘子规范’。


此组中列出的属性是 podspec 所需的唯一属性。

其他组的属性可用于优化 podspec,并遵循配置优先于约定的方法。根规范可以直接或通过“子规范”描述这些属性。

name必需

Pod 的名称。

示例

spec.name = 'AFNetworking'

version必需

Pod 的版本。CocoaPods 遵循语义版本控制

示例

spec.version = '0.0.1'

swift_versions

规范支持的 Swift 版本。CocoaPods 将版本“4”视为“4.0”,而不是“4.1”或“4.2”。

注意 Swift 编译器主要接受主版本,有时也会接受次要版本。虽然 CocoaPods 允许指定次要版本或修订版本,但 Swift 编译器可能不会完全接受。

示例

spec.swift_versions = ['3.0']
spec.swift_versions = ['3.0', '4.0', '4.2']
spec.swift_version = '3.0'
spec.swift_version = '3.0', '4.0'

cocoapods_version

规范支持的 CocoaPods 版本。

示例

spec.cocoapods_version = '>= 0.36'

authors必需

库维护者的姓名和电子邮件地址,而不是 Podspec 维护者。

示例

spec.author = 'Darth Vader'
spec.authors = 'Darth Vader', 'Wookiee'
spec.authors = { 'Darth Vader' => '[email protected]',
                 'Wookiee'     => '[email protected]' }

social_media_url

Pod 的社交媒体联系方式的 URL,CocoaPods Web 服务可以使用此 URL。

例如,如果 URL 相对于 Twitter,则 @CocoaPodsFeed 通知将包括 Twitter 句柄(缩短说明)。这不一定必须是 Twitter URL,但只有这些 URL 会包含在 Twitter @CocoaPodsFeed 通知中。

示例

spec.social_media_url = 'https://twitter.com/cocoapods'
spec.social_media_url = 'https://groups.google.com/forum/#!forum/cocoapods'

license必需

Pod 的许可证。


除非源代码包含名为 LICENSE.*LICENCE.* 的文件,否则必须指定许可证文件的路径通常用于许可证类型的通知的完整文本。如果指定了许可证文件,则该文件要么没有文件扩展名,要么是 txtmdmarkdown 之一。

CocoaPods 使用此信息生成确认文件(markdown 和 plist),这些文件可用于最终应用程序的确认部分。

示例

spec.license = 'MIT'
spec.license = { :type => 'MIT', :file => 'MIT-LICENSE.txt' }
spec.license = { :type => 'MIT', :text => <<-LICENSE
                   Copyright 2012
                   Permission is granted to...
                 LICENSE
               }

支持的键

:type

:file

:text

homepage必需

Pod 主页的 URL。

示例

spec.homepage = 'http://www.example.com'

readme

此 pod 版本的 README markdown 文件的 URL。

示例

spec.readme = 'https://www.example.com/Pod-1.5-README.md'

changelog

此 pod 版本的 CHANGELOG markdown 文件的 URL。

示例

spec.changelog = 'https://www.example.com/Pod-1.5-CHANGELOG.md'

source必需

应从中检索库的位置。

示例

使用标签指定 Git 源。这是大多数 OSS Podspec 的工作方式。
spec.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git',
                :tag => spec.version.to_s }
使用以“v”为前缀的标签和子模块。
spec.source = { :git => 'https://github.com/typhoon-framework/Typhoon.git',
                :tag => "v#{spec.version}", :submodules => true }
使用带有标签的 Subversion。
spec.source = { :svn => 'http://svn.code.sf.net/p/polyclipping/code', :tag => '4.8.8' }
使用与规范语义版本字符串相同的修订版的 Mercurial。
spec.source = { :hg => 'https://bitbucket.org/dcutting/hyperbek', :revision => "#{s.version}" }
使用 HTTP 下载代码的压缩文件。它支持 zip、tgz、bz2、txz 和 tar。
spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip' }
使用 HTTP 下载文件,并使用哈希验证下载。它支持 sha1 和 sha256。
spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip',
                :sha1 => '7e21857fe11a511f472cfd7cfa2d979bd7ab7d96' }

支持的键

:git => :tag:branch:commit:submodules

:svn => :folder:tag:revision

:hg => :revision

:http => :flatten:type:sha256:sha1:headers

摘要必需

Pod 的简短描述(最多 140 个字符)。


描述应简短但内容丰富。它代表 Pod 的标语,无需指定 Pod 是库(它们始终是库)。

摘要应大写开头,并包含正确的标点符号。

示例

spec.summary = 'Computes the meaning of life.'

description

Pod 的描述比摘要更详细。

示例

spec.description = <<-DESC
                     Computes the meaning of life.
                     Features:
                     1. Is self aware
                     ...
                     42. Likes candies.
                   DESC

screenshots

展示 Pod 的图像的 URL 列表。适用于面向 UI 的库。CocoaPods 建议使用 gif 格式。

示例

spec.screenshot  = 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png'
spec.screenshots = [ 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png',
                     'http://dl.dropbox.com/u/378729/MBProgressHUD/2.png' ]

documentation_url

Pod 文档的可选 URL,CocoaPods Web 属性将遵守该 URL。留空将默认为库生成的 CocoaDocs URL。

示例

spec.documentation_url = 'http://www.example.com/docs.html'

prepare_command

Pod 下载后将执行的 bash 脚本。此命令可用于创建、删除和修改任何下载的文件,并且将在收集规范的其他文件属性的任何路径之前运行。

此命令在 Pod 清理之前和 Pod 项目创建之前执行。工作目录是 Pod 的根目录。

如果使用 :path 选项安装 pod,则不会执行此命令。

示例

spec.prepare_command = 'ruby build_files.rb'
spec.prepare_command = <<-CMD
                        sed -i 's/MyNameSpacedHeader/Header/g' ./**/*.h
                        sed -i 's/MyNameOtherSpacedHeader/OtherHeader/g' ./**/*.h
                   CMD

static_framework

表示,如果指定 use_frameworks!,则 pod 应包含静态库框架。

示例

spec.static_framework = true

deprecated

库是否已弃用。

示例

spec.deprecated = true

deprecated_in_favor_of

已弃用此 Pod 的 Pod 名称。

示例

spec.deprecated_in_favor_of = 'NewMoreAwesomePod'

平台

规范应指明库受支持的平台和相应的部署目标。

如果未在子规范中定义,则此组的属性将继承父级的值。

platform

支持此 Pod 的平台。留空表示此 Pod 在所有平台上均受支持。在支持多个平台时,您应该改用下面的 deployment_target。

示例

spec.platform = :osx, '10.8'
spec.platform = :ios
spec.platform = :osx

deployment_target

受支持平台的最低部署目标。

platform 属性相反,deployment_target 属性允许指定此 Pod 受支持的多个平台,并为每个平台指定不同的部署目标。

示例

spec.ios.deployment_target = '6.0'
spec.osx.deployment_target = '10.8'

构建设置

此组中列出了与用于构建库的构建环境配置相关的属性。

如果未在子规范中定义,则此组的属性将继承父级的值。

dependency

对其他 Pod 或“子规范”的任何依赖项。


依赖项可以指定版本要求。建议使用乐观版本指示符 ~>,因为它在不过于严格的情况下对版本提供了良好的控制。例如,~> 1.0.1 等效于 >= 1.0.1< 1.1 的组合。类似地,~> 1.0 将匹配 1.01.0.11.1,但不会升级到 2.0

具有过度严格依赖项的 Pod 会限制它们与其他 Pod 的兼容性。

示例

spec.dependency 'AFNetworking', '~> 1.0'
spec.dependency 'AFNetworking', '~> 1.0', :configurations => ['Debug']
spec.dependency 'AFNetworking', '~> 1.0', :configurations => :debug
spec.dependency 'RestKit/CoreData', '~> 0.20.0'
spec.ios.dependency 'MBProgressHUD', '~> 0.5'

info_plist多平台

要添加到生成的 Info.plist 中的关键值对。

这些值将与 CocoaPods 生成的默认值合并,覆盖任何重复项。

对于库规范,这些值将合并到使用框架集成的库的生成的 Info.plist 中。它对静态库无效。

不支持子规范(除了应用程序和测试规范)。

对于应用程序规范,这些值将合并到应用程序主机的 Info.plist 中。

对于测试规范,这些值将合并到测试包的 Info.plist 中。

示例

spec.info_plist = {
  'CFBundleIdentifier' => 'com.myorg.MyLib',
  'MY_VAR' => 'SOME_VALUE'
}

requires_arc多平台

requires_arc 允许您指定哪些 source_files 使用 ARC。这可以是支持 ARC 的文件,也可以是 true,以指示所有 source_files 都使用 ARC。

不使用 ARC 的文件将具有 -fno-objc-arc 编译器标志。

此属性的默认值为 true

默认为

spec.requires_arc = true

示例

spec.requires_arc = false
spec.requires_arc = 'Classes/Arc'
spec.requires_arc = ['Classes/*ARC.m', 'Classes/ARC.mm']

frameworks多平台

用户目标需要链接到的系统框架列表。

示例

spec.ios.framework = 'CFNetwork'
spec.frameworks = 'QuartzCore', 'CoreData'

weak_frameworks多平台

用户目标需要链接到的框架列表。

示例

spec.weak_framework = 'Twitter'
spec.weak_frameworks = 'Twitter', 'SafariServices'

libraries多平台

用户目标(应用程序)需要链接到的系统库列表。

示例

spec.ios.library = 'xml2'
spec.libraries = 'xml2', 'z'

compiler_flags多平台

应传递给编译器的标志列表。

示例

spec.compiler_flags = '-DOS_OBJECT_USE_OBJC=0', '-Wno-format'

pod_target_xcconfig多平台

要添加到最终私有 Pod 目标 xcconfig 文件的任何标志。

示例

spec.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' }

user_target_xcconfig多平台

指定要添加到最终聚合目标 xcconfig 文件的标志,该文件会传播到未覆盖并继承构建设置的集成用户目标。


不推荐使用此属性,因为 Pod 不应污染用户项目的构建设置,这可能会导致冲突。

对于采用多个值的构建设置,将合并多个定义。对于自定义构建设置和仅采用一个值的构建设置,系统会针对冲突的定义向用户发出警告。

通常,如果在用户目标中导入 Pod 时需要 clang 编译器标志或预编译器宏定义,则会将它们放在此处。请注意,这不仅会影响 Pod 公共界面的编译器视图,还会影响与 Pod 一起集成的所有其他 Pod。您应始终优先选择 pod_target_xcconfig,它可以包含相同的设置,但仅在编译 Pod 目标时影响工具链。

示例

spec.user_target_xcconfig = { 'MY_SUBSPEC' => 'YES' }

prefix_header_contents多平台

要注入到 Pod 项目的前缀头中的任何内容。


不推荐使用此属性,因为 Pod 不应污染其他库或用户项目的前缀头。

示例

spec.prefix_header_contents = '#import <UIKit/UIKit.h>'
spec.prefix_header_contents = '#import <UIKit/UIKit.h>', '#import <Foundation/Foundation.h>'

prefix_header_file多平台

要注入到 Pod 项目的前缀头中的前缀头文件路径。false 表示不应生成默认 CocoaPods 前缀头。true 是默认值,表示应生成默认 CocoaPods 前缀头。


不推荐使用文件路径选项,因为 Pod 不应污染其他库或用户项目的前缀头。

示例

spec.prefix_header_file = 'iphone/include/prefix.pch'
spec.prefix_header_file = false

module_name

将用于此规范生成框架/clang模块的名称,而不是默认值(如果设置了header_dir,否则为规范名称)。

示例

spec.module_name = 'Three20'

header_dir多平台

存储头文件目录,这样它们就不会中断包含。

示例

spec.header_dir = 'Three20Core'

header_mappings_dir多平台

保留头文件文件夹结构的目录。如果没有提供,则头文件将被展平。

示例

spec.header_mappings_dir = 'src/include'

script_phases多平台

此属性允许定义一个脚本阶段,作为 Pod 编译的一部分执行。与准备命令不同,脚本阶段作为 xcodebuild 的一部分执行,它们还可以利用编译期间设置的所有环境变量。

一个 Pod 可以提供多个脚本阶段来执行,它们将按照声明的顺序添加,并在考虑其执行位置设置后添加。

注意为了提供所有脚本阶段内容的可视性和意识,如果您的 pod 包含任何脚本阶段,则在安装 pod 时会向用户显示警告。

示例

spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"' }
spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"', :execution_position => :before_compile }
spec.script_phase = { :name => 'Hello World', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby' }
spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"',
  :input_files => ['/path/to/input_file.txt'], :output_files => ['/path/to/output_file.txt']
}
spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"',
  :input_file_lists => ['/path/to/input_files.xcfilelist'], :output_file_lists => ['/path/to/output_files.xcfilelist']
}
spec.script_phases = [
    { :name => 'Hello World', :script => 'echo "Hello World"' },
    { :name => 'Hello Ruby World', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby' },
  ]

文件模式

Podspec 应位于存储库的根目录中,并且文件路径也应相对于存储库的根目录指定。文件模式不支持遍历父目录(..)。文件模式可能包含以下通配符模式


模式:*

匹配任何文件。可以通过 glob 中的其他值进行限制。

  • * 将匹配所有文件
  • c* 将匹配所有以 c 开头的文件
  • *c 将匹配所有以 c 结尾的文件
  • *c* 将匹配所有包含 c 的文件(包括开头或结尾)

相当于正则表达式中的 /.*/x

注意这将不匹配类 Unix 隐藏文件(点文件)。为了将它们包括在匹配结果中,您必须使用类似 {*,.*} 的内容。


模式:**

递归匹配目录。


模式:?

匹配任何一个字符。相当于正则表达式中的 /.{1}/


模式:[set]

匹配 set 中的任何一个字符。

与正则表达式中的字符集的行为完全相同,包括集否定([^a-z])。


模式:{p,q}

匹配文字 p 或文字 q

匹配文字的长度可能超过一个字符。可以指定两个以上的文字。

相当于正则表达式中的模式交替。


模式:\

转义下一个元字符。


示例

考虑在 JSONKit 的源根目录中对这些进行评估。

"JSONKit.?"    #=> ["JSONKit.h", "JSONKit.m"]
"*.[a-z][a-z]" #=> ["CHANGELOG.md", "README.md"]
"*.[^m]*"      #=> ["JSONKit.h"]
"*.{h,m}"      #=> ["JSONKit.h", "JSONKit.m"]
"*"            #=> ["CHANGELOG.md", "JSONKit.h", "JSONKit.m", "README.md"]

source_files多平台

Pod 的源文件。

示例

spec.source_files = 'Classes/**/*.{h,m}'
spec.source_files = 'Classes/**/*.{h,m}', 'More_Classes/**/*.{h,m}'

public_header_files多平台

应作为公共头文件使用的文件模式列表。


这些模式与源文件进行匹配,以包含将向用户项目公开并从中生成文档的头文件。构建库时,这些头文件将显示在构建目录中。如果未指定公共头文件,则 source_files 中的所有头文件都将被视为公共头文件。

示例

spec.public_header_files = 'Headers/Public/*.h'

project_header_files多平台

应用于标记项目头文件的的文件模式列表。


这些模式与公共头文件(或在未指定公共头文件时与所有头文件)进行匹配,以排除不应向用户项目公开且不应用于生成文档的头文件。构建库时,这些头文件不会显示在构建目录中。

示例

spec.project_header_files = 'Headers/Project/*.h'

private_header_files多平台

应用于标记私有头文件的的文件模式列表。


这些模式与公共头文件(或在未指定公共头文件时与所有头文件)进行匹配,以排除不应向用户项目公开且不应用于生成文档的头文件。构建库时,这些头文件将显示在构建目录中。

未列为公共、项目或私有的头文件将被视为私有,但此外,它们根本不会显示在构建目录中。

示例

spec.private_header_files = 'Headers/Private/*.h'

vendored_frameworks多平台

与 Pod 一起提供的框架包的路径。同时支持 .framework.xcframework 包。这些框架将向 Pod 和 Pod 的使用者提供。

示例

spec.ios.vendored_frameworks = 'Frameworks/MyFramework.framework'
spec.vendored_frameworks = 'MyFramework.framework', 'TheirFramework.xcframework'

vendored_libraries多平台

与 Pod 一起提供的库的路径。这些库将向 Pod 和 Pod 的使用者提供。

示例

spec.ios.vendored_library = 'Libraries/libProj4.a'
spec.vendored_libraries = 'libProj4.a', 'libJavaScriptCore.a'

on_demand_resources多平台

应复制到目标包中的按需资源的哈希值。此处指定资源将自动成为此 Pod 集成的目标的资源构建阶段的一部分。

如果未指定类别,则 :download_on_demand 将用作默认值。

由 Pod 指定的标签始终由 CocoaPods 管理。如果重命名、更改或删除标签,则 CocoaPods 将更新 Pod 已集成到的目标中的标签。强烈建议不要为您的项目共享与项目使用的 Pod 相同的标签。

示例

s.on_demand_resources = {
  'Tag1' => 'file1.png'
}
s.on_demand_resources = {
  'Tag1' => ['file1.png', 'file2.png']
}
s.on_demand_resources = {
  'Tag1' => { :paths => ['file1.png', 'file2.png'], :category => :download_on_demand }
}
s.on_demand_resources = {
  'Tag1' => { :paths => ['file1.png', 'file2.png'], :category => :initial_install }
}

resource_bundles多平台

此属性允许定义应为 Pod 构建的资源包的名称和文件。它们指定为一个哈希,其中键表示包的名称,值表示它们应包含的文件模式。

对于将 Pod 构建为静态库,我们强烈建议库开发人员采用资源包,因为使用 resources 属性可能会发生名称冲突。

包的名称至少应包含 Pod 的名称,以最大程度地减少名称冲突的可能性。

要为每个平台提供不同的资源,必须使用命名空间包。

示例

spec.ios.resource_bundle = { 'MapBox' => 'MapView/Map/Resources/*.png' }
spec.resource_bundles = {
    'MapBox' => ['MapView/Map/Resources/*.png'],
    'MapBoxOtherResources' => ['MapView/Map/OtherResources/*.png']
  }

resources多平台

应复制到目标包中的资源列表。

对于将 Pod 构建为静态库,我们强烈建议库开发人员采用 资源包,因为使用 resources 属性可能会发生名称冲突。此外,使用此属性指定的资源将直接复制到客户端目标,因此它们不会被 Xcode 优化。

示例

spec.resource = 'Resources/HockeySDK.bundle'
spec.resources = ['Images/*.png', 'Sounds/*']

exclude_files多平台

应从其他文件模式中排除的文件模式列表。

示例

spec.ios.exclude_files = 'Classes/osx'
spec.exclude_files = 'Classes/**/unused.{h,m}'

preserve_paths多平台

下载后不应删除的任何文件。


默认情况下,CocoaPods 会删除与任何其他文件模式不匹配的所有文件。

示例

spec.preserve_path = 'IMPORTANT.txt'
spec.preserve_paths = 'Frameworks/*.framework'

module_map多平台

当此 Pod 集成到框架中时应使用的模块映射文件。

false 指示不应生成默认 CocoaPods modulemap 文件。

true 是默认值,指示应生成默认 CocoaPods modulemap 文件。


默认情况下,CocoaPods 会根据规范中的公共头文件创建一个模块映射文件。

示例

spec.module_map = 'source/module.modulemap'
spec.module_map = false

子规范

库可以指定对另一个库、另一个库的子规范或其自身的子规范的依赖关系。

subspec

表示库模块的规范。


子规范参与双重层次结构。

一方面,规范会自动继承其所有子“子规范”作为依赖项(除非指定了默认子规范)。

另一方面,“子规范”继承父级的属性值,因此可以在祖先中指定属性的通用值。

虽然听起来很复杂,但实际上这意味着子规范通常会按照您的预期进行操作

pod 'ShareKit', '2.0'

安装 ShareKit 及其所有共享器,如 ShareKit/EvernoteShareKit/Facebook 等,因为它们被定义为子规范。

pod 'ShareKit/Twitter',  '2.0'
pod 'ShareKit/Pinboard', '2.0'

仅使用 ShareKit/TwitterShareKit/Pinboard 的源文件安装 ShareKit。请注意,在这种情况下,要编译的“子规范”需要源文件、依赖项以及根规范定义的其他属性。CocoaPods 足够智能,可以处理因重复属性而产生的任何问题。

示例

具有不同源文件的子规范。
subspec 'Twitter' do |sp|
  sp.source_files = 'Classes/Twitter'
end

subspec 'Pinboard' do |sp|
  sp.source_files = 'Classes/Pinboard'
end
子规范引用对其他子规范的依赖关系。
Pod::Spec.new do |s|
  s.name = 'RestKit'

  s.subspec 'Core' do |cs|
    cs.dependency 'RestKit/ObjectMapping'
    cs.dependency 'RestKit/Network'
    cs.dependency 'RestKit/CoreData'
  end

  s.subspec 'ObjectMapping' do |os|
  end
end
嵌套子规范。
Pod::Spec.new do |s|
  s.name = 'Root'

  s.subspec 'Level_1' do |sp|
    sp.subspec 'Level_2' do |ssp|
    end
  end
end

requires_app_host多平台

测试规范是否需要应用主机来运行测试。这仅适用于测试规范。

示例

test_spec.requires_app_host = true

app_host_name多平台

必要时用作应用主机的应用规范。

scheme多平台

指定要用于此规范的方案配置。


示例

spec.scheme = { :launch_arguments => ['Arg1'] }
spec.scheme = { :launch_arguments => ['Arg1', 'Arg2'], :environment_variables => { 'Key1' => 'Val1'} }

支持的键

:launch_arguments

:environment_variables

:code_coverage

:parallelizable

:build_configurations

test_spec

表示库的测试规范。您可以在此处放置 podspec 的所有测试以及测试依赖项。


示例

Pod::Spec.new do |spec|
  spec.name = 'NSAttributedString+CCLFormat'

  spec.test_spec do |test_spec|
    test_spec.source_files = 'NSAttributedString+CCLFormatTests.m'
    test_spec.dependency 'Expecta'
  end
end

app_spec

代表库的应用规范。您可以在此处放置所有应用源文件,以供您的 podspec 以及应用依赖项使用。


示例

Pod::Spec.new do |spec|
  spec.name = 'NSAttributedString+CCLFormat'

  spec.app_spec do |app_spec|
    app_spec.source_files = 'NSAttributedString+CCLFormat.m'
    app_spec.dependency 'AFNetworking'
  end
end

default_subspecs

应作为首选依赖项使用的子规范名称数组。如果未指定,规范将要求其所有子规范作为依赖项。

您可以使用值 :none 来指定编译此 pod 时不需要任何子规范,且所有子规范都是可选的。


Pod 应默认提供完整的库。用户可以在了解其要求后微调其依赖项,并排除不需要的子规范。因此,很少需要此属性。其目的是在提供替代不兼容实现的“子规范”时选择默认值,或排除很少需要的模块(尤其是当它们触发对其他库的依赖项时)。

示例

spec.default_subspec = 'Core'
spec.default_subspecs = 'Core', 'UI'
spec.default_subspecs = :none

多平台支持

规范可以存储仅特定于一个平台的值。


例如,您可能希望存储仅特定于 iOS 项目的资源。

spec.resources = 'Resources/**/*.png'
spec.ios.resources = 'Resources_ios/**/*.png'

ios

提供对指定 iOS 属性的支持。

示例

spec.ios.source_files = 'Classes/ios/**/*.{h,m}'

osx

提供对指定 OS X 属性的支持。

示例

spec.osx.source_files = 'Classes/osx/**/*.{h,m}'

macos

提供对指定 OS X 属性的支持。

示例

spec.osx.source_files = 'Classes/osx/**/*.{h,m}'

tvos

提供对指定 tvOS 属性的支持。

示例

spec.tvos.source_files = 'Classes/tvos/**/*.{h,m}'

visionos

提供对指定 visionOS 属性的支持。

示例

spec.visionos.source_files = 'Classes/visionos/**/*.{h,m}'

watchos

提供对指定 watchOS 属性的支持。

示例

spec.watchos.source_files = 'Classes/watchos/**/*.{h,m}'