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甲喝,就會生成MyPod
和 MyPod-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