Podfile看我就夠了

Podfile


Podfile文件是一個描述target的依賴庫規(guī)范苟弛。

一個簡單的Podfile文件是這樣的:

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

也可以更復雜:

platform :ios, '9.0'
inhibit_all_warnings!

target 'MyApp' do
  pod 'ObjectiveSugar', '~> 0.5'

  target 'MyAppTests' do
    inherit! :search_paths
    pod 'OCMock', '~> 2.0.1'
  end
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    puts "#{target.name}"
  end
end

install!


通過install!可以指定安裝依賴庫的一些選項献汗。
基本語法:
install! + 安裝語法 + 安裝選項
例如:

install! 'cocoapods',
         :deterministic_uuids => false,
         :integrate_targets => false

目前安裝方法只有cocoapods這個方法躲履。

安裝選項

:clean
安裝的時候是否需要刪除依賴庫未用到的文件姻报。
默認時true

deduplicate_targets
當多個target對一個依賴庫有不同的需求時推励,是否要避免重復曲梗。一般是通過添加后綴來避免重復。
默認是true

例如:

target 'MyTargetA' do
  pod 'MyPod/SubA'
end

target 'MyTargetB' do
  pod 'MyPod'
end

MyTargetA和MyTargetB都引用MyPod庫弄跌,如果設(shè)置成true甲喝,就會生成MyPodMyPod-SubA

:deterministic_uuids
創(chuàng)建pods項目時是否生成準確的UUID。默認為true铛只。
但是我們習慣設(shè)置為false

:integrate_targets
是否要將安裝的依賴庫集成到用戶的項目中埠胖。默認是true。
如果設(shè)置成false淳玩,依賴庫會放到Pods/,而不會放到用戶項目中直撤。

小結(jié)

對于以上這些選項,我們一般使用默認就行了凯肋。

Dependencies


Pod

pod 'SSZipArchive'

默認會安裝最新版本谊惭。

pod 'Objection', '0.9'

安裝制定版本的依賴庫。它還支持以下操作符:

  • = 0.1:版本0.1
  • > 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侮东,但是不包含0.2.0
  • ~> 0.1.3-beta.0:安裝0.1.3的測試版本或release版本
Build configurations

默認情況下圈盔,依賴庫是安裝在所有配置環(huán)境下的(如果你配置了FAT、UAT環(huán)境)悄雅。
但是我們可以指定安裝在某些(DEBUFG驱敲、UAT)配置環(huán)境下:

pod 'PonyDebugger', :configurations => ['DEBUFG', 'UAT']

也可以指定只安裝在DEBUFG環(huán)境下

pod 'PonyDebugger', :configuration => 'DEBUFG'
Modular Headers

use_modular_headers

Source

指定安裝源

指定某一個依賴庫的安裝源

pod 'PonyDebugger', :source => 'https://github.com/CocoaPods/Specs.git'

也可以全局指定:

source 'http://gitlab.hellokitty.cn/iOSPrivateSpecsRepo.git'
Subspecs

子模塊,我們可以通過以下方式安裝子模塊

安裝QueryKit下的Attribute模塊宽闲。

pod 'QueryKit/Attribute'

安裝QueryKit下的Attribute模塊和QuerySet模塊众眨。

pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
Test Specs

安裝某個依賴庫下的單元測試

pod 'AFNetworking', :testspecs => ['UnitTests', 'SomeOtherTests']
從本地庫Pod
pod 'AFNetworking', :path => '~/Documents/AFNetworking'

它會將Documents下的AFNetworking link到pod項目中握牧。

從遠程倉庫pod
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'

從AFNetworking遠程倉庫pod,當然我們還可以指定它的分支:

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'

指定tag:

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'

指定commit:

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'
從存儲庫外的其他源pod
pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'

通過指定一個http的podspec

podspec

依賴庫的配置文件娩梨。
安裝依賴庫的時候沿腰,它是從podspec指定的地址去pod的。如果沒有參數(shù)狈定,則使用podfile根目錄中的第一個podspec颂龙。

podspec :name => 'QuickDialog'

根據(jù)podspec的name去pod。

podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'

根據(jù)本地的podspec去pod纽什。

target

定義一個CocoaPods目標措嵌,它將要安裝的依賴庫限制在一個塊中。這個target要跟Xcode的target一致芦缰。默認情況下企巢,target包含塊以外的所有依賴庫,除非指定了inherit!.
定義一個target

target 'ZipApp' do
  pod 'SSZipArchive'
end

通過inherit!繼承的方式來安裝SSZipArchive

target 'ZipApp' do
  pod 'SSZipArchive'

  target 'ZipAppTests' do
    inherit! :search_paths
    pod 'Nimble'
  end
end

ShowsTests安裝了Specta和Expecta庫让蕾,同時還繼承了父target的ShowsKit

target 'ShowsApp' do
  pod 'ShowsKit'

  # Has its own copy of ShowsKit + ShowTVAuth
  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end

  # Has its own copy of Specta + Expecta
  # and has access to ShowsKit via the app
  # that the test target is bundled into

  target 'ShowsTests' do
    inherit! :search_paths
    pod 'Specta'
    pod 'Expecta'
  end
end

script_phase

給target添加腳本浪规,一個目標可以包含多個腳本,執(zhí)行順序按添加順序執(zhí)行探孝。
指定腳本名稱HelloWorldScript罗丰,腳本是打印出hello world

script_phase :name => 'HelloWorldScript', :script => 'echo "Hello World"'

指定腳本名稱HelloWorldScript,腳本是打印出hello world再姑,并指出shell_path

script_phase :name => 'HelloWorldScript', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby'

abstract_target

定義一個抽象的target方便子target繼承依賴

abstract_target 'Networking' do
  pod 'AlamoFire'

  target 'Networking App 1'
  target 'Networking App 2'
end

定義抽象Networking,Networking App 1和Networking App 2找御,都安裝了依賴AlamoFire

定義一個依賴包含多個target

# Note: There are no targets called "Shows" in any of this workspace's Xcode projects
abstract_target 'Shows' do
  pod 'ShowsKit'

  # The target ShowsiOS has its own copy of ShowsKit (inherited) + ShowWebAuth (added here)
  target 'ShowsiOS' do
    pod 'ShowWebAuth'
  end

  # The target ShowsTV has its own copy of ShowsKit (inherited) + ShowTVAuth (added here)
  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end

  # Our tests target has its own copy of
  # our testing frameworks, and has access
  # to ShowsKit as well because it is
  # a child of the abstract target 'Shows'

  target 'ShowsTests' do
    inherit! :search_paths
    pod 'Specta'
    pod 'Expecta'
  end
end

abstract!

指明當前target是抽象的元镀,因此不會直接鏈接到Xcode目標。

inherit!

它有三種可用mode:

  • :complete:所有的都繼承于父target
  • :none:都不繼承父target
  • :search_paths:僅僅serach path繼承父target

Target configuration


platform

指定依賴庫構(gòu)建在哪個平臺上霎桅,可以指定ios栖疑、osx、tvos滔驶、watchos

project

指定一個Xcode project遇革,它包含pod依賴庫可以鏈接到的target
如果沒想顯示指明project,就使用跟Podfile同一目錄的project.

# This Target can be found in a Xcode project called `FastGPS`
target 'MyGPSApp' do
  project 'FastGPS'
  ...
end

# Same Podfile, multiple Xcodeprojects
target 'MyNotesApp' do
  project 'FastNotes'
  ...
end

還可以指定自定義的build configurations(如果配置了多個configurations)

project 'TestProject', 'Mac App Store' => :release, 'Test' => :debug

inhibit_all_warnings!

禁止來自依賴庫的警告

禁止SSZipArchive的警告

pod 'SSZipArchive', :inhibit_warnings => true

也可以全局配置

use_frameworks!

pod 的依賴庫是framework而不是靜態(tài)庫

在Xcode9之前揭糕,swift是不支持靜態(tài)庫的萝快,因此,需要是否使用某些依賴庫必須要設(shè)置use_frameworks!著角,但是在CocoaPods 1.5.0揪漩,開發(fā)者不需要在podfile文件中
設(shè)置use_frameworks!

use_modular_headers!

對所有cocoapods靜態(tài)庫使用模塊化頭文件。
例如:
可以在pod B中引入文件A#import "A.h",cocoapods將創(chuàng)建構(gòu)建設(shè)置以便能引入成功吏口,但是奄容,如果您嘗試將模塊映射添加到這些pods中冰更,這樣的導入將不起作用。許多年前昂勒,我們嘗試自動為靜態(tài)庫生成模塊映射蜀细。
在CocoaPods 1.5.0,可以通過設(shè)置use_modular_headers!為所有pod啟用更嚴格的搜索路徑和模塊映射

不明白的話戈盈,可以看這篇文章

Hooks


pre_install

這個hook可以允許你在依賴庫下載完之后但是還沒安裝時對其進行任何更改奠衔。

pre_install do |installer|
  # Do something fancy!
end

post_install

這個hook允許你在將生成的Xcode項目寫入磁盤之前對其進行任何最后的更改,或者執(zhí)行任何其他您可能想要執(zhí)行的任務奕谭。

為所有的targets自定義build settings

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

supports_swift_versions

指定swift版本

target 'MyApp' do
  supports_swift_versions '>= 3.0', '< 4.0'
  pod 'AFNetworking', '~> 1.0'
end
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涣觉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子血柳,更是在濱河造成了極大的恐慌官册,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件难捌,死亡現(xiàn)場離奇詭異膝宁,居然都是意外死亡,警方通過查閱死者的電腦和手機根吁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門员淫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人击敌,你說我怎么就攤上這事介返。” “怎么了沃斤?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵圣蝎,是天一觀的道長。 經(jīng)常有香客問我衡瓶,道長徘公,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任哮针,我火速辦了婚禮关面,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘十厢。我一直安慰自己等太,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布蛮放。 她就那樣靜靜地躺著澈驼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筛武。 梳的紋絲不亂的頭發(fā)上缝其,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天挎塌,我揣著相機與錄音,去河邊找鬼内边。 笑死榴都,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的漠其。 我是一名探鬼主播嘴高,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼和屎!你這毒婦竟也來了拴驮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤柴信,失蹤者是張志新(化名)和其女友劉穎套啤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體随常,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡潜沦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绪氛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唆鸡。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖枣察,靈堂內(nèi)的尸體忽然破棺而出争占,到底是詐尸還是另有隱情,我是刑警寧澤序目,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布燃乍,位于F島的核電站,受9級特大地震影響宛琅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逗旁,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一嘿辟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧片效,春花似錦红伦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至膨桥,卻和暖如春蛮浑,著一層夾襖步出監(jiān)牢的瞬間唠叛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工沮稚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留艺沼,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓蕴掏,卻偏偏與公主長得像障般,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盛杰,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

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

  • 項目組件化挽荡、平臺化是技術(shù)公司的共同目標,越來越多的技術(shù)公司推崇使用pod管理第三方庫以及私有組件即供,一方面使項目架構(gòu)...
    swu_luo閱讀 21,887評論 0 39
  • CocoaPods操作手冊 本文檔介紹了啥定拟? 為什么要使用CocoaPods? 如何安裝CocoaPods募狂? Po...
    風小鉆閱讀 7,577評論 1 10
  • Ruby 安裝 要安裝cocospods 首先需要安裝ruby办素,可以先安裝xcode,再安裝macport 祸穷,最后...
    山天大畜閱讀 1,863評論 0 1
  • 一. CocoaPods的介紹 什么是CocoaPods性穿?CocoaPods是一個負責管理iOS項目中第三方開源庫...
    輝712閱讀 3,939評論 0 7
  • 經(jīng)常使用CocoaPods來管理iOS項目中的第三方庫,但是我們要使用CocoaPods來管理第三方庫雷滚,前提是要寫...
    qitianjin閱讀 1,359評論 2 0