Podspec 或规范描述 Pod 库的版本。一个 Pod 在一段时间内将会有多个规范。它包括有关从何处获取源、使用哪些文件、要应用的构建设置以及其他常规元数据(如其名称、版本和说明)的详细信息。
您可以手动创建一个,或运行 pod spec create
来生成一个存根。Podspec 是 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' => '[email protected]' }
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
规范仓库 是 GitHub 上包含所有可用 pod 列表的仓库。每个库都有一个单独的文件夹,其中包含该 pod 的可用版本的子文件夹。
有关规范仓库文件结构的说明,请参阅私有 Pod部分。
<规范示例
一个简单的规范。
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
子规范是一种分割 Podspec 功能的方法,允许人们安装您的库的子集。
使用上述示例,使用 pod 'ShareKit'
的 Podfile 会导致包含整个库,而如果您只对特定于 Facebook 的部分感兴趣,则可以使用 pod 'ShareKit/Facebook'
。
<在子模块中带有子规范的规范
如果您在仓库中有一些子模块,则需要将 s.source
哈希的 :submodules
键设置为 true。然后,您将能够像上面一样指定子规范。
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
<规范仓库如何工作?
为了确保高质量、可靠的 Pod 集合,规范仓库对添加的 podspec 非常严格。此仓库的主要目的之一是保证现有 CocoaPods 安装的完整性。
在准备提交 podspec 时,您应该确保执行以下操作
- 运行
pod spec lint
。这用于验证规范。您的 podspec 应该通过,没有任何错误或警告。 - 如果你的库还没有遵循该方案,请更新你的库以使用 语义版本控制。从本质上讲,它让每个人的生活都变得更加轻松。
- 确保你提交的任何更新不会破坏以前的安装。
- 通过 在真实应用程序和/或你的演示应用程序的 Podfile 中包含本地 Podspec 来对你的 Podspec 执行手动测试,并确保它按预期工作。只有你负责确保你的 Podspec 正常为你的用户工作。
一般来说,这意味着
- 无法删除规范。
- 只有在不影响现有安装的情况下才能更新规范。
- 可以更新已损坏的规范。
- 可以添加子规范,因为它们默认情况下包含在父规范中。
- 仅接受权威版本。
<如何更新现有 Pod?
- 如上所述创建你的 Podspec。
- 使用
pod trunk push NAME.podspec
将你的 Podspec 提交到 Trunk- 在推送到 Trunk 时,CocoaPods 会在后台执行
lint
。lint
错误将中止push
。
- 在推送到 Trunk 时,CocoaPods 会在后台执行
<如何将我的库放到 CocoaDocs 上?
CocoaDocs 会在 GitHub 上的 CocoaPods/Specs 存储库中收到有关 CocoaPod 更新的通知。这会触发一个流程,该流程将通过 appledoc 为objective-c 项目生成文档,并为社区托管这些文档。此过程可能在你合并 Podspec 后大约 15 分钟后完成。如果你托管自己的文档,则可以使用 documentation_url。