[TOC]
Podspec 或 Spec 描述了 Pod 库的一个版本。 一个 Pod 随着时间的推移会有很多 Specs 。 它包括有关应该从何处获取源的位置,要使用的文件,要应用的构建设置以及其他常规元数据(如其名称,版本和说明)的详细信息。
您可以手动创建一个,或运行 `pod spec create` 来生成存根。 Podspecs 是 ruby 文件。
这是一个示例:
~~~
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' => 'tonymillion@gmail.com' }
spec.summary = 'ARC and GCD Compatible Reachability Class for iOS and macOS.'
spec.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
spec.source_files = 'Reachability.h,m'
spec.framework = 'SystemConfiguration'
spec.requires_arc = true
end
~~~
[Specs Repo](https://github.com/CocoaPods/Specs) 是 GitHub 上的存储库,其中包含所有可用的窗格列表。 每个库都有一个单独的文件夹,其中包含该版本的可用版本的子文件夹。
有关 Spec repo 文件结构的说明,请参阅 [Private Pods](https://guides.cocoapods.org/making/private-cocoapods.html) 部分。
# 1. Specifications 示例
简单示例
~~~
Pod::Spec.new do |spec|
spec.name = 'libPusher'
spec.version = '1.3'
spec.license = 'MIT'
spec.summary = 'An Objective-C client for the Pusher.com service'
spec.homepage = 'https://github.com/lukeredpath/libPusher'
spec.author = 'Luke Redpath'
spec.source = { :git => 'git://github.com/lukeredpath/libPusher.git', :tag => 'v1.3' }
spec.source_files = 'Library/*'
spec.requires_arc = true
spec.dependency 'SocketRocket'
end
~~~
具有子集的示例
~~~
Pod::Spec.new do |spec|
spec.name = 'ShareKit'
spec.source_files = 'Classes/ShareKit/{Configuration,Core,Customize UI,UI}/**/*.{h,m,c}'
# ...
spec.subspec 'Evernote' do |evernote|
evernote.source_files = 'Classes/ShareKit/Sharers/Services/Evernote/**/*.{h,m}'
end
spec.subspec 'Facebook' do |facebook|
facebook.source_files = 'Classes/ShareKit/Sharers/Services/Facebook/**/*.{h,m}'
facebook.compiler_flags = '-Wno-incomplete-implementation -Wno-missing-prototypes'
facebook.dependency 'Facebook-iOS-SDK'
end
# ...
end
~~~
Subspecs 是一种分割 Podspec 功能的方式,允许人们安装库的一个子集。
通过上面的例子,使用 `pod 'ShareKit'` 的 Podfile包含整个库,而如果您只对 Facebook 特定部分感兴趣,则可以使用 `pod 'ShareKit / Facebook'`。
# 1.2 子模块内的子规范的规范
如果存储库中有一些子模块,则需要将 s.source 散列的子模块`:submodules`值设置为 true。 然后你就可以像上面那样指定 subspec。
~~~
Pod::Spec.new do |spec|
spec.name = 'SDLoginKit'
spec.source = {
:git => 'https://github.com/dulaccc/SDLoginKit.git',
:tag => '1.0.2',
:submodules => true
}
# ...
spec.subspec 'SDKit' do |sdkit|
sdkit.source_files = 'SDKit/**/*.{h,m}'
sdkit.resources = 'SDKit/**/Assets/*.png'
end
# ...
end
~~~
# 2. Specs Repo 如何工作
为了确保高质量、可靠的 pod 的收集,spec Repo 对添加的 podspecs 严格要求。这种仓库的主要目的之一是保证现有的 CocoaPods 安装的完整性。
当你准备一个提交的 pod 时,你应该确保做到以下几点:
1. 运行` pod spec lint`。 这用于验证 podspec 。 您的 podspec 应该没有任何错误或警告。
1. 如果它已经不遵循该方案,请使用[语义版本](http://semver.org/)更新您的库。 有关更多详细信息,请参阅 [wiki on cross dependency resolution](https://github.com/CocoaPods/Specs/wiki/Cross-dependencies-resolution-example) 。 从本质上讲,它使每个人的生活更轻松。
2. 确保您提交的任何更新不会破坏以前的安装。
3. 通过将本地 Podspec 包含在实际应用程序和/或演示应用程序的 Podfile 中,并确保其按预期工作,从而对您的 Podspec 执行手动测试。 您自己负责确保您的 Podspec 为您的用户正常运行。
一般而言,这意味着:
* Specs 不能删除。
* Specs 只有在不影响现有安装的情况下才能更新。
* 损坏的 Specs 可以更新。
* 可以添加子规格,因为它们默认包含在父 Specs 中。
* 只接受权威版本。
# 3. 如何更新现有的 Pod?
1. 如上所述创建您的 Podspec。
2. 运行 `pod spec lint` 来检查错误。
3. 使用 `pod trunk push NAME.podspec` 将您的 Podspec 提交到 Trunk
# 4. 如何在 CocoaDocs 上获取我的库?
[CocoaDocs](http://cocoadocs.org/) 在 CocoaPod 更新时接收来自 [GitHub上CocoaPods / Specs](https://github.com/CocoaPods/Specs) 仓库 的通知。 这触发了一个过程,该过程将通过 [appledoc](http://gentlebytes.com/appledoc/) 生成 Objective-C 项目的文档,并为社区提供主机。 Podspec 合并后大约需要15分钟。 如果您托管自己的文档,则可以使用 [documentation_url](https://guides.cocoapods.org/syntax/podspec.html#documentation_url)。