iOS架构-cocoaPods之Podfile语法(18)
podfile語法
前言
iOS開發(fā)會(huì)經(jīng)常用到cocoapods管理第三方,簡(jiǎn)單、方便、高效。如何集成cocoapods在cocoapods官網(wǎng)和Podfile語法說明會(huì)有詳細(xì)介紹,本想介紹的是關(guān)于集成cocoapods時(shí)會(huì)用到的一個(gè)文件Podfile文件。
什么是Podfile
Podfile是一個(gè)規(guī)范,描述了一個(gè)或多個(gè)一套工程目標(biāo)的依賴項(xiàng),Podfile語法。需要不同復(fù)雜程度不同。
一個(gè)簡(jiǎn)單寫法:
target ‘MyApp’ do
pod ‘AFNetworking’, ‘~> 3.0’
end
這是最簡(jiǎn)單最普遍的寫法,針對(duì)MyApp這個(gè)target引入AFNetworking這個(gè)依賴庫,也是大家平時(shí)用的最多的一種方式。
下面是個(gè)更復(fù)雜的一個(gè)例子:
# 下面兩行是指明依賴庫的來源地址 source 'https://github.com/CocoaPods/Specs.git' #公共庫repo source 'https://github.com/Artsy/Specs.git' #私有repo# 說明平臺(tái)是ios,版本是9.0 platform :ios, '9.0'# 忽略引入庫的所有警告(強(qiáng)迫癥者的福音啊) inhibit_all_warnings!# 針對(duì)MyApp target引入AFNetworking # 針對(duì)MyAppTests target引入OCMock, target 'MyApp' do pod 'AFNetworking', '~> 3.0' endtarget 'MyAppTests' do inherit! :search_paths pod 'OCMock', '~> 2.0.1' end在一個(gè)工程目錄下顯示多個(gè)target
$POD_SPEC_PATH 聲明變量
$POD_SPEC_PATH = '~/.cocoapods/repos/SNEBuy_repos/' $POD_EBUY_PUBLIC_RESOURCES = $POD_SPEC_PATH + 'EbuyResource/0.0.3'pod - 指定項(xiàng)目的依賴項(xiàng)
0.1 高于0.1版本(不包含0.1版本)的任意一個(gè)版本
= 0.1 高于0.1版本(包含0.1版本)的任意一個(gè)版本
< 0.1 低于0.1版本(不包含0.1版本)的任意一個(gè)
<= 0.1低于0.1版本(包含0.1版本)的任意一個(gè)
~> 0.1.2 版本 0.1.2的版本到0.2 ,不包括0.2。這個(gè)基于你指定的版本號(hào)的最后一個(gè)部分。這個(gè)例子等效于>= 0.1.2并且 <0.2.0,并且始終是你指定范圍內(nèi)的最新版本。
Build configurations(編譯配置)
默認(rèn)情況下, 依賴項(xiàng)會(huì)被安裝在所有target的build configuration中。為了調(diào)試或者處于其他原因,依賴項(xiàng)只能在給定的build configuration中被啟用。
下面寫法指明只有在Debug和Beta模式下才有啟用配置
或者,可以弄白名單只指定一個(gè)build configurations。
pod 'PonyDebugger', :configuration => 'Debug'注意:默認(rèn)情況下如果不指定具體生成配置,那么會(huì)包含在所有的配置中,如果你想具體指定就必須手動(dòng)指明。
Subspecs
般情況我們會(huì)通過依賴庫的名稱來引入,cocoapods會(huì)默認(rèn)安裝依賴庫的所有內(nèi)容。我們也可以指定安裝具體依賴庫的某個(gè)子模塊,例如:
- 僅安裝QueryKit庫下的Attribute模塊
- 僅安裝QueryKit下的Attribute和QuerySet模塊
使用本地文件
- 我們也可以指定依賴庫的來源地址。如果想引入我們本地的一個(gè)庫,可以這樣寫:
使用這個(gè)選項(xiàng)后,Cocoapods會(huì)將給定的文件夾認(rèn)為是Pod的源,并且在工程中直接引用這些文件。這就意味著你編輯的部分可以保留在CocoaPods安裝中,如果我們更新本地AFNetworking里面的代碼,cocoapods也會(huì)自動(dòng)更新。
注意:Pod的podspec文件也應(yīng)該被放在這個(gè)文件夾當(dāng)中
引用倉庫根目錄的podspec
有時(shí)我們需要引入依賴庫指定的分支或節(jié)點(diǎn),寫法如下。
- 引入master分支(默認(rèn))
- 引入指定的分支
- 引入某個(gè)節(jié)點(diǎn)的代碼
- 引入某個(gè)特殊的提交節(jié)點(diǎn)
特別注意:雖然這樣將會(huì)滿足任何在Pod中的依賴項(xiàng)通過其他Pods 但是podspec必須存在于倉庫的根目錄中。
Podfile.lock文件:
當(dāng)團(tuán)隊(duì)中的某個(gè)人執(zhí)行完pod install命令后,生成的Podfile.lock文件就記錄下了當(dāng)時(shí)最新Pods依賴庫的版本,這時(shí)團(tuán)隊(duì)中的其它人check下來這份包含Podfile.lock文件的工程以后,再去執(zhí)行pod install命令時(shí),獲取下來的Pods依賴庫的版本就和最開始用戶獲取到的版本一致。如果沒有Podfile.lock文件,后續(xù)所有用戶執(zhí)行pod install命令都會(huì)獲取最新版本的SBJson,這就有可能造成同一個(gè)團(tuán)隊(duì)使用的依賴庫版本不一致, 這對(duì)團(tuán)隊(duì)協(xié)作來說絕對(duì)是個(gè)災(zāi)難!
作者:一川煙草i蓑衣
鏈接:https://www.jianshu.com/p/7c3fceaf4e92
來源:簡(jiǎn)書
簡(jiǎn)書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。
從外部引入podspec引入
- podspec可以從另一個(gè)源庫的地址引入
podspec
使用給定podspec文件中定義的代碼庫的依賴關(guān)系。如果沒有傳入任何參數(shù),podspec優(yōu)先使用根目錄,如果是其他情況必須在后面指明。(一般使用默認(rèn)設(shè)置即可)例如:
# 不指定表示使用根目錄下的podspec,默認(rèn)一般都會(huì)放在根目錄下 podspec # 如果podspec的名字與庫名不一樣,可以通過這樣來指定 podspec :name => 'QuickDialog' # 如果podspec不是在根目錄下,那么可以通過:path來指定路徑 podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'target
在給定的塊內(nèi)定義pod的target(Xcode工程中的target)和指定依賴的范圍。一個(gè)target應(yīng)該與Xcode工程的target有關(guān)聯(lián)。默認(rèn)情況下,target會(huì)包含定義在塊外的依賴,除非指定不使用inherit!來繼承(說的是嵌套的塊里的繼承問題)
- 定義一個(gè)簡(jiǎn)單target ZipApp引入SSZipArchive庫
- 定義一個(gè)target:ZipApptarget僅引入SSZipArchive庫,定義target:ZipAppTests引入Nimble的同時(shí)也會(huì)繼承target:ZipApp里面的SSZipArchive庫
- target塊中嵌套多個(gè)子塊
抽象target
定義一個(gè)新的抽象目標(biāo),它可以方便的用于目標(biāo)依賴?yán)^承。
- 簡(jiǎn)單寫法
- 定義一種abstract_target包含多個(gè)target
abstract! 和 inherit!
- abstract! 指示當(dāng)前的target是抽象的,因此不會(huì)直接鏈接Xcode target。
- inherit! 設(shè)置當(dāng)前target的繼承模式。例如:
iOS app多個(gè)開發(fā)環(huán)境變量(target)下配置Podfile文件
Target configuration (目標(biāo)項(xiàng)配置待補(bǔ)充。。。)
使用target 配置來控制的cocoapods生成project。
開始時(shí)詳細(xì)說明您正在使用什么平臺(tái)上。工程文件里允許您具體說明哪些項(xiàng)目的鏈接。
platform
platform用于指定應(yīng)建立的靜態(tài)庫的平臺(tái)。CocoaPods提供了默認(rèn)的平臺(tái)版本配置:
#指定具體平臺(tái)和版本 platform :ios, '4.0'project
如果沒有顯示的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)起來
Examples:
Specifying the user project
- 使用自定義的編譯配置
inhibit_all_warnings!
屏蔽所有來自于cocoapods依賴庫的警告。你可以全局定義,也能在子target里面定義,也可以指定某一個(gè)庫:
# 隱藏SSZipArchive的警告而不隱藏ShowTVAuth的警告 pod 'SSZipArchive', :inhibit_warnings => true pod 'ShowTVAuth', :inhibit_warnings => false use_frameworks!通過指定use_frameworks!要求生成的是framework而不是靜態(tài)庫。
如果使用use_frameworks!命令會(huì)在Pods工程下的Frameworks目錄下生成依賴庫的framework
如果不使用use_frameworks!命令會(huì)在Pods工程下的Products目錄下生成.a的靜態(tài)庫
Workspace
默認(rèn)情況下,我們不需要指定,直接使用與Podfile所在目錄的工程名一樣就可以了。如果要指定另外的名稱,而不是使用工程的名稱,可以這樣指定:
workspace 'MyWorkspace'Source
source是指定pod的來源。如果不指定source,默認(rèn)是使用CocoaPods官方的source。(建議使用默認(rèn)設(shè)置)
CocoaPods Master Repository # 使用其他來源地址 source 'https://github.com/artsy/Specs.git' # 使用官方默認(rèn)地址(默認(rèn)) source 'https://github.com/CocoaPods/Specs.git'Plugin
- 指定應(yīng)在安裝期間使用的插件。使用此方法指定應(yīng)在安裝期間使用的插件,以及當(dāng)它被調(diào)用時(shí),應(yīng)傳遞給插件的選項(xiàng)。例如:
- 當(dāng)我們下載完成,但是還沒有安裝之時(shí),可以使用hook機(jī)制通過pre_install指定要做更改,更改完之后進(jìn)入安裝階段。
格式如下:
- 當(dāng)我們安裝完成,但是生成的工程還沒有寫入磁盤之時(shí),我們可以指定要執(zhí)行的操作。
比如,我們可以在寫入磁盤之前,修改一些工程的配置:
- 1.我們還可以通過def命令來聲明一個(gè)pod集:
- 2.然后,我們就可以在需要引入的target處引入:
這么寫的好處是:如果有多個(gè)target,而不同target之間并不全包含,那么可以通過這種方式來分開引入。
Hooks
Podfile提供了hook機(jī)制,它將在安裝過程中調(diào)用。hook是全局性的,不存儲(chǔ)于每個(gè)target中。
.podspec:
s.source_files = "*.{h,m}" //源碼文件類型 s.source = { :git => "", :tag => "0.01" } //git 地址s.dependency'AFNetworking','~> 1.0' //依賴的第三方 s.requires_arc = true //是否支持arc s.frameworks = "QuartzCore", "CoreData" //使用的框架 s.libraries ='xml2','z' //z表示libz.tdb,后綴不需要,lib開頭的省略lib,libraries 比如libz,sqlite3.0等,多個(gè)用逗號(hào)分開s.vendored_frameworks ='MyFramework.framework','TheirFramework.framework' //己的或者第三方framework,比qqSDK的TencentOpenAPI.frameworks.vendored_libraries ='libProj4.a','libJavaScriptCore.a' //自己的或者第三方.a文件,比如微信SDK的.a文件 s.resources = ['Images/*.png','Sounds/*'] //資源文件總結(jié)
以上是生活随笔為你收集整理的iOS架构-cocoaPods之Podfile语法(18)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [java之牛客网每日练习]
- 下一篇: 初识Redfish