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' }
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