Podfile grammar
參考:http://www.jianshu.com/p/8af475c4f717
Podfile
Podfile文件詳細(xì)描述了一個(gè)或多個(gè)工程中targets的依賴關(guān)系。Podfile會(huì)默認(rèn)創(chuàng)建一個(gè)隱式的目標(biāo)鏈接到工程中用戶的第一個(gè)target,名稱為“default”。
一個(gè)Podfile可以非常簡(jiǎn)單:
也可以配置的復(fù)雜一點(diǎn),如下:
*source'https://github.com/CocoaPod/Specs.git'platform:ios,'6.0' inhibit_all_warnings!xcodeproj'MyProject'pod'ObjectiveSugar','~ 0.5'target:test dopod'OCMock','~>'2.0.1' endpost_installdo|installer|installer.pods_project.targets.each do |target|puts #{target.name}end end*Dependencies(依賴項(xiàng))
Podfile描述用于各個(gè)用戶targe中的依賴項(xiàng)
pod 是聲明指定依賴的方法 podspec 提供了一個(gè)簡(jiǎn)單的API用于創(chuàng)建podspecs target 允許你在工程中限定依賴項(xiàng)只在你指定的targets中生效1. pod
指定工程的一個(gè)依賴
一個(gè)依賴項(xiàng)通過pod名和可選的版本號(hào)來聲明
當(dāng)你開始一個(gè)項(xiàng)目的時(shí)候你可能只需要一個(gè)最新版本的依賴,那么你就可以忽略版本號(hào)了,這樣寫:
以后你可能想指定一個(gè)Pod的固定版本的時(shí)候,可以寫上具體的版本號(hào)來指定:
pod 'Objection' , '0.9'對(duì)版本號(hào)的操作除了指定與不指定,你還可以做其他操作:
>0.1 高于0.1的任何版本 >=0.1 版本0.1和任何更高版本 <0.1 低于0.1的任何版本 <=0.1 版本0.1和任何較低的版本 ?>0.1.2 版本 0.1.2的版本到0.2 ,不包括0.2。這個(gè)基于你指定的版本號(hào)的最后一個(gè)部分。這個(gè)例子等效于>= 0.1.2并且 <0.2.0,并且始終是你指定范圍內(nèi)的最新版本版本控制列表可用做更細(xì)的版本管理
想要了解更過關(guān)于版本控制策略的信息,可以參閱:
最后,你可以使用標(biāo)示:head來指定版本. 這就意味著工程會(huì)使用指定spec下該pod的最新可以用版本,不過會(huì)強(qiáng)制下載’bleeding edge’高風(fēng)險(xiǎn)版本(HEAD).務(wù)必小心使用,因?yàn)閟pec可能導(dǎo)致不兼容
pod 'Objection', :headBuild configurations(編譯配置)
重要提示:
下面的語法是暫時(shí)的,將來很可能會(huì)更改,恕不另行通知。因?yàn)榇蠹叶荚谝筮@個(gè)功能,所以我們發(fā)布了這個(gè)功能。你可以使用它,但你可能需要改變你的Podfile去使用未來版本的CocoaPods。不管怎么樣,一個(gè)簡(jiǎn)單清晰的升級(jí)路徑會(huì)提供給你
默認(rèn)情況下, 依賴項(xiàng)會(huì)被安裝在所有target的build configuration中。為了調(diào)試或者處于其他原因,依賴項(xiàng)只能在給定的build configuration中被啟用
當(dāng)然你也可以弄白名單只指定一個(gè)build configurations
當(dāng)然你也可以只指定一個(gè)buildconfigurationsSubspecs
當(dāng)你用一個(gè)名字裝Pod的時(shí)候,它將安裝所有定義在podspec里面的默認(rèn)subspec
你可以這樣指定:
也可以指定一個(gè)集合,像下面這樣:
pod'QueryKit', :subspecs=>['Attribute','QuerySet']當(dāng)然依賴也可以從其他源來獲取
Using the files from a local path (使用本地文件)
如果你想用一個(gè)自己開發(fā)的本地的Pod,你可以用path選項(xiàng)
pod'AFNetworking', :path=>'~/Documents/AFNetworking'使用這個(gè)選項(xiàng)后,Cocoapods會(huì)將給定的文件夾認(rèn)為是Pod的源,并且在工程中直接引用這些文件。這就意味著你編輯的部分可以保留在CocoaPods安裝中
被引用的文件夾可以來自你喜愛的SCM,甚至當(dāng)前倉庫的一個(gè)git子模塊
注意:Pod的podspec文件也應(yīng)該被放在這個(gè)文件夾當(dāng)中
From a podspec in the root of a library repository (引用倉庫根目錄的podspec)
有的時(shí)候你可能想要使用一個(gè)最新的開發(fā)版本,或者某一個(gè)二次開發(fā)版本。如果是這樣,你可以在pod聲明中特別標(biāo)明
使用倉庫中的master分支:
使用倉庫的其他分支:
pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git', :branch=>'dev'使用倉庫的某個(gè)tag:
pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git', :tag=>'0.7.0'或者指定一個(gè)提交記錄:
pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git', :commit=>'082f8319af'需要特別注意的是,雖然這樣將會(huì)滿足任何在Pod中的依賴項(xiàng)通過其他Pods
但是podspec必須存在于倉庫的根目錄中,如果根目錄中沒有存在這個(gè)podspec文件,你將不得不使用下面提到的幾種方式之一
From a podspec outside a spec repository, for a library without podspec(在一個(gè)不帶podsepec的庫里引用外部的spec)
如果一個(gè)podspec能夠從外部的倉庫源的獲取,設(shè)想一下,也通過HTTP來獲取podspec:
pod'JSONKit', :podspec=>'https://example.com/JSONKit.podspec'podspec
使用一個(gè)在給定podspec中聲明的Pod的依賴項(xiàng)。如果如果沒有參數(shù)被傳遞,那么在Podfile根部的第一個(gè)podspec會(huì)被使用。它將會(huì)被庫所在的工程所使用
注意:這個(gè)不會(huì)包含哪些來自于podspec的資源而僅僅是來自于CocoaPods基礎(chǔ)架構(gòu)
例子:
target
在target塊里面定義依賴項(xiàng),如果對(duì)應(yīng)的target不想添加依賴可以用:exclusive => true參數(shù)
Podfile文件將會(huì)創(chuàng)建一個(gè)全局的target名叫:default,default將會(huì)生成一個(gè)libPod.a文件。這個(gè)target將會(huì)與用戶工程中的第一個(gè)target綁定起來如果沒有指定特殊的link_with屬性的話
例子:
定義一個(gè)target:
定義一個(gè)獨(dú)有的target:
target:ZipApp do pod 'SSZipArchive'target: test,:exclusive=>true do pod'JSONKit'end endTarget configuration (目標(biāo)項(xiàng)配置)
這些設(shè)置用來控制cocoapods生成project
開頭platform用來說明項(xiàng)目的工作平臺(tái),xcodeproj允許你指定需要鏈接的工程
platform
指定了靜態(tài)庫應(yīng)該被編譯在哪個(gè)平臺(tái)
Cocoapods提供一個(gè)默認(rèn)的部署目標(biāo)如果你自己沒有指定的話。目前的默認(rèn)設(shè)置是iOS4.3、OS X10.6、tvOS 9.0、watchOS 2.0
如果部署目標(biāo)要求iOS版本小于4.3,armv6架構(gòu)將會(huì)被添加到ARCHS中
例子:
指定平臺(tái)
xcodeproj
指定包含引用pod庫的target的Xcode工程會(huì)被鏈接到
如果沒有顯示的project被指定,那么會(huì)默認(rèn)使用target的父target指定的project作為目標(biāo)。如果如果沒有任何一個(gè)target指定目標(biāo),那么就會(huì)使用和Podefile在同一目錄下的project。同樣也能夠指定是否這些設(shè)置在release或者debug模式下生效。為了做到這一點(diǎn),你必須指定一個(gè)名字和:release/:debuge關(guān)聯(lián)起來
例子:
指定用戶工程
用自定義的編譯配置
xcodeproj'TestProject','Mac App Store'=> :release,'Test'=> :debuglink_with
指定用戶project里面中面的target鏈接到pod庫
如果沒有顯示的指定target,那么就會(huì)鏈接到工程中的第一個(gè)target。所以如果你只需要鏈接第一個(gè)target,那么你不需要使用link_with
例子:
鏈接用戶工程里面的一個(gè)target
鏈接多個(gè)target
link_with'MyApp','MyOtherApp'inhibit_all_warnings!
屏蔽cocoapods庫里面的所有警告
這個(gè)特性也能在子target里面定義
如果你想屏蔽某pod里面的警告也是可以的:
pod'SSZipArchive', :inhibit_warnings=>trueuse_frameworks!
可以用framework的pod替代靜態(tài)庫的
這個(gè)特性可以通過定義子target來繼承
Workspace(工作區(qū))
這部分內(nèi)容列舉了配置workspace的選項(xiàng)和設(shè)置全局配置
workspace
指定應(yīng)該包含所有projects的Xcode workspace.
如果沒有顯示指定workspace并且在Podfile所在目錄只有一個(gè)project,那么project的名稱會(huì)被用作于workspace的名稱
例子:
指定一個(gè)workspace
generate_bridge_support!
指定后從所有已經(jīng)安裝的pod的頭文件中會(huì)生成一個(gè)BridgeSupport元數(shù)據(jù)文檔
一些腳本語言例如MacRuby,Nu,JSCocoa能夠利用這些作為橋接類型、函數(shù)等等
set_arc_compatibility_flag!
指定后-fobjc-arcflag會(huì)被添加到OTHER_LD_FLAGS中
這個(gè)是用來解決編譯non-ARC項(xiàng)目出現(xiàn)的一個(gè)的bug(詳見 #142)。本來這些事情都是有Xcode4.3.2中的libtool自動(dòng)完成的,不過看來現(xiàn)在flag-fobjc-arc已經(jīng)不被支持了。所以必須顯示的指定使用這個(gè)方法
這個(gè)方法在CocoaPods 1.0中也許會(huì)被廢棄
Sources
Podfile檢索了所有sources(repos)中的specs
Sources是全局的,不存儲(chǔ)在每個(gè)target定義里面
source
指定specs的位置
使用這個(gè)方法指定sources。sources的順序是有關(guān)系的的。CocoaPods將使用pod第一次出現(xiàn)的source中的最高版本(后續(xù)的source中哪怕出現(xiàn)了更高的版本,也不予考慮)
cocoapods 官方source是隱式的需要的,一旦你指定了其他source 你就需要也把官方的指定上
例子:
指定Artsy庫然后帶上官方的
Hooks(鉤子)
Podfile提供了鉤子用來在安裝時(shí)被調(diào)用
鉤子是全局的,不存儲(chǔ)在每個(gè)target定義里面
plugin
指定的插件應(yīng)該使用在安裝過程中
使用此方法來指定一個(gè)插件,應(yīng)該在安裝過程中使用,同時(shí),應(yīng)傳遞給插件調(diào)用時(shí)的選項(xiàng)
例子:
指定用slather和cocoapods-keys插件
pre_install
這個(gè)鉤子允許你在Pods被下載后但是還未安裝前對(duì)Pods做一些改變
它接受Pod::Installer作為唯一參數(shù)
例子:
定義pre_install鉤子
post_install
這個(gè)鉤子允許你在生成的Xcode project寫入硬盤或者其他你想執(zhí)行的操作前做最后的改動(dòng)
它接受Pod::Installer作為唯一參數(shù)
例子:
給所有target自定義編譯配置
轉(zhuǎn)載于:https://www.cnblogs.com/xulinmei/p/7419936.html
總結(jié)
以上是生活随笔為你收集整理的Podfile grammar的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浦发华润通联名信用卡积分怎么累积?这些积
- 下一篇: 11. 临时表