CocoaPods詳解4:.podspec語法參考

https://www.cnblogs.com/lxlx1798/p/14587007.html

一,概述

spec文件描述了Pod庫的版本嘀倒。它包括有關(guān)從哪里獲取source嗽冒、要使用哪些文件巷怜、應(yīng)用程序構(gòu)建設(shè)置以及其他通用元數(shù)據(jù)(如名稱粹断、版本和描述)的詳細(xì)信息肉康。

二旷赖、spec文件(Specification) 規(guī)范說明

1.創(chuàng)建spec文件

pod spec create DemoSpec

2.podspec示例

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.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

語法

1沥阱、Root specification
根規(guī)范“根”規(guī)范存儲有關(guān)庫的特定版本的信息浪感。此組中的屬性只能寫入規(guī)范昔头,而不是子規(guī)范。在這個(gè)組中列出的屬性是podspec需要的唯一屬性影兽。其他組的屬性被用來改進(jìn)podspec并遵循一個(gè)關(guān)于配置方法的約定揭斧。根規(guī)范可以直接通過sub-specifications來描述這些屬性。

name 必須

#跟podspec文件名相同
spec.name = 'AFNetworking'

version 必須

spec.version = '0.0.1'

cocoapods_version

規(guī)范支持的CocoaPods版本峻堰。
spec.cocoapods_version = '>= 0.36'

authors 必須

庫維護(hù)人員的名稱和電子郵件地址讹开,不是Podspec維護(hù)者。
spec.author = '作者名字'

多個(gè)作者

spec.authors = 'Darth Vader', 'Wookiee'

多個(gè)作者捐名,以及其郵箱

spec.authors = { 'Darth Vader' => 'darthvader@darkside.com', 'Wookiee' => 'wookiee@aggrrttaaggrrt.com' }

license 必須
pod庫的許可證旦万。除非源文件包含一個(gè)名為LICENSE.* or LICENCE.*的文件,否則許可證文件的路徑或通常用于許可證類型的公告完整文本,必須指定镶蹋。許可證文件可以沒有文件擴(kuò)展名也可以是txt, md, 或是markdown成艘,

許可證默認(rèn)與spec文件在同一目錄下
MIT是一個(gè)比較寬泛的開源許可協(xié)議

spec.license = 'MIT'

指定許可文件

spec.license = { :type => 'MIT', :file => 'MIT-LICENSE.txt' }

指定了許可證文件的內(nèi)容

spec.license = { :type => 'MIT', :text => <<-LICENSE Copyright 2012 Permission is granted to... LICENSE }

homepage必須

pod庫主頁地址

spec.homepage = 'http://www.example.com'

source 必須
pod庫的位置

通過tag指定Git源 用的最多的方式I桶搿!
tag值spec.version一致狰腌。

spec.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => spec.version.to_s }

以下的方式除破,項(xiàng)目中沒有用到,不能過多的解釋琼腔,更多參照source

使用v前綴的tag值和子模塊`

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

#使用svn源

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

#使用HTTP下載代碼的壓縮文件瑰枫。它支持zip、tgz丹莲、bz2光坝、txz和tar。

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

#使用HTTP下載文件甥材,使用hash來驗(yàn)證下載盯另。它支持sha1和sha256。

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
:path

summary 必須
pod庫簡介洲赵,最多140個(gè)字符鸳惯。

spec.summary = 'Computes the meaning of life.'

description
pod庫的描述,比summary詳細(xì)

spec.description = <<-DESC
                     Computes the meaning of life.
                     Features:
                     1. Is self aware
                     ...
                     42. Likes candies.
                   DESC

screenshots
用圖片展示pod庫叠萍,UI庫可以使用這種方式芝发,其他的建議使用git地址
單個(gè)截圖

spec.screenshot = 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png'

多個(gè)截圖

spec.screenshots = [ 'http://dl.dropbox.com/u/378729/MBProgressHUD/1.png', 'http://dl.dropbox.com/u/378729/MBProgressHUD/2.png' ]

documentation_url
可選的Pod庫文檔的URL

spec.documentation_url = 'http://www.example.com/docs.html'

prepare_command
Pod下載完之后將執(zhí)行的bash腳本苛谷。該命令可用于創(chuàng)建辅鲸、刪除和修改任何下載的文件。
這個(gè)命令是在Pod被清理之前且創(chuàng)建Pod項(xiàng)目之前執(zhí)行的腹殿。工作目錄是Pod根目錄独悴。
如果是使用:path安裝的pod,這個(gè)命令將不會被執(zhí)行锣尉。

指定腳本文件刻炒,ruby build_files.rb是腳本文件名

spec.prepare_command = 'ruby build_files.rb'

這里用到了ruby命令

`#sed命令是利用script來處理文本文件
#i :插入
#s :取代
#sed 's/要被取代的字串/新的字串/g'
#第一個(gè)sed 語句表示將當(dāng)前目錄下的所有.h文件中的MyNameSpacedHeader替換成Header`
spec.prepare_command = <<-CMD
sed -i 's/MyNameSpacedHeader/Header/g' ./**/*.h
sed -i 's/MyNameOtherSpacedHeader/OtherHeader/g' ./**/*.h
CMD

deprecated
是否棄用

spec.deprecated = true

deprecated_in_favor_of
設(shè)置棄用的pod庫的新名字,告訴使用者可以搜索新的庫名悟耘。

spec.deprecated_in_favor_of = 'NewMoreAwesomePod'

2落蝙、Platform
規(guī)范應(yīng)該指出使用pod支持的平臺和相應(yīng)的部署目標(biāo)。如果沒有在子規(guī)范中定義暂幼,該分組的屬性將繼承父類的值筏勒。

platform
不設(shè)置表示支持全部平臺,如果支持多個(gè)平臺使用deployment_target命令
只能在OS系統(tǒng)使用旺嬉,要求系統(tǒng)版本至少10.8

spec.platform = :osx, '10.8'

也可以只指定平臺管行,不指定版本

spec.platform = :iOS

deployment_target

平臺支持的最低部署版本,可以分別為每個(gè)平臺指定不同的版本。

spec.ios.deployment_target = '6.
spec.osx.deployment_target = '10.8'

3邪媳、Build settings

接下來列出了與構(gòu)建庫所用的構(gòu)建環(huán)境相關(guān)的屬性捐顷。

dependency

設(shè)置對其他pod或“sub-specification”的依賴荡陷。
依賴關(guān)系如果需要指定版本,推薦使用~>

spec.dependency 'AFNetworking', '~> 1.0'

依賴RestKit庫中的子模塊

spec.dependency 'RestKit/CoreData', '~> 0.20.0'

指定某個(gè)平臺的依賴

spec.ios.dependency 'MBProgressHUD', '~> 0.5'

requires_arc

支持多平臺
requires_arc允許指定哪個(gè)source_files使用ARC迅涮。不使用ARC的文件將添加- fno-objc- ARC編譯器標(biāo)記废赞。

此屬性的默認(rèn)值為true。

不支持ARC

spec.requires_arc = false

指定某個(gè)文件夾支持ARC的

spec.requires_arc = 'Classes/Arc'

指定某些文件支持ARC

spec.requires_arc = ['Classes/*ARC.m', 'Classes/ARC.mm']

frameworks 支持多平臺
需要鏈接的系統(tǒng)frameworks

spec.ios.framework = 'CFNetwork'

多個(gè)庫

spec.frameworks = 'QuartzCore', 'CoreData'

libraries 支持多平臺

spec.ios.library = 'xml2'
#多個(gè)庫叮姑,其中xml2對應(yīng)ibxml2.tbd       z對應(yīng)libz.tbd
#所以lib庫 省略lib與后綴唉地。
spec.libraries = 'xml2', 'z'

compiler_flags

支持多平臺
編譯參數(shù) #-D是前綴,-Wno-format這個(gè)是gcc編譯警告的參數(shù)

spec.compiler_flags = '-DOS_OBJECT_USE_OBJC=0', '-Wno-format'

pod_target_xcconfig

支持多平臺
設(shè)置的參數(shù)都會添加到最終的私有pod的target xcconfig文件中
【注意】這是設(shè)置pod庫的target 命令

#OTHER_LDFLAGS  對應(yīng)buildsetting的other linker flags
spec.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' }

user_target_xcconfig

支持多平臺
這個(gè)會添加到最終target 的xcconfig中传透,不建議使用耘沼,不應(yīng)該污染用戶項(xiàng)目的構(gòu)建設(shè)置,因?yàn)檫@可能導(dǎo)致沖突朱盐。

如果導(dǎo)入pod時(shí)群嗤,需要使用clang編譯器標(biāo)志或預(yù)編譯器宏定義,最好使用pod_target_xcconfig兵琳,這個(gè)只會影響你自己的pod target狂秘。

spec.user_target_xcconfig = { 'MY_SUBSPEC' => 'YES' }
image.png
spec.user_target_xcconfig = { 'MY_SUBSPEC' => 'YES' }

prefix_header_contents

支持多平臺
在pod項(xiàng)目的前綴頭文件中注入的內(nèi)容,前綴頭文件是模塊的pch文件。

spec.prefix_header_contents = '#import <UIKit/UIKit.h>'
spec.prefix_header_contents = '#import <UIKit/UIKit.h>', '#import <Foundation/Foundation.h>'
//可以將多行內(nèi)容放到兩個(gè)EOS中間
s.prefix_header_contents = <<-EOS
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#else
EOS
s.prefix_header_contents = <<-EOS
#define HHHH @"測試代碼"
EOS
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末躯肌,一起剝皮案震驚了整個(gè)濱河市赃绊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌羡榴,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件运敢,死亡現(xiàn)場離奇詭異校仑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)传惠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門迄沫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人卦方,你說我怎么就攤上這事羊瘩。” “怎么了盼砍?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵尘吗,是天一觀的道長。 經(jīng)常有香客問我浇坐,道長睬捶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任近刘,我火速辦了婚禮擒贸,結(jié)果婚禮上臀晃,老公的妹妹穿的比我還像新娘。我一直安慰自己介劫,他們只是感情好徽惋,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著座韵,像睡著了一般险绘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上回右,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天隆圆,我揣著相機(jī)與錄音,去河邊找鬼翔烁。 笑死渺氧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹬屹。 我是一名探鬼主播侣背,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼慨默!你這毒婦竟也來了贩耐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤厦取,失蹤者是張志新(化名)和其女友劉穎潮太,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虾攻,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铡买,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霎箍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奇钞。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖漂坏,靈堂內(nèi)的尸體忽然破棺而出景埃,到底是詐尸還是另有隱情,我是刑警寧澤顶别,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布谷徙,位于F島的核電站,受9級特大地震影響筋夏,放射性物質(zhì)發(fā)生泄漏蒂胞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一条篷、第九天 我趴在偏房一處隱蔽的房頂上張望骗随。 院中可真熱鬧蛤织,春花似錦、人聲如沸鸿染。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涨椒。三九已至摊鸡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚕冬,已是汗流浹背免猾。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留囤热,地道東北人猎提。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像旁蔼,于是被迫代替她去往敵國和親锨苏。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

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

  • CocoaPods官網(wǎng)spec文件描述了Pod庫的版本棺聊。它包括有關(guān)從哪里獲取source伞租、要使用哪些文件、應(yīng)用程序...
    oneday527閱讀 11,325評論 3 36
  • 前言:在構(gòu)建自己的組件庫中限佩,我們會經(jīng)常編輯.podspec文件葵诈,進(jìn)行一些配置項(xiàng),但是有一些確實(shí)還是不太清楚祟同,這里統(tǒng)...
    nick5683閱讀 9,382評論 0 13
  • 前言 ? 長時(shí)間不寫Podspec文件驯击,容易忘記里面的一些屬性含義,所以本文把 官方Podspec語法v1.9...
    eeybee閱讀 7,691評論 0 23
  • 前言:在構(gòu)建自己的組件庫中耐亏,我們會經(jīng)常編輯.podspec文件,進(jìn)行一些配置項(xiàng)沪斟,但是有一些確實(shí)還是不太清楚广辰,這里統(tǒng)...
    沉江小魚閱讀 6,794評論 0 17
  • CocoaPods官網(wǎng)[https://guides.cocoapods.org]spec文件描述了Pod庫的版本...
    有毒的程序猿閱讀 845評論 0 3