podfile的用法

什么是Podfile

Podfile是一個規(guī)范,描述了一個或多個一套工程目標的依賴項,CocoaPods管理iOS組件庫

各種參數(shù)配置含義

一仰坦、Install狈醉! :適用于整個podfile文件

1.指明了cocoapods安裝podfile使用的安裝方法和配置項
install! 'cocoapods', //第一個參數(shù)是安裝方法解阅,剩下的參數(shù)是選擇項,現(xiàn)在安裝方法只支持’cocoapods’
 :deterministic_uuids => false, 
 :integrate_targets => false 
還有以下配置參數(shù)
 :clean
 :deduplicate_targets
 :deterministic_uuids
 :integrate_targets
 :lock_pod_sources
 :warn_for_multiple_pod_sources
 :share_schemes_for_development_pods
2.source: 默認被指定的依賴項會在全局級別的指定源中匹配搜索圈匆×诳裕可以為特依賴關(guān)系指定源
 //指定特定源中搜索,并忽略任何全局源*
 pod 'PonyDebugger', :source => 'https://github.com/CocoaPods/Specs.git'

這個source為repo的url焕檬,如何得到這個url呢姆坚,在終端中pod repo list 查看出對應(yīng)的repo中URL

3.target:
target: 在制定的快內(nèi)定義pod target和指定的依賴范圍嗎。target應(yīng)該與Xcode的target相符实愚。默認情況下兼呵,target包含定義在塊外的依賴,除非指定不使用inherit!來繼承
 //a. target A 引入AFN庫
 target ‘A'do
     pod 'AFN'
 end

 //b.定義’A’ 引入AFN庫腊敲,定義’B’target引入’SSZip’庫击喂,同時會繼承’A’target 中的’AFN’庫
     target ‘A’ do
         pod ‘AFN’
         target ‘B’ do
             inherit! :search_paths
             pod 'SSZip'
         end
     end
  // c.  Target 多層嵌套
 target 'ShowsApp’ do
      # ShowsApp 僅僅引入ShowsKit 
      pod 'ShowsKit’ 
         # 引入 ShowsKit 和 ShowTVAuth
         target 'ShowsTV' do 
             pod 'ShowTVAuth’ 
         end
         # 引入了Specta和Expecta以及ShowsKit
         target 'ShowsTests' do 
             inherit! :search_paths 
             pod 'Specta’ 
             pod 'Expecta’ 
          end 
     end
 end         
4.abstract_target :定義一個抽象的target,為了方便target目標依賴繼承碰辅。這個target是沒有被定義在xcode中的懂昂。例子:
 // a.定義一個抽象target
 abstract_target 'Networking' do     
     pod ‘AlamoFire'
     target 'Networking App 1’
     target 'Networking App 2’
 end
 // b. 定義一個包含多個target的抽象target
 # 注意:這是個抽象的target工程中并沒有這個target.引入ShowsKit 
 abstract_target 'Shows' do 
     pod 'ShowsKit’ 
     # ShowsiOS target會引入ShowWebAuth庫以及繼承自Shows的ShowsKit庫 
     target 'ShowsiOS' do 
         pod 'ShowWebAuth’ 
     end
     # ShowsTV target會引入ShowTVAuth庫以及繼承自Shows的ShowsKit庫 
     target 'ShowsTV’ do
         pod ‘ShowTVAuth'
     end 
     # ShowsTests target引入了Specta和Expecta庫,并且指明繼承Shows没宾,所以也會引入ShowsKit
     target 'ShowsTests’ do
         inherit! :search_paths 
         pod 'Specta’ 
         pod 'Expecta’ 
     end 
 end

意義:可以使用抽象類 來統(tǒng)一 需要繼承的pod凌彬。

5.abstract! 指定當前target是抽象target
 target ‘A’ do
     abstract!
 end
6.inherit! 設(shè)置當前target的繼承關(guān)系
 target 'App’ do
     target ‘A’ do
         #這個target 繼承 父級所有行為
         inherit! :complete  
     end
     target ‘B’ do
         #這個target 不繼承 父級所有行為
         inherit! :none 
     end
     target ‘C’ do
         #target 僅繼承 父級的搜索路勁
         inherit! :search_paths 
     end
 end

7.platform :用于指明應(yīng)建立的靜態(tài)庫的平臺。

 cocoapods默認指定的平臺配置:
     · iOS->4.3
     · OS X->10.6
     · tvOS->9.0
     · watchOS->2.0
 如果部署target需要iOS<4.3,armv6架構(gòu)講被添加到ARCHS
     使用:
     
 #指定具體平臺和版本
 platform :ios, ‘4.0'
 platform :ios

8.Inhibit_all_warnings! :忽略cocoapods依賴庫的警告循衰〔玻可以全局 定義,也可以定義在子target中会钝,也可以指定某個庫

 pod 'SSZipArchive', :inhibit_warnings => true
 pod 'SSZipArchive', :inhibit_warnings => false

9.use_frameworks! :通過指定 use_frameworks! 要求生成的是framework而不是靜態(tài)庫伐蒋,swift沒有靜態(tài)庫。

 *如果使用use_frameworks!命令會在Pods工程下的Frameworks目錄下生成依賴庫的framework*
 *如果不使用use_frameworks!命令會在Pods工程下的Products目錄下生成.a的靜態(tài)庫*

通過指定use_frameworks!要求生成的是framework而不是靜態(tài)庫迁酸。

如果使用use_frameworks!命令會在Pods工程下的Frameworks目錄下生成依賴庫的framework

如果不使用use_frameworks!命令會在Pods工程下的Products目錄下生成.a的靜態(tài)庫

10.source

1.source: 是指定pod的來源咽弦。如果不指定source,默認是使用CocoaPods官方的source胁出。(建議使用默認設(shè)置)

 # 使用其他來源地址 
 source 'https://github.com/artsy/Specs.git’ 
 # 使用官方默認地址(默認) 
 source 'https://github.com/CocoaPods/Specs.git'

主要:如果使用自己的私有庫型型,需要使用source指定到私有庫地址

11.Hooks Podfile提供了hook機制,它將在安裝過程中調(diào)用全蝶。hook是全局性的闹蒜,不存儲于每個target中寺枉。

1.Plugin :指定應(yīng)在安裝期間使用的插件。使用此方法指定應(yīng)在安裝期間使用的插件绷落,以及當它被調(diào)用時姥闪,應(yīng)傳遞給插件的選項。例如:

 # 指定在安裝期間使用cocoapods-keys和slather這兩個插件 
 plugin 'cocoapods-keys', :keyring => 'Eidolon' plugin 'slather’ 

2.pre_install: 當我們下載完成砌烁,但是還沒有安裝之時筐喳,可以使用hook機制通過pre_install指定要做更改,更改完之后進入安裝階段函喉。格式如下:

  pre_install do |installer| 
      # 做一些安裝之前的更改 
 end

3.post_install:當我們安裝完成避归,但是生成的工程還沒有寫入磁盤之時,我們可以指定要執(zhí)行的操作管呵。 比如梳毙,我們可以在寫入磁盤之前,修改一些工程的配置:

 post_install do |installer| installer.pods_project.targets.each do |target| 
     target.build_configurations.each do |config| 
          config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported’ 
         end
      end
  end 

12.def命令來聲明一個pod集

def univeral_pods
    pod 'IQKeyboardManagerSwift’ 
end 
#然后捐下,我們就可以在需要引入的target處引入
target 'MyTarget' do 
univeral_pods 
end 

一個簡單寫法:

target 'MyApp' do
  pod 'AFNetworking', '~> 3.0'
end

這是最簡單最普遍的寫法账锹,針對MyApp這個target引入AFNetworking這個依賴庫,也是大家平時用的最多的一種方式坷襟。

下面是個更復雜的一個例子:

# 下面兩行是指明依賴庫的來源地址
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/Artsy/Specs.git'

# 說明平臺是ios奸柬,版本是9.0
platform :ios, '9.0'

# 忽略引入庫的所有警告(強迫癥者的福音啊)
inhibit_all_warnings!

# 針對MyApp target引入AFNetworking
# 針對MyAppTests target引入OCMock婴程,
target 'MyApp' do 
    pod 'AFNetworking', '~> 3.0' 
    target 'MyAppTests' do
       inherit! :search_paths 
       pod 'OCMock', '~> 2.0.1' 
    end
end
# 這個是cocoapods的一些配置,官網(wǎng)并沒有太詳細的說明,一般采取默認就好了,也就是不寫.
post_install do |installer|       
   installer.pods_project.targets.each do |target| 
     puts target.name 
   end
end

Build configurations(編譯配置)

默認情況下鸟缕, 依賴項會被安裝在所有target的build configuration中。為了調(diào)試或者處于其他原因排抬,依賴項只能在給定的build configuration中被啟用。

下面寫法指明只有在Debug和Beta模式下才有啟用配置

pod 'PonyDebugger', :configurations => ['Debug', 'Beta']

或者授段,可以弄白名單只指定一個build configurations蹲蒲。

pod 'PonyDebugger', :configuration => 'Debug'

注意:默認情況下如果不指定具體生成配置,那么會包含在所有的配置中侵贵,如果你想具體指定就必須手動指明届搁。

Subspecs

subspecs的podspec文件中的寫法:


屏幕快照 2019-12-23 上午9.38.40.png

一般情況我們會通過依賴庫的名稱來引入,cocoapods會默認安裝依賴庫的所有內(nèi)容窍育。

我們也可以指定安裝具體依賴庫的某個子模塊卡睦,例如:

# 僅安裝QueryKit庫下的Attribute模塊
pod 'QueryKit/Attribute'

# 僅安裝QueryKit下的Attribute和QuerySet模塊
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']

Using the files from a local path (使用本地文件)

我們也可以指定依賴庫的來源地址。如果我們想引入我們本地的一個庫漱抓,可以這樣寫:

pod 'AFNetworking', :path => '~/Documents/AFNetworking'

使用這個選項后表锻,Cocoapods會將給定的文件夾認為是Pod的源,并且在工程中直接引用這些文件乞娄。這就意味著你編輯的部分可以保留在CocoaPods安裝中瞬逊,如果我們更新本地AFNetworking里面的代碼显歧,cocoapods也會自動更新。

被引用的文件夾可以來自你喜愛的SCM确镊,甚至當前倉庫的一個git子模塊

注意:Pod的podspec文件也應(yīng)該被放在這個文件夾當中

From a podspec in the root of a library repository (引用倉庫根目錄的podspec)

有時我們需要引入依賴庫指定的分支或節(jié)點士骤,寫法如下。

  • 引入master分支(默認)
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
  • 引入指定的分支
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
  • 引入某個節(jié)點的代碼
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
  • 引入某個特殊的提交節(jié)點
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'

需要特別注意的是蕾域,雖然這樣將會滿足任何在Pod中的依賴項通過其他Pods 但是podspec必須存在于倉庫的根目錄中拷肌。

從外部引入podspec引入

pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'

podspec

使用給定podspec文件中定義的代碼庫的依賴關(guān)系。如果沒有傳入任何參數(shù)旨巷,podspec優(yōu)先使用根目錄巨缘,如果是其他情況必須在后面指明。(一般使用默認設(shè)置即可)例如:

# 不指定表示使用根目錄下的podspec契沫,默認一般都會放在根目錄下
podspec
# 如果podspec的名字與庫名不一樣带猴,可以通過這樣來指定
podspec :name => 'QuickDialog'
# 如果podspec不是在根目錄下,那么可以通過:path來指定路徑
podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'
Podfile.lock文件:

當團隊中的某個人執(zhí)行完pod install命令后懈万,生成的Podfile.lock文件就記錄下了當時最新Pods依賴庫的版本拴清,這時團隊中的其它人check下來這份包含Podfile.lock文件的工程以后,再去執(zhí)行pod install命令時会通,獲取下來的Pods依賴庫的版本就和最開始用戶獲取到的版本一致口予。如果沒有Podfile.lock文件,后續(xù)所有用戶執(zhí)行pod install命令都會獲取最新版本的SBJson涕侈,這就有可能造成同一個團隊使用的依賴庫版本不一致沪停, 這對團隊協(xié)作來說絕對是個災(zāi)難!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裳涛,一起剝皮案震驚了整個濱河市木张,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌端三,老刑警劉巖舷礼,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異郊闯,居然都是意外死亡妻献,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門团赁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來育拨,“玉大人,你說我怎么就攤上這事欢摄“旧ィ” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵怀挠,是天一觀的道長锹引。 經(jīng)常有香客問我矗钟,道長,這世上最難降的妖魔是什么嫌变? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任吨艇,我火速辦了婚禮,結(jié)果婚禮上腾啥,老公的妹妹穿的比我還像新娘东涡。我一直安慰自己,他們只是感情好倘待,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布疮跑。 她就那樣靜靜地躺著,像睡著了一般凸舵。 火紅的嫁衣襯著肌膚如雪祖娘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天啊奄,我揣著相機與錄音渐苏,去河邊找鬼。 笑死菇夸,一個胖子當著我的面吹牛琼富,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庄新,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼鞠眉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了择诈?” 一聲冷哼從身側(cè)響起械蹋,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎羞芍,沒想到半個月后哗戈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡涩金,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了暇仲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片步做。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奈附,靈堂內(nèi)的尸體忽然破棺而出全度,到底是詐尸還是另有隱情,我是刑警寧澤斥滤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布将鸵,位于F島的核電站勉盅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏顶掉。R本人自食惡果不足惜草娜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望痒筒。 院中可真熱鬧宰闰,春花似錦、人聲如沸簿透。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽老充。三九已至葡盗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啡浊,已是汗流浹背觅够。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虫啥,地道東北人蔚约。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像涂籽,于是被迫代替她去往敵國和親苹祟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 一. CocoaPods的介紹 什么是CocoaPods评雌?CocoaPods是一個負責管理iOS項目中第三方開源庫...
    輝712閱讀 3,913評論 0 7
  • CocoaPods操作手冊 本文檔介紹了啥树枫? 為什么要使用CocoaPods? 如何安裝CocoaPods景东? Po...
    風小鉆閱讀 7,526評論 1 10
  • 要解除循環(huán)依賴斤吐,引入包管理技術(shù)cocoapods會讓我們更有效率搔涝。pod不允許組件間有循環(huán)依賴,若有pod ins...
    cs_mark閱讀 2,060評論 0 1
  • Ruby 安裝 要安裝cocospods 首先需要安裝ruby和措,可以先安裝xcode庄呈,再安裝macport ,最后...
    山天大畜閱讀 1,844評論 0 1
  • 前言 前幾天發(fā)布我的開源庫<最簡單方便的iOS輪播開源庫:JYCarousel>到CocoaPods的時候派阱。對Co...
    Dely閱讀 17,104評論 12 82