CocoaPods 系列之三 Podspec 語法說明

CocoaPods 系列之一 制作公開庫
CocoaPods 系列之二 更新公開庫
CocoaPods 系列之三 Podspec 語法說明
CocoaPods 系列之四 Podspec subspec
CocoaPods 系列之五 Private Pods(譯文) 制作私有庫
CocoaPods 系列之六 Private Pods 制作私有庫從0到1
CocoaPods 系列之七 我遇到的驗(yàn)證不過

先上官方語法說明,英語好的移步下面的鏈接
https://guides.cocoapods.org/syntax/podspec.html#specification

一 Podspec文件作用

Podspec語法就是一個(gè)規(guī)范,這個(gè)規(guī)范聲明你的庫包含哪些文件,去哪里獲得庫的源代碼,庫的名字,版本,說明等等。

Podspecs 一定要放在倉庫的根目錄(如果不放,各種bug等著呢),并且?guī)煳募?yīng)該存儲(chǔ)于根目錄。文件不支持遍歷父目錄。

二 如何生成 Pod Spec 文件

命令格式:pod spec create + 名字
例如: pod spec crate TestSpec
保證pod安裝成功
在命令行執(zhí)行
任何路徑下都可以執(zhí)行這個(gè)命令,并且?guī)湍闵蒚estSpec.podspec的文件

三 上個(gè)實(shí)例

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

四 在podspec文件里, # 后面的是注釋

五 podspec文件的開始和結(jié)束

Pod::Spec.new do |s|
end

上面這兩行是這個(gè)文件的開始和結(jié)束

六 name

是否必須聲明:是
解釋:Pod庫的名字
例如:spec.name = 'AFNetworking'

七 version

是否必須聲明: 是
解釋:Pod 庫的版本說明,支持語義化版本https://semver.org/lang/zh-CN/
例如:spec.version = '0.0.1'

八 swift_version

是否必須聲明:否
解釋: pod庫支持的swift版本
例如:spec.swift_version = '3.2'

九 cocoapods_version

是否必須聲明:否
解釋: pod庫支持的CocoaPods版本
例如:spec.cocoapods_version = '>= 0.36'

十 ### authors

是否必須聲明:是
解釋:pod庫作者的名字和郵箱
例如:
spec.author = 'Darth Vader'
spec.authors = 'Darth Vader', 'Wookiee'
spec.authors = { 'Darth Vader' => 'darthvader@darkside.com',
'Wookiee' => 'wookiee@aggrrttaaggrrt.com' }
可以看出,可以設(shè)置多個(gè)

十一 social_media_url

是否必須聲明:否
例如:
spec.social_media_url = 'https://twitter.com/cocoapods'

十二 license

是否必須聲明:是
解釋:pod庫許可證的類型(也就是軟件授權(quán)協(xié)議),各個(gè)協(xié)議的不同https://www.cnblogs.com/Vito2008/p/4806677.html
例如:
spec.license = 'MIT'
spec.license = { :type => 'MIT', :file => 'MIT-LICENSE.txt' }
spec.license = { :type => 'MIT', :text => <<-LICENSE
Copyright 2012
Permission is granted to...
LICENSE
}

十三 homepage

是否必須聲明:是
解釋:pod庫的主頁,主頁用來說明這個(gè)庫的,可以是githup上庫的地址,沒有可以亂寫
例如:
spec.homepage = 'http://www.example.com'

十四 source

是否必須聲明:是
解釋:指定代碼地址。一般是git地址,后面可以跟tag--標(biāo)簽,branch-分支,commit-版本號(hào),submodules-子目錄,有了這些類型才知道取哪次提交的代碼。
例如:
spec.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git',
:tag => spec.version.to_s }

spec.source = { :git => 'https://github.com/typhoon-framework/Typhoon.git',
:tag => "v#{spec.version}", :submodules => true }

spec.source = { :svn => 'http://svn.code.sf.net/p/polyclipping/code', :tag => '4.8.8' }

spec.source = { :svn => 'http://svn.code.sf.net/p/polyclipping/code', :tag => '4.8.8' }

spec.source = { :hg => 'https://bitbucket.org/dcutting/hyperbek', :revision => "#{s.version}" }

spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip' }

spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip',
:sha1 => '7e21857fe11a511f472cfd7cfa2d979bd7ab7d96' }

支持的key:
:git => :tag, :branch, :commit, :submodules

:svn => :folder, :tag, :revision

:hg => :revision

:http => :flatten, :type, :sha256, :sha1

十五 summary

是否必須聲明:是
解釋:Pod庫的簡要說明。字?jǐn)?shù)最多為140字。描述應(yīng)該剪短,但是內(nèi)容豐富。
例如:
s.summary = 'A delightful iOS and OS X networking framework.這是iOS的網(wǎng)絡(luò)庫'

十六 description

是否必須聲明:否
解釋:Pod的描述(description)比摘要(summary)更詳細(xì)。
比如:
spec.description = <<-DESC
Computes the meaning of life.
Features:
1. Is self aware
...
42. Likes candies.
DESC

十七 screenshots

是否必須:否
解釋: 這個(gè)用的人很少,用圖片的方式去介紹庫
例如:
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

是否必須:否
解釋:
例如:

十九 prepare_command

是否必須:否
解釋:
例如:
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

是否必須:否
解釋:過
例如:
spec.static_framework = true

二十一 deprecated

是否必須:否
解釋:pod庫是否被棄用
例如:
spec.deprecated = true

二十二 deprecated_in_favor_of

是否必須:否
解釋:曾經(jīng)被被棄用的名字
例如:
spec.deprecated_in_favor_of = 'NewMoreAwesomePod'

二十三 Platform

是否必須:否
解釋:庫支持的平臺(tái),如果空則默認(rèn)支持所有的平臺(tái),iOS系統(tǒng)和osx系統(tǒng)。當(dāng)你支持多系統(tǒng)時(shí),應(yīng)該用deployment_target代替
例如:
spec.platform = :osx, '10.8'
spec.platform = :ios
spec.platform = :osx

二十四 deployment_target

是否必須:否
解釋:平臺(tái)支持的最小版本
例如:
spec.ios.deployment_target = '6.0'
spec.osx.deployment_target = '10.8'

十二五 dependency

是否必須:否
解釋:你的庫依賴的其它庫。
~> 符號(hào)是要求的,因?yàn)檫@個(gè)符號(hào)提供了很好的版本控制。
比如 ~> 1.0.1會(huì)要求版本是在>= 1.0.1,但不會(huì)大于 1.1
比如 ~> 1.0 將會(huì)匹配1.0,1.0.1,1.1,但不會(huì)大于2.0
例如:
spec.dependency 'AFNetworking', '~> 1.0'
spec.ios.dependency 'MBProgressHUD', '~> 0.5'

如果是多個(gè)依賴

s.dependency 'YYModel','~> 1.0.4'
s.dependency 'AFNetworking','~> 3.2.0'
s.dependency 'Reachability','~> 3.2

二十六 requires_arc

是否必須:否
解釋:允許你指定哪個(gè)文件使用ARC。或者所有的文件都是用ARC。不支持ARC的文件會(huì)添加 -fno-objc-arc.
例如:
spec.requires_arc = true
spec.requires_arc = false
spec.requires_arc = 'Classes/Arc'
spec.requires_arc = ['Classes/*ARC.m', 'Classes/ARC.mm']

二十七 framworks

是否必須:否
解釋:庫需要添加的系統(tǒng)庫
例如:
spec.ios.framework = 'CFNetwork'
spec.frameworks = 'QuartzCore', 'CoreData'

二十八 weak_frameworks

是否必須:否
解釋:A list of frameworks that the user’s target needs to weakly link against.
例如:
spec.weak_framework = 'Twitter'
spec.weak_frameworks = 'Twitter', 'SafariServices'

二十九 libraries

是否必須: 否
解釋: A list of system libraries that the user’s target (application) needs to link against.
例如:
spec.ios.library = 'xml2'
spec.libraries = 'xml2', 'z'

三十 compiler_flags

是否必須:否
解釋: 應(yīng)該傳遞給編譯器的標(biāo)志列表
例如:
spec.compiler_flags = '-DOS_OBJECT_USE_OBJC=0', '-Wno-format'

三十一 pod_target_xcconfig

是否必須:否
解釋:Any flag to add to the final private pod target xcconfig file.
例如:
spec.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' }

三十二 user_target_xcconfig

是否必須:否
解釋:
例如:
spec.user_target_xcconfig = { 'MY_SUBSPEC' => 'YES' }

三十三 prefix_header_contents

是否必須:否
解釋:
例如:
spec.prefix_header_contents = '#import <UIKit/UIKit.h>'
spec.prefix_header_contents = '#import <UIKit/UIKit.h>', '#import <Foundation/Foundation.h>'

三十四 prefix_header_file

是否必須:否
解釋:
例如:
spec.prefix_header_file = 'iphone/include/prefix.pch'
spec.prefix_header_file = false

三十五 module_name

是否必須:否
解釋:
例如:
spec.module_name = 'Three20'

三十六 header_dir

是否必須:否
解釋:
例如:
spec.header_dir = 'Three20Core'

三十七

是否必須:否
解釋:
例如:
spec.header_mappings_dir = 'src/include'

三十八 source_files

是否必須:否
解釋:
例如:
spec.source_files = 'Classes//.{h,m}'
spec.source_files = 'Classes/
/.{h,m}', 'More_Classes/*/.{h,m}'

將匹配所有的文件
c
將匹配所有c開頭的文件
*c 將匹配所有c結(jié)尾的文件
*c *將匹配所有有c的文件

三十九 public_header_files

是否必須: 否
解釋:包含的這些頭文件將暴露給用戶并且從中生成文檔,在構(gòu)建時(shí),這些頭文件將出現(xiàn)在構(gòu)建目錄中。如果沒有指定,那么source_files中的所有頭文件都被認(rèn)為是公眾的。
例如:
規(guī)格。public_header_files = 'Headers / Public / *。h'

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,595評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,814評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,224評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,444評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,988評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,804評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,998評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評(píng)論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,237評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評(píng)論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,706評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,993評(píng)論 2 374

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