Podspec Syntax Reference

原文:Podspec Syntax Reference

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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末娘荡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子驶沼,更是在濱河造成了極大的恐慌炮沐,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件回怜,死亡現(xiàn)場離奇詭異大年,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)玉雾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門翔试,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人复旬,你說我怎么就攤上這事垦缅。” “怎么了驹碍?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵壁涎,是天一觀的道長凡恍。 經(jīng)常有香客問我,道長怔球,這世上最難降的妖魔是什么嚼酝? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮竟坛,結(jié)果婚禮上革半,老公的妹妹穿的比我還像新娘。我一直安慰自己流码,他們只是感情好又官,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漫试,像睡著了一般六敬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驾荣,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天外构,我揣著相機(jī)與錄音,去河邊找鬼播掷。 笑死审编,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的歧匈。 我是一名探鬼主播垒酬,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼件炉!你這毒婦竟也來了勘究?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤斟冕,失蹤者是張志新(化名)和其女友劉穎口糕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磕蛇,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡景描,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秀撇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片超棺。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捌袜,靈堂內(nèi)的尸體忽然破棺而出说搅,到底是詐尸還是另有隱情,我是刑警寧澤虏等,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布弄唧,位于F島的核電站适肠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏候引。R本人自食惡果不足惜侯养,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望澄干。 院中可真熱鬧逛揩,春花似錦、人聲如沸麸俘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽从媚。三九已至逞泄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拜效,已是汗流浹背喷众。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留紧憾,地道東北人到千。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像赴穗,于是被迫代替她去往敵國和親憔四。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • CocoaPods官網(wǎng)spec文件描述了Pod庫的版本望抽。它包括有關(guān)從哪里獲取source加矛、要使用哪些文件履婉、應(yīng)用程序...
    oneday527閱讀 11,378評(píng)論 3 36
  • 前言 ? 長時(shí)間不寫Podspec文件煤篙,容易忘記里面的一些屬性含義,所以本文把 官方Podspec語法v1.9...
    eeybee閱讀 7,729評(píng)論 0 23
  • 概述 距離上一篇podfile介紹過去已經(jīng)幾個(gè)月了毁腿,很想抽時(shí)間將這個(gè)系列的文章抓緊補(bǔ)齊辑奈,但是時(shí)間一拖再拖,我也不想...
    二毛的希望閱讀 7,684評(píng)論 2 19
  • 上一篇文章整理了我用SVN創(chuàng)建私有庫的過程已烤,本文將整理一下有關(guān)podSpec文件的相關(guān)知識(shí)鸠窗。 podSpec中sp...
    棒棒德閱讀 1,995評(píng)論 0 1
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友胯究。感恩相遇稍计!感恩不離不棄。 中午開了第一次的黨會(huì)裕循,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,567評(píng)論 0 11