ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
[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)。