CocoaPods中Podfile語法(轉)

一個簡單的Podfile

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

一個復雜的Podfile

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

Root Options

install!

pod install執(zhí)行時的一些設置。

示例:

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

支持關鍵字:

:clean
:deduplicate_targets
:deterministic_uuids
:integrate_targets
:lock_pod_sources

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.1’ 相當于'>= 0.1 且 ‘< 1.0’
  • ‘~> 0’ 相當于不寫猜极,即最新版本

編譯配置

// 在Release和App Store模式引用該庫
pod 'PonyDebugger', :configurations => ['Release', 'App Store']
// 在Release模式引用該庫
pod 'PonyDebugger', :configuration => ['Release']

Subspecs

在使用開源庫時,只是用該庫的一部分消玄,可是使用如下寫法跟伏。前提是當前庫是支持Subspecs的。

// 只引用QueryKit的Attribute子庫翩瓜,不包含其它子庫
pod 'QueryKit/Attribute'
// 只引用QueryKit的Attribute和QuerySet子庫受扳,不包含其它子庫
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']

使用本地路徑下的文件

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

使用已通過認證的repo

// 使用master分支
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
// 使用指定分支
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'
// 使用某一次提交
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'

指定podspec文件

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

podspec

我也不太明白

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

target

定義一個依賴庫與target(Xcode project)的關系。每個target應該對應一個Xcode target兔跌。默認情況下勘高,子target的依賴關系是包含父target的,除非指定非繼承父target坟桅。
定義一個target

target "ZipApp" do
  pod 'SSZipArchive'
end

在父target中定義SSZipArchive pod华望,僅支持父target

target "ZipApp" do
  pod 'SSZipArchive'

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

通過在父target中定義target應用Pods支持多個targets

target "ShowsApp" do
  pod 'ShowsKit'

  # Has it's own copy of ShowsKit + ShowTVAuth
  target "ShowsTV" do
    pod "ShowTVAuth"
  end

  # Has it's 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

abstract_target

定義一個abstract_target,方便被所有繼承target使用仅乓。

定義abstract_target

abstract_target 'Networking' do
  pod 'AlamoFire'

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

定義一個abstract_target包含多個targets

# There are no targets called "Shows" in any Xcode projects
abstract_target "Shows" do
  pod 'ShowsKit'

  # Has it's own copy of ShowsKit + ShowWebAuth
  target "ShowsiOS" do
    pod "ShowWebAuth"
  end

  # Has it's own copy of ShowsKit + ShowTVAuth
  target "ShowsTV" do
    pod "ShowTVAuth"
  end

  # Has it's 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

abstract!

表示當前target是抽象的赖舟,不會與真正的Xcode target掛鉤。

inherit!

設置當前target的繼承模式夸楣。

// Inheriting only search paths
target 'App' do
  target 'AppTests' do
    inherit! :search_paths
  end
end

Target configuration

這些設置是控制被生成project的CocoaPods宾抓。包括指定編譯platform、指定鏈接的xcodeproj豫喧。

platform

如果不指定石洗,CocosPods將是默認值,當前默認值是:
4.3 for iOS, 10.6 for OS X, 9.0 for tvOS and 2.0 for watchOS.
如果對系統(tǒng)有要求(iOS < 4.3),armv6 框架將添加至ARCHS.

platform :ios, "4.0"
platform :ios

project

指定當前target鏈接的project紧显。若未指定讲衫,表示target鏈接與同路徑(與podfile文件同路徑)下target同名的project。

指定用戶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

有戶自定義編譯設置

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

xcodeproj

TODO: This method can be deleted once people have migrated to this 1.0 DSL.

link_with

TODO: This method can be deleted once people have migrated to this 1.0 DSL.

inhibit_all_warnings!

抑制CocoaPods庫的所有警告孵班。該屬性會被子target繼承涉兽。

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

use_frameworks!

用frameworks 替代Pods靜態(tài)庫。該屬性被子target繼承重父。

Workspace

workspace

指定workspace花椭。若未指定,表示是與podfile同路徑下房午,且與target同名的workspace文件。例如:

workspace 'MyWorkspace'

generate_bridge_support!

Specifies that a BridgeSupport metadata document should be generated from the headers of all installed Pods.
This is for scripting languages such as MacRuby, Nu, and JSCocoa, which use it to bridge types, functions, etc.

set_arc_compatibility_flag!

已經(jīng)被CocoaPods 1.0放棄丹允。

Source

指定資源位置郭厌。

source 'https://github.com/artsy/Specs.git'
source 'https://github.com/CocoaPods/Specs.git'

Hooks

plugin

指定需要的插件袋倔。

plugin 'cocoapods-keys', :keyring => 'Eidolon'
plugin 'slather'

pre_install

Hook允許用戶在Pods下載完成,但還未安裝前對Pods做一些修改折柠。
它接受 Pod::Installer 作為唯一的參數(shù).

在Podfile定義pre-install hook

pre_install do |installer|
  # Do something fancy!
end

post_install

Hook允許用戶在被寫入硬盤宾娜、或者任何你想做的其它任務之前,對生成的Xcode project做最后的改變扇售。

它接受 Pod::Installer 作為唯一的參數(shù).

例如:

Customising the build settings of all targets
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

一個簡單的Podfile

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

一個復雜的Podfile

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

Root Options

install!

pod install執(zhí)行時的一些設置前塔。

示例:

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

支持關鍵字:

:clean
:deduplicate_targets
:deterministic_uuids
:integrate_targets
:lock_pod_sources

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.1’ 相當于'>= 0.1 且 ‘< 1.0’
  • ‘~> 0’ 相當于不寫华弓,即最新版本

編譯配置

// 在Release和App Store模式引用該庫
pod 'PonyDebugger', :configurations => ['Release', 'App Store']
// 在Release模式引用該庫
pod 'PonyDebugger', :configuration => ['Release']

Subspecs

在使用開源庫時,只是用該庫的一部分困乒,可是使用如下寫法寂屏。前提是當前庫是支持Subspecs的。

// 只引用QueryKit的Attribute子庫娜搂,不包含其它子庫
pod 'QueryKit/Attribute'
// 只引用QueryKit的Attribute和QuerySet子庫迁霎,不包含其它子庫
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']

使用本地路徑下的文件

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

使用已通過認證的repo

// 使用master分支
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
// 使用指定分支
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'
// 使用某一次提交
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'

指定podspec文件

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

podspec

我也不太明白

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

target

定義一個依賴庫與target(Xcode project)的關系。每個target應該對應一個Xcode target百宇。默認情況下考廉,子target的依賴關系是包含父target的,除非指定非繼承父target携御。
定義一個target

target "ZipApp" do
  pod 'SSZipArchive'
end

在父target中定義SSZipArchive pod芝此,僅支持父target

target "ZipApp" do
  pod 'SSZipArchive'

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

通過在父target中定義target應用Pods支持多個targets

target "ShowsApp" do
  pod 'ShowsKit'

  # Has it's own copy of ShowsKit + ShowTVAuth
  target "ShowsTV" do
    pod "ShowTVAuth"
  end

  # Has it's 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

abstract_target

定義一個abstract_target,方便被所有繼承target使用因痛。

定義abstract_target

abstract_target 'Networking' do
  pod 'AlamoFire'

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

定義一個abstract_target包含多個targets

# There are no targets called "Shows" in any Xcode projects
abstract_target "Shows" do
  pod 'ShowsKit'

  # Has it's own copy of ShowsKit + ShowWebAuth
  target "ShowsiOS" do
    pod "ShowWebAuth"
  end

  # Has it's own copy of ShowsKit + ShowTVAuth
  target "ShowsTV" do
    pod "ShowTVAuth"
  end

  # Has it's 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

abstract!

表示當前target是抽象的婚苹,不會與真正的Xcode target掛鉤。

inherit!

設置當前target的繼承模式鸵膏。

// Inheriting only search paths
target 'App' do
  target 'AppTests' do
    inherit! :search_paths
  end
end

Target configuration

這些設置是控制被生成project的CocoaPods膊升。包括指定編譯platform、指定鏈接的xcodeproj谭企。

platform

如果不指定廓译,CocosPods將是默認值,當前默認值是:
4.3 for iOS, 10.6 for OS X, 9.0 for tvOS and 2.0 for watchOS.
如果對系統(tǒng)有要求(iOS < 4.3),armv6 框架將添加至ARCHS.

platform :ios, "4.0"
platform :ios

project

指定當前target鏈接的project债查。若未指定非区,表示target鏈接與同路徑(與podfile文件同路徑)下target同名的project。

指定用戶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

有戶自定義編譯設置

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

xcodeproj

TODO: This method can be deleted once people have migrated to this 1.0 DSL.

link_with

TODO: This method can be deleted once people have migrated to this 1.0 DSL.

inhibit_all_warnings!

抑制CocoaPods庫的所有警告盹廷。該屬性會被子target繼承征绸。

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

use_frameworks!

用frameworks 替代Pods靜態(tài)庫。該屬性被子target繼承。

Workspace

workspace

指定workspace管怠。若未指定淆衷,表示是與podfile同路徑下,且與target同名的workspace文件渤弛。例如:

workspace 'MyWorkspace'

generate_bridge_support!

Specifies that a BridgeSupport metadata document should be generated from the headers of all installed Pods.
This is for scripting languages such as MacRuby, Nu, and JSCocoa, which use it to bridge types, functions, etc.

set_arc_compatibility_flag!

已經(jīng)被CocoaPods 1.0放棄祝拯。

Source

指定資源位置。

source 'https://github.com/artsy/Specs.git'
source 'https://github.com/CocoaPods/Specs.git'

Hooks

plugin

指定需要的插件她肯。

plugin 'cocoapods-keys', :keyring => 'Eidolon'
plugin 'slather'

pre_install

Hook允許用戶在Pods下載完成佳头,但還未安裝前對Pods做一些修改。
它接受 Pod::Installer 作為唯一的參數(shù).

在Podfile定義pre-install hook

pre_install do |installer|
  # Do something fancy!
end

post_install

Hook允許用戶在被寫入硬盤晴氨、或者任何你想做的其它任務之前康嘉,對生成的Xcode project做最后的改變。

它接受 Pod::Installer 作為唯一的參數(shù).

例如:

Customising the build settings of all targets
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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末瑞筐,一起剝皮案震驚了整個濱河市凄鼻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌聚假,老刑警劉巖块蚌,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異膘格,居然都是意外死亡峭范,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門瘪贱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纱控,“玉大人,你說我怎么就攤上這事菜秦√鸷Γ” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵球昨,是天一觀的道長尔店。 經(jīng)常有香客問我,道長主慰,這世上最難降的妖魔是什么嚣州? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮共螺,結果婚禮上该肴,老公的妹妹穿的比我還像新娘。我一直安慰自己藐不,他們只是感情好匀哄,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布秦效。 她就那樣靜靜地躺著,像睡著了一般拱雏。 火紅的嫁衣襯著肌膚如雪棉安。 梳的紋絲不亂的頭發(fā)上底扳,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天铸抑,我揣著相機與錄音,去河邊找鬼衷模。 笑死鹊汛,一個胖子當著我的面吹牛,可吹牛的內容都是我干的阱冶。 我是一名探鬼主播刁憋,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼木蹬!你這毒婦竟也來了至耻?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤镊叁,失蹤者是張志新(化名)和其女友劉穎尘颓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晦譬,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡疤苹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了敛腌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卧土。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖像樊,靈堂內的尸體忽然破棺而出尤莺,到底是詐尸還是另有隱情,我是刑警寧澤生棍,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布颤霎,位于F島的核電站,受9級特大地震影響足绅,放射性物質發(fā)生泄漏捷绑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一氢妈、第九天 我趴在偏房一處隱蔽的房頂上張望粹污。 院中可真熱鬧,春花似錦首量、人聲如沸壮吩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸭叙。三九已至觉啊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沈贝,已是汗流浹背杠人。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宋下,地道東北人嗡善。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像学歧,于是被迫代替她去往敵國和親罩引。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容

  • CocoaPods操作手冊 本文檔介紹了啥枝笨? 為什么要使用CocoaPods袁铐? 如何安裝CocoaPods? Po...
    風小鉆閱讀 7,577評論 1 10
  • 轉自此文覺得整理的很清楚,還有一篇官方譯文 一個簡單的Podfile 一個復雜的Podfile Root Opti...
    Jabir_Zhang閱讀 8,294評論 1 18
  • 前言 iOS開發(fā)會經(jīng)常用到cocoapods管理第三方领炫,簡單帝洪、方便脚猾、高效。如何集成cocoapods在cocoap...
    Moker_C閱讀 868評論 0 1
  • 什么是Podfile ? CocoaPods是用ruby實現(xiàn)的,因此Podfile文件的語法就是ruby的語法军援。p...
    VV木公子閱讀 10,907評論 5 28
  • CocoaPods是Swift和OC項目的依賴項管理器胸哥。Podfile是一個規(guī)范赡鲜,描述一個或多個Xcode項目目標...
    oneday527閱讀 480評論 0 1