规范和规范仓库

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 时,您应该确保执行以下操作

  1. 运行 pod spec lint。这用于验证规范。您的 podspec 应该通过,没有任何错误或警告。
  2. 如果你的库还没有遵循该方案,请更新你的库以使用 语义版本控制。从本质上讲,它让每个人的生活都变得更加轻松。
  3. 确保你提交的任何更新不会破坏以前的安装。
  4. 通过 在真实应用程序和/或你的演示应用程序的 Podfile 中包含本地 Podspec 来对你的 Podspec 执行手动测试,并确保它按预期工作。只有你负责确保你的 Podspec 正常为你的用户工作。

一般来说,这意味着

  • 无法删除规范。
  • 只有在不影响现有安装的情况下才能更新规范。
    • 可以更新已损坏的规范。
    • 可以添加子规范,因为它们默认情况下包含在父规范中。
  • 仅接受权威版本。

<如何更新现有 Pod?

  1. 如上所述创建你的 Podspec。
  2. 使用 pod trunk push NAME.podspec 将你的 Podspec 提交到 Trunk
    • 在推送到 Trunk 时,CocoaPods 会在后台执行 lintlint 错误将中止 push

<如何将我的库放到 CocoaDocs 上?

CocoaDocs 会在 GitHub 上的 CocoaPods/Specs 存储库中收到有关 CocoaPod 更新的通知。这会触发一个流程,该流程将通过 appledocobjective-c 项目生成文档,并为社区托管这些文档。此过程可能在你合并 Podspec 后大约 15 分钟后完成。如果你托管自己的文档,则可以使用 documentation_url