[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)。