Specification
Specification 描述了 Pod 庫的版本信息架诞。它描述了源碼應(yīng)該從哪里獲取偶翅、需要使用哪些文件险绘、應(yīng)用編譯設(shè)置以及其他一般元數(shù)據(jù)細(xì)節(jié)展懈,如其名稱昏兆、版本和描述统倒。
可以通過 pod spec create
命令生成一個(gè)規(guī)范的 Specification 文件不跟。
Specification DSL 提供了極大的靈活性和動(dòng)態(tài)性甥温。此外刷袍,DSL 采用的是約定俗成的配置方式翩隧,因此可以非常簡單。
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 OS X.'
spec.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
spec.source_files = 'Reachability.{h,m}'
spec.framework = 'SystemConfiguration'
end
或者可以非常詳細(xì):
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 OS X.'
spec.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
spec.module_name = 'Rich'
spec.swift_version = '4.0'
spec.ios.deployment_target = '9.0'
spec.osx.deployment_target = '10.10'
spec.source_files = 'Reachability/common/*.swift'
spec.ios.source_files = 'Reachability/ios/*.swift', 'Reachability/extensions/*.swift'
spec.osx.source_files = 'Reachability/osx/*.swift'
spec.framework = 'SystemConfiguration'
spec.ios.framework = 'UIKit'
spec.osx.framework = 'AppKit'
spec.dependency 'SomeOtherPod'
end
Root specification
root 規(guī)范存儲(chǔ)了一個(gè)庫的特定版本的信息呻纹。
這組中的屬性只能寫在 'root' 規(guī)范上堆生,而不能寫在 'sub-specifications' 上专缠。
這組中列出的屬性是一個(gè) podspec 唯一需要的屬性。
其他組的屬性是為了完善 podspec 而提供的淑仆,遵循的是一種約定俗成的配置方式涝婉。一個(gè) root 規(guī)范可以直接或通過 "sub-specifications" 來描述這些屬性。
name
required
Pod 倉庫的名字
示例
spec.name = 'AFNetworking'
它也是你在命令行中執(zhí)行 pod search
命令搜索 Pod 庫時(shí)的關(guān)鍵詞蔗怠,這里一定要和 .podspec
的名稱一樣嘁圈,否則會(huì)報(bào)錯(cuò);
version
required
Pod 倉庫的版本號(hào)蟀淮,Cocoapods 遵循 語義化版本規(guī)范最住。
示例
spec.version = '0.0.1'
Pod 最新的版本。
swift_versions
支持的 Swift 版本怠惶。CocoaPods 將版本 "4" 視為 "4.0"涨缚,而不是 "4.1" 或 "4.2"。
注意:Swift 編譯器大多接受主要版本策治,有時(shí)也會(huì)接受次要版本脓魏。盡管 CocoaPods 允許指定次要版本或補(bǔ)丁版本,但 Swift 編譯器可能不會(huì)完全認(rèn)可它通惫。
示例
spec.swift_versions = ['3.0']
spec.swift_versions = ['3.0', '4.0', '4.2']
spec.swift_version = '3.0'
spec.swift_version = '3.0', '4.0'
cocoapods_version
支持的 CocoaPods 版本,比如某個(gè)屬性履腋,是某個(gè) CocoaPods 版本以上才有的珊燎,這個(gè)時(shí)候進(jìn)行依賴安裝,就需要指定版本遵湖。
示例
spec.cocoapods_version = '>= 0.36'
authors
required
庫(library )維護(hù)者的姓名和電子郵件地址悔政,而不是 Podspec 維護(hù)者的姓名和電子郵件地址。
示例
spec.author = 'Darth Vader'
spec.authors = 'Darth Vader', 'Wookiee'
spec.authors = { 'Darth Vader' => 'darthvader@darkside.com',
'Wookiee' => 'wookiee@aggrrttaaggrrt.com' }
social_media_url
Pod 維護(hù)者的社交賬號(hào) URL延旧,CocoaPods 的網(wǎng)絡(luò)服務(wù)可以使用這個(gè)谋国。
例如,@CocoaPodsFeed 通知將通過 Twitter 處理(縮短描述)迁沫,如果URL 是相對(duì)于 Twitter 的芦瘾。這不一定非要是 Twitter 的 URL,但只有 Twitter 賬號(hào)才可以接收 @CocoaPodsFeed 通知集畅。
示例
spec.social_media_url = 'https://twitter.com/cocoapods'
spec.social_media_url = 'https://groups.google.com/forum/#!forum/cocoapods'
license
required
Pod 倉庫的許可證
除非源文件中包含一個(gè)名為 LICENSE.*
或 LICENCE.*
的文件近弟,否則必須指定許可證文件的路徑或通常用于許可證類型通知的完整文本。如果指定了一個(gè)許可證文件牡整,它必須是沒有文件擴(kuò)展名的藐吮,或者是 txt溺拱、md 或 markdown 格式中的一種文件類型逃贝。
CocoaPods 使用這些信息來生成確認(rèn)文件(markdown和plist)谣辞,這些文件可用于最終應(yīng)用程序的確認(rèn)部分。
示例
spec.license = 'MIT'
spec.license = { :type => 'MIT', :file => 'MIT-LICENSE.txt' }
spec.license = { :type => 'MIT', :text => <<-LICENSE
Copyright 2012
Permission is granted to...
LICENSE
}
支持的 keys:
:type
:file
:text
homepage
required
Pod 主頁的 URL沐扳。
示例
spec.homepage = 'http://www.example.com'
source
required
庫被檢索的位置
示例
使用 tag 標(biāo)簽指定 Git 源泥从。這也是大多數(shù) OSS 播客的工作原理。
spec.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git',
:tag => spec.version.to_s }
使用前綴為 'v' 的 tag 標(biāo)簽和子模塊沪摄。
spec.source = { :git => 'https://github.com/typhoon-framework/Typhoon.git',
:tag => "v#{spec.version}", :submodules => true }
使用帶有 tag 標(biāo)簽的 Subversion躯嫉。
spec.source = { :svn => 'http://svn.code.sf.net/p/polyclipping/code', :tag => '4.8.8' }
使用與規(guī)范的語義版本字符串版本相同的 Mercurial。
spec.source = { :hg => 'https://bitbucket.org/dcutting/hyperbek', :revision => "#{s.version}" }
使用 HTTP 下載壓縮文件的代碼杨拐。它支持 zip祈餐、tgz、bz2哄陶、txz 和 tar帆阳。
spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip' }
使用 HTTP 下載文件,并使用哈希算法來驗(yàn)證下載屋吨。它支持 sha1 和 sha256蜒谤。
spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip',
:sha1 => '7e21857fe11a511f472cfd7cfa2d979bd7ab7d96' }
支持的 keys
:git => :tag, :branch, :commit, :submodules
:svn => :folder, :tag, :revision
:hg => :revision
:http => :flatten, :type, :sha256:, :sha1, :headers
summary
required
對(duì) Pod 的簡短描述(最多 140 個(gè)字符)。
描述應(yīng)該簡短而豐富至扰。它描述 Pod 的 tag 行信息鳍徽,沒有必要說明該 Pod 是一個(gè) library(他們總是這樣)。
摘要應(yīng)適當(dāng)大寫敢课,并包含正確的標(biāo)點(diǎn)符號(hào)阶祭。
示例
spec.summary = 'Computes the meaning of life.'
description
比摘要更詳細(xì)的 Pod 描述。
示例
spec.description = <<-DESC
Computes the meaning of life.
Features:
1. Is self aware
...
42. Likes candies.
DESC
screenshots
展示 Pod 的 URL 圖片列表直秆。適用于面向 UI 的庫胖翰。CocoaPods 推薦使用 gif 格式圖片。
示例
spec.screenshot = 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png'
spec.screenshots = [ 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png',
'http://dl.dropbox.com/u/378729/MBProgressHUD/2.png' ]
documentation_url
可選的 Pod 文檔的 URL切厘,它將被 CocoaPods 的 web 屬性所尊重萨咳。將其留空將默認(rèn)為 CocoaDocs 為您的庫生成的URL。
示例
spec.documentation_url = 'http://www.example.com/docs.html'
prepare_command
Pod 下載完成后執(zhí)行的 bash 腳本疫稿。該命令可用于創(chuàng)建培他、刪除和修改任何下載的文件,并將在收集規(guī)范的其他文件屬性的任何路徑之前運(yùn)行遗座。
該命令在 Pod 被清理和 Pods 項(xiàng)目創(chuàng)建之前執(zhí)行舀凛。工作目錄是 Pod 的根目錄。
如果 pod 安裝時(shí)有 :path
選項(xiàng)途蒋,則不會(huì)執(zhí)行此命令猛遍。
示例
spec.prepare_command = 'ruby build_files.rb'
spec.prepare_command = <<-CMD
sed -i 's/MyNameSpacedHeader/Header/g' ./**/*.h
sed -i 's/MyNameOtherSpacedHeader/OtherHeader/g' ./**/*.h
CMD
static_framework
表示,如果指定了 use_frameworks!
,pod 應(yīng)該包含一個(gè)靜態(tài)庫框架懊烤。
示例
spec.static_framework = true
deprecated
庫是否已被棄用梯醒。
示例
spec.deprecated = true
deprecated_in_favor_of
這個(gè)已經(jīng)被廢止的 Pod 庫被取而代之的名字。
示例
spec.deprecated_in_favor_of = 'NewMoreAwesomePod'
Platform
Specification 應(yīng)指明支持該庫的平臺(tái)和相應(yīng)的部署目標(biāo)腌紧。
如果沒有在 subspec 中定義茸习,該組的屬性將繼承上一層級(jí)的值。
platform
該 Pod 庫支持的平臺(tái)壁肋。留空表示該 Pod 庫在所有平臺(tái)上都支持号胚,當(dāng)支持多個(gè)平臺(tái)時(shí),應(yīng)該使用下面的 deployment_target
代替浸遗。
示例
spec.platform = :osx, '10.8'
spec.platform = :ios
spec.platform = :osx
development_target
支持平臺(tái)的最低部署目標(biāo)猫胁。
與 platform
屬性相反,deployment_target
屬性允許指定該 pod 支持的多個(gè)平臺(tái)——也就是說跛锌,你可以為每個(gè)平臺(tái)分別指定不同的部署目標(biāo)杜漠。
示例
spec.ios.deployment_target = '6.0'
spec.osx.deployment_target = '10.8'
Build settings
在這組中列出了與構(gòu)建環(huán)境配置有關(guān)的屬性,這些屬性應(yīng)該被用來構(gòu)建庫察净。
如果在 subspec 中沒有定義驾茴,則該組的屬性將繼承父屬性的值。
dependency
任何對(duì)其他 Pods 或?qū)?"sub-specification" 的依賴氢卡。
依賴關(guān)系可以指定版本锈至。建議使用樂觀的版本指示器 >,因?yàn)樗梢院芎玫乜刂瓢姹疽肭兀粫?huì)有太多限制峡捡。例如,> 1.0.1 相當(dāng)于 >= 1.0.1 與 < 1.1 相結(jié)合筑悴。同理们拙,~> 1.0可以匹配1.0、1.0.1阁吝、1.1砚婆,但不會(huì)升級(jí)到2.0。
過度限制依賴性的 Pods 會(huì)限制它們與其他 Pods 的兼容性突勇。
示例
spec.dependency 'AFNetworking', '~> 1.0'
spec.dependency 'AFNetworking', '~> 1.0', :configurations => ['Debug']
spec.dependency 'AFNetworking', '~> 1.0', :configurations => :debug
spec.dependency 'RestKit/CoreData', '~> 0.20.0'
spec.ios.dependency 'MBProgressHUD', '~> 0.5'
info_plist
要添加到生成的 Info.plist
中的鍵值對(duì)装盯。
這些值將與 CocoaPods 生成的默認(rèn)值合并,覆蓋任何重復(fù)的值甲馋。
對(duì)于庫規(guī)范埂奈,對(duì)于使用框架集成的庫,這些值將被合并到生成的 Info.plist 中定躏。對(duì)于靜態(tài)庫來說账磺,它不會(huì)有任何影響芹敌。
不支持子規(guī)格(除應(yīng)用程序和測試規(guī)格外)。
對(duì)于應(yīng)用程序規(guī)范垮抗,其值將被合并到應(yīng)用程序主機(jī)的 Info.plist 中氏捞。
對(duì)于測試規(guī)范,其值將被合并到測試?yán)壍?Info.plist 中借宵。
示例
spec.info_plist = {
'CFBundleIdentifier' => 'com.myorg.MyLib',
'MY_VAR' => 'SOME_VALUE'
}
requires_arc
requires_arc
允許你指定哪些 source_files 使用 ARC。這可以是支持 ARC 的文件矾削,也可以是 true
表示所有的源文件都使用 ARC壤玫。
不使用 ARC 的文件會(huì)有 -fno-objc-arc
編譯器標(biāo)志。
這個(gè)屬性的默認(rèn)值是 true
哼凯。
默認(rèn)值
spec.requires_arc = true
示例
spec.requires_arc = false
spec.requires_arc = 'Classes/Arc'
spec.requires_arc = ['Classes/*ARC.m', 'Classes/ARC.mm']
frameworks
用戶的 target 需要鏈接的系統(tǒng)框架列表欲间。
示例
spec.ios.framework = 'CFNetwork'
spec.frameworks = 'QuartzCore', 'CoreData'
weak_frameworks
用戶 target 需要 weakly (弱引用)鏈接的框架列表。
示例
spec.weak_framework = 'Twitter'
spec.weak_frameworks = 'Twitter', 'SafariServices'
libraries
用戶的 target(應(yīng)用程序)需要鏈接到的系統(tǒng)庫列表断部。
示例
spec.ios.library = 'xml2'
spec.libraries = 'xml2', 'z'
compiler_flags
傳遞給編譯器的標(biāo)志列表猎贴。
示例
spec.compiler_flags = '-DOS_OBJECT_USE_OBJC=0', '-Wno-format'
pod_target_xcconfig
要添加到最終私有 pod 目標(biāo) xcconfig 文件的任何標(biāo)志。
示例
spec.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' }
user_target_xcconfig
- 不推薦使用
指定要添加到最終聚合目標(biāo) xcconfig 文件的標(biāo)志蝴光,該文件將非覆蓋和繼承的構(gòu)建設(shè)置傳播到集成用戶目標(biāo)她渴。
不建議使用此屬性,因?yàn)镻ods不應(yīng)該污染用戶項(xiàng)目的構(gòu)建設(shè)置蔑祟,這會(huì)導(dǎo)致沖突趁耗。
取多個(gè)值的構(gòu)建設(shè)置的多個(gè)定義將被合并。用戶在自定義構(gòu)建設(shè)置和只取一個(gè)值的構(gòu)建設(shè)置的沖突定義上會(huì)被警告疆虚。
通常 clang 編譯器標(biāo)志或預(yù)編譯器宏定義如果在用戶目標(biāo)中導(dǎo)入 pod 時(shí)是需要的苛败,就會(huì)進(jìn)入這里。請(qǐng)注意径簿,這不僅會(huì)影響你的pod的公共界面的編譯器視圖罢屈,而且會(huì)影響所有其他集成的pod。你應(yīng)該始終選擇 pod_target_xcconfig
篇亭,它可以包含同樣的設(shè)置缠捌,但只影響編譯你的pod目標(biāo)時(shí)的工具鏈。
示例
spec.user_target_xcconfig = { 'MY_SUBSPEC' => 'YES' }
prefix_header_contents
- 不推薦使用
在 Pod 項(xiàng)目的 prefix header 中注入的任何內(nèi)容译蒂。
不建議使用這個(gè)屬性鄙币,因?yàn)?Pods 不應(yīng)該污染其他庫或用戶項(xiàng)目的 prefix header。
示例
spec.prefix_header_contents = '#import <UIKit/UIKit.h>'
spec.prefix_header_contents = '#import <UIKit/UIKit.h>', '#import <Foundation/Foundation.h>'
prefix_header_file
- 不推薦使用
注入到 Pod 項(xiàng)目的 prefix header 中的 prefix header 文件的路徑蹂随。
false
表示不生成默認(rèn)的 CocoaPods prefix header 文件十嘿,true
是默認(rèn)的,表示應(yīng)該生成默認(rèn)的 CocoaPods prefix header 文件岳锁。
不建議使用文件路徑選項(xiàng)绩衷,因?yàn)?Pods 不應(yīng)該污染其他庫或用戶項(xiàng)目的前綴頭。
示例
spec.prefix_header_file = 'iphone/include/prefix.pch'
spec.prefix_header_file = false
module_name
為本規(guī)范生成的 framework/clang 模塊使用的名稱,而不是默認(rèn)的名稱(如果設(shè)置了header_dir咳燕,則為規(guī)范名稱)勿决。
示例
spec.module_name = 'Three20'
header_dir
存儲(chǔ)頭文件的目錄,這樣就不會(huì)破壞 include招盲。
示例
spec.header_dir = 'Three20Core'
header_mappings_dir
保存頁眉文件的文件夾結(jié)構(gòu)的目錄低缩。如果沒有提供,頭文件將被扁平化曹货。
示例
spec.header_mappings_dir = 'src/include'
script_phases
這個(gè)屬性允許定義一個(gè)腳本階段咆繁,作為編譯Pod的一部分來執(zhí)行。與準(zhǔn)備命令不同的是顶籽,腳本階段作為 xcodebuild
的一部分執(zhí)行玩般,它們也可以利用編譯期間設(shè)置的所有環(huán)境變量。
一個(gè)Pod可以提供多個(gè)腳本階段來執(zhí)行礼饱,它們將按照聲明的順序添加坏为,并考慮到它們的執(zhí)行位置設(shè)置。
注釋 為了提供所有腳本階段內(nèi)容的可見性和意識(shí)镊绪,如果您的 pod 包含任何腳本階段匀伏,在安裝時(shí)將向用戶發(fā)出警告。
示例
spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"' }
spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"', :execution_position => :before_compile }
spec.script_phase = { :name => 'Hello World', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby' }
spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"',
:input_files => ['/path/to/input_file.txt'], :output_files => ['/path/to/output_file.txt']
}
spec.script_phase = { :name => 'Hello World', :script => 'echo "Hello World"',
:input_file_lists => ['/path/to/input_files.xcfilelist'], :output_file_lists => ['/path/to/output_files.xcfilelist']
}
spec.script_phases = [
{ :name => 'Hello World', :script => 'echo "Hello World"' },
{ :name => 'Hello Ruby World', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby' },
]
File patterns
Podspecs 應(yīng)該位于存儲(chǔ)庫的根目錄下蝴韭,文件的路徑也應(yīng)該相對(duì)于存儲(chǔ)庫的根目錄來指定帘撰。File patterns 不支持遍歷父目錄(...)。File patterns 可以包含以下通配符模式万皿。
Pattern: *
匹配任何文件摧找。可受 glob 中其他值的限制牢硅。
-
*
將匹配任何文件 -
c*
將匹配任何以c
開頭的文件 -
*c
將匹配任何以c
結(jié)尾的文件 -
*c*
將匹配所有含有c
的文件(包括開頭或結(jié)尾處)蹬耘。
相當(dāng)于 regexp 中的 /.*/x
。
注意减余,這不會(huì)匹配類似 Unix 的隱藏文件(dotfiles)综苔。為了將這些文件包含在匹配結(jié)果中,你必須使用類似 {*,.*}
的東西位岔。
Pattern: **
遞歸匹配目錄如筛。
Pattern: ?
匹配任意一個(gè)字符。相當(dāng)于 regexp 中的 /.{1}/
抒抬。
Pattern: [set]
匹配字符集中的任何一個(gè)字符杨刨。
與 Regexp 中的字符集完全相同,包括集合否定([^a-z]
)擦剑。
Pattern: {p,q}
匹配文字 p 或文字 q妖胀。
匹配的字元長度可以超過一個(gè)字符芥颈。可以指定兩個(gè)以上的字符赚抡。
相當(dāng)于 regexp 中的模式交替爬坑。
Pattern: \
忽略下一個(gè)元字符。
示例
考慮到這些要在 JSONKit 的源根中進(jìn)行評(píng)估涂臣。
"JSONKit.?" #=> ["JSONKit.h", "JSONKit.m"]
"*.[a-z][a-z]" #=> ["CHANGELOG.md", "README.md"]
"*.[^m]*" #=> ["JSONKit.h"]
"*.{h,m}" #=> ["JSONKit.h", "JSONKit.m"]
"*" #=> ["CHANGELOG.md", "JSONKit.h", "JSONKit.m", "README.md"]
source_files
需要包含的源文件盾计。
示例
spec.source_files = 'Classes/**/*.{h,m}'
spec.source_files = 'Classes/**/*.{h,m}', 'More_Classes/**/*.{h,m}'
public_header_files
用作公共頭的文件模式列表。
這些模式與源文件相匹配赁遗,以包含將暴露在用戶項(xiàng)目中的頭文件署辉,并從這些文件中生成文檔。當(dāng)庫被構(gòu)建時(shí)吼和,這些頭文件將出現(xiàn)在構(gòu)建目錄中涨薪。如果沒有指定公共頭文件骑素,那么 source_files
中的所有頭文件都被認(rèn)為是公共的炫乓。
示例
spec.public_header_files = 'Headers/Public/*.h'
private_header_files
用來標(biāo)記私有文件模式列表。
這些模式與公共頭文件(或者如果沒有指定公共頭文件献丑,則與所有頭文件)進(jìn)行匹配末捣,以排除那些不應(yīng)該暴露在用戶項(xiàng)目中的頭文件,也不應(yīng)該被用來生成文檔创橄。當(dāng)庫被構(gòu)建時(shí),這些頭文件將出現(xiàn)在構(gòu)建目錄中。
沒有被列為 public 或 private 的頭文件將被視為 private嘱兼,但另外也不會(huì)出現(xiàn)在構(gòu)建目錄中悦冀。
示例
spec.private_header_files = 'Headers/Private/*.h'
vendored_frameworks
源文件相關(guān)聯(lián)的 framework
示例
spec.ios.vendored_frameworks = 'Frameworks/MyFramework.framework'
spec.vendored_frameworks = 'MyFramework.framework', 'TheirFramework.framework'
vendored_libraries
源文件相關(guān)聯(lián)的 libraries
示例
spec.ios.vendored_library = 'Libraries/libProj4.a'
spec.vendored_libraries = 'libProj4.a', 'libJavaScriptCore.a'
resource_bundles
該屬性允許定義資源包的名稱和文件,這些資源包應(yīng)該為Pod構(gòu)建醉蚁。它們被指定為一個(gè)哈希燃辖,其中鍵代表資源包的名稱,值是它們應(yīng)該包含的文件模式网棍。
為了將 Pod 構(gòu)建為靜態(tài)庫黔龟,官方強(qiáng)烈建議使用此屬性來管理資源文件,因?yàn)槭褂?resources
屬性可能會(huì)發(fā)生名稱沖突滥玷。
資源文件 bundle 的名稱至少應(yīng)包括 Pod 的名稱氏身,以最大程度地減少名稱沖突的可能性。
為了在每個(gè)平臺(tái)上提供不同的資源惑畴,必須使用命名間隔捆綁蛋欣。
示例
spec.ios.resource_bundle = { 'MapBox' => 'MapView/Map/Resources/*.png' }
spec.resource_bundles = {
'MapBox' => ['MapView/Map/Resources/*.png'],
'MapBoxOtherResources' => ['MapView/Map/OtherResources/*.png']
}
resources
應(yīng)該復(fù)制到目標(biāo) bundle 中的資源列表。
為了將 Pod 構(gòu)建為靜態(tài)庫如贷,官方建議是使用 resource_bundle
豁状,因?yàn)槭褂?resources
屬性可能會(huì)發(fā)生名稱沖突捉偏。此外,使用此屬性指定的資源將直接復(fù)制到客戶端目標(biāo)泻红,因此 Xcode 不會(huì)對(duì)其進(jìn)行優(yōu)化夭禽。
示例
spec.resource = 'Resources/HockeySDK.bundle'
spec.resources = ['Images/*.png', 'Sounds/*']
exclude_files
從其他文件模式中排除的文件模式列表。
示例
spec.ios.exclude_files = 'Classes/osx'
spec.exclude_files = 'Classes/**/unused.{h,m}'
preserve_paths
任何在下載后不應(yīng)該被刪除的文件谊路。
默認(rèn)情況下讹躯,CocoaPods 會(huì)刪除所有不符合任何其他文件模式的文件。
示例
spec.preserve_path = 'IMPORTANT.txt'
spec.preserve_paths = 'Frameworks/*.framework'
module_map
將此 Pod 集成為框架時(shí)應(yīng)使用的模塊映射文件缠劝。
默認(rèn)情況下潮梯,CocoaPods 基于規(guī)范中的公共頭創(chuàng)建模塊映射文件。
示例
spec.module_map = 'source/module.modulemap'
Subspecs
一個(gè)庫可以指定對(duì)另一個(gè)庫惨恭、另一個(gè)庫的子庫或其自身的子庫的依賴秉馏。
subspec
代表庫中一個(gè)模塊的 specification。
Subspecs 參與了一個(gè)雙重層次結(jié)構(gòu)脱羡。
一方面萝究,一個(gè) specification 會(huì)自動(dòng)繼承它的所有 "sub-specifications" 作為依賴關(guān)系(除非指定了一個(gè)默認(rèn)的子規(guī)范)。
另一方面锉罐,一個(gè) "sub-specification" 繼承了父規(guī)范的屬性值帆竹,因此可以在祖規(guī)范中指定屬性的共同值。
雖然在實(shí)踐中聽起來很復(fù)雜脓规,但這意味著 subspecs 一般都能達(dá)到你所期望的效果栽连。
pod 'ShareKit', '2.0'
安裝 ShareKit 包含的所有框架,如 ShareKit/Evernote
侨舆,ShareKit/Facebook
等秒紧,因?yàn)樗鼈儽欢x為 subspecs。
pod 'ShareKit/Twitter', '2.0'
pod 'ShareKit/Pinboard', '2.0'
安裝 ShareKit 時(shí)只需要 ShareKit/Twitter
挨下、ShareKit/Pinboard
的源文件熔恢。請(qǐng)注意,在這種情況下复颈,要編譯的 "sub-specifications"需要源文件绩聘、依賴關(guān)系和根規(guī)范定義的其他屬性。CocoaPods 很聰明耗啦,可以處理任何由重復(fù)屬性引起的問題凿菩。
示例
具有不同源文件的子模塊。
subspec 'Twitter' do |sp|
sp.source_files = 'Classes/Twitter'
end
subspec 'Pinboard' do |sp|
sp.source_files = 'Classes/Pinboard'
end
引用對(duì)其他子模塊的依賴關(guān)系的子模塊帜讲。
Pod::Spec.new do |s|
s.name = 'RestKit'
s.subspec 'Core' do |cs|
cs.dependency 'RestKit/ObjectMapping'
cs.dependency 'RestKit/Network'
cs.dependency 'RestKit/CoreData'
end
s.subspec 'ObjectMapping' do |os|
end
end
嵌套子模塊
Pod::Spec.new do |s|
s.name = 'Root'
s.subspec 'Level_1' do |sp|
sp.subspec 'Level_2' do |ssp|
end
end
end
requires_app_host
測試規(guī)范是否需要應(yīng)用主機(jī)來運(yùn)行測試衅谷。這只適用于測試規(guī)范。
示例
test_spec.requires_app_host = true
app_host_name
必要時(shí)似将,作為 app host 的應(yīng)用規(guī)范获黔。
scheme
指定本規(guī)范要使用的配置方案蚀苛。
示例
spec.scheme = { :launch_arguments => ['Arg1'] }
spec.scheme = { :launch_arguments => ['Arg1', 'Arg2'], :environment_variables => { 'Key1' => 'Val1'} }
支持的 keys:
:launch_arguments
:environment_variables
:code_coverage
test_spec
代表庫的測試規(guī)范。在這里玷氏,你可以將所有的測試與測試依賴關(guān)系一起放在 podspec 中堵未。
示例
Pod::Spec.new do |spec|
spec.name = 'NSAttributedString+CCLFormat'
spec.test_spec do |test_spec|
test_spec.source_files = 'NSAttributedString+CCLFormatTests.m'
test_spec.dependency 'Expecta'
end
end
app_spec
代表該庫的應(yīng)用程序規(guī)范。在這里盏触,你可以將你的podspec的所有應(yīng)用程序的源文件和應(yīng)用程序的依賴關(guān)系放在一起渗蟹。
示例
Pod::Spec.new do |spec|
spec.name = 'NSAttributedString+CCLFormat'
spec.app_spec do |app_spec|
app_spec.source_files = 'NSAttributedString+CCLFormat.m'
app_spec.dependency 'AFNetworking'
end
end
default_subspecs
一個(gè)子規(guī)格名稱的數(shù)組,這些子規(guī)格應(yīng)該被用作首選的依賴關(guān)系赞辩。如果沒有指定雌芽,則規(guī)范要求所有的子規(guī)范作為依賴關(guān)系。
你可以使用值 :none
來指定編譯這個(gè)pod不需要任何子規(guī)格辨嗽,所有子規(guī)格都是可選的世落。
默認(rèn)情況下,一個(gè) Pod 應(yīng)該提供完整的庫糟需。用戶可以在知道自己的需求后屉佳,微調(diào)自己的依賴性,并排除不需要的子規(guī)范篮灼。因此忘古,很少需要這個(gè)屬性徘禁。它的目的是用來選擇一個(gè)默認(rèn)值诅诱,如果有 "子規(guī)范 "提供了其他不兼容的實(shí)現(xiàn),或者排除很少需要的模塊(特別是當(dāng)它們觸發(fā)對(duì)其他庫的依賴時(shí))送朱。
示例
spec.default_subspec = 'Core'
spec.default_subspecs = 'Core', 'UI'
spec.default_subspecs = :none