文章目錄
- 安裝cocoapod
- 和現有工程集成--空Podfile
- 和現有工程集成-- 指定workspace
- 添加依賴庫
- Podfile 語法
參考網址 http://guides.cocoapods.org
成文的環境
- mac os 10.14
- cocoapod 1.5.3
- xcode 10.1
安裝cocoapod
安裝需要gem包管理器
在shell中執行
$ sudo gem install cocoapods
安裝後,可以查看pod版本,輸出正常,則安裝完成
$ pod --version
和現有工程集成–空Podfile
和現有工程集成,使用空podfile,是一個簡單有效的方法。
在現有工程的工程文件目錄中,添加Podfile
platform :ios, '8.0' # 平臺ios,最小依賴 8.0
#下面兩行是一個整體代碼塊
target 'myApp' do # myApp需替換成自己的target
end
保存podfile文件,將其放在工程文件同目錄,打開shell執行
$ pod install
執行完畢後,一般會多出些文件和文件夾:myApp.xcworkspace
、Podfile.lock
、Pods
。
之後,就可以打開myApp.xcworkspace
管理現有工程了
和現有工程集成-- 指定workspace
如果現有工程已經有了xxxx.xcworkspace
文件怎麼辦?
也很簡單,在空Podfile上稍微修改即可
添加workspace 'abcd.xcworkspace'
workspace 'abcd.xcworkspace' #abcd爲已經存在的工程文件
platform :ios, '8.0' # 平臺ios,最小依賴 8.0
#下面兩行是一個整體代碼塊
target 'myApp' do # myApp需替換成自己的target
end
然後執行
$ pod install
打開abcd.xcworkspace
添加依賴庫
空Podfile建立後,就可以添加依賴庫了,以AFNetworking
爲例
在空Podfile基礎上,添加依賴庫 pd 庫名 版本
platform :ios, '8.0'
target 'myApp' do
pod 'AFNetworking', '~> 3.2.1' #版本爲3.2.1 - 3.3之間,不包括3.3
#pod 'AFNetworking', '= 3.2.1' #指定使用3.2.1
end
然後執行 pod install
$ pod install
這樣,AFNetwork庫就引入工程了。
Podfile 語法
添加依賴庫
指令 pod
例如 pod 'AFNetworking'
,pod 'AFNetworking', '~> 3.2.1'
指定依賴庫的描述文件(Specification)
podspec
通常,一個Pod庫目錄下只要一個podspec文件,在有多個的情況下,CocoaPod將使用找到的第一個podspec文件;你也可以指定使用哪一個podspec文件
podspec :name => 'QuickDialog'
或
podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'
將依賴庫以framework形式引入
指令爲 use_frameworks!
platform :ios, '8.0'
target 'myApp' do
use_frameworks! #將依賴庫以framework形式引入
pod 'AFNetworking', '~> 3.2.1'
end
使用 use_frameworks!
和不使用的區別如圖:
設置依賴庫版本號
cocoapod的版本號規則遵循 semantic versioning
可以不指定依賴庫的版本,如下
platform :ios, '8.0'
target 'myApp' do
pod 'AFNetworking'
end
如果指定,規則如下:
'> 0.1'
任何大於0.1的版本 (不包含0.1)'>= 0.1'
任何大於等於0.1的版本 (包含0.1)'< 0.1'
任何小於0.1的版本(不包含0.1)'<= 0.1'
任何小於等於0.1的版本 (包含0.1)
cocoapod額外提供的版本號操作符 ~>
:
'~> 0.1.2'
從0.1.2(含)到 0.2(不含)之間的任何版本,不包含高於0.2的版本'~> 0.1'
從0.1(含) 到 1.0(不含)之間的任何版本, 不包含高於1.0的版本'~> 0'
0或者高於0的任何版本
忽略所有依賴庫的所有警告
指令 inhibit_all_warnings!
platform :ios, '8.0'
nhibit_all_warnings!
target 'myApp' do
pod 'AFNetworking', '~> 3.2.1'
end
忽略單個依賴庫的警告
指令 inhibit_warnings
,優先級高於 inhibit_all_warnings!
例如:
target 'myApp' do
pod 'SSZipArchive', :inhibit_warnings => true #true 忽略警告
pod 'AFNetworking', :inhibit_warnings => false #false 輸出警告
end
依賴庫的構建配置(Build configurations)
默認情況,依賴的構建配置和target的配置保持一致
如果出於調試,或者其他原因,可以單獨給依賴庫設置
指定多個配置
pod 'AFNetworking', :configurations => ['Debug', 'Beta']
指定一個
pod 'AFNetworking', :configuration => 'Debug'
- 注意,多個和一個的指令有區別 ,
configurations
和configuration
模塊化頭文件 (Modular Headers)
use_modular_headers!
(全局)
:modular_headers => true
(單個Pod,優先級高於全局)
:modular_headers => fasle
(單個Pod,優先級高於全局)
例如
pod 'AFNetworking', :modular_headers => true
platform :ios, '8.0'
target 'myApp' do
use_frameworks!
pod 'AFNetworking', :modular_headers => true
end
指定依賴庫的源
source
例如 pod 'PonyDebugger', :source => 'https://github.com/CocoaPods/Specs.git'
從本地文件目錄引入依賴庫
path
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
- 注意,上面示例,~/Documents/AFNetworking不是git倉庫
從代碼倉庫中引入依賴庫
以git倉庫爲例:
- 使用master分支
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
- 指定分支
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
- 使用標籤
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'
定義target
target的名字應該和xcode工程中的名字保持一致
#定義ZipApp,ZipApp依賴SSZipArchive
target 'ZipApp' do
pod 'SSZipArchive'
end
默認情況下,target會繼承在自身外面的依賴項,若不想繼承需要使用inherit!
指令(參見 inherit! 依賴繼承)
target 'ZipApp' do
pod 'SSZipArchive'
target 'ZipAppTests' do #ZipAppTests需要繼續ZipApp的依賴,即也依賴 SSZipArchive
pod 'Nimble'
end
end
inherit! 依賴繼承
inherit! 依賴繼承 可用模式如下:
inherit! : complete
繼承父項的所有行爲inherit! : none
不會繼承父項的任何行爲inherit! : search_paths
僅繼承父項的搜索路徑
target 'App' do
target 'AppTests' do
inherit! :search_paths
end
end
添加腳本
script_phase
給指定的target的添加腳本,該腳本可以訪問xcode環境變量,在Xcode執行編譯時被調用。
可在xcode的target->Build Phases中查看
target 'myApp' do
script_phase :name => 'HelloWorldScript1', :script => 'echo "Hello World"'
script_phase :name => 'HelloWorldScript2', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby'
end
上面的示例執行pod install後,在xcode的target->Build Phases中查看
抽象target (abstract_target)
abstract_target
一般情況下,target
必須和xcode工程中的target名字保持一致,而abstract_target
則不必這樣。
abstract_target
主要是爲了方便管理依賴項繼承。
一個應用場景就是,xcode中的多個target都依賴相同的三方庫,則可以使用抽象target來管理
abstract_target 'ABC' do
pod 'libA'
pod 'libB'
pod 'libC'
target 'XXX' do # xxx同時依賴 libA、libB、libC、libD
pod 'libD'
end
target 'YYY' do # xxx同時依賴 libA、libB、libC、libE
pod 'libE'
end
end
link_with (deprecated)
爲CocoaPod 1.0之前的指令,請使用abstract_target
另一種抽象target的(abstract!)
abstract!
表示當前target是抽象的,因此不會直接鏈接到Xcode目標(target)中。
target 'ABC' do
abstract!
pod 'libA'
pod 'libB'
pod 'libC'
target 'XXX' do # xxx同時依賴 libA、libB、libC、libD
pod 'libD'
end
target 'YYY' do # xxx同時依賴 libA、libB、libC、libE
pod 'libE'
end
end
指定平臺最小版本
platform
例如
platform :ios # 合法的平臺 osx ,ios ,tvos,watchos
默認情況下,各個平臺對應的版本
- iOS 4.3
- OS X 10.6
- tvOS 9.0
- watchOS 2.0
也可以自己指定版本號
platform :ios, 4.0
platform :osx, 10.0
platform :tvOS, 9.0
platform :watchos, 2.0
指定工程項目(project)和配置(build configurations)
指定哪些xcode project需要使用鏈接Pods庫
Podfile文件所在目錄如果只有一個xcode project文件,那麼在不指定project的情況下,和Podfile文件同目錄下的那個唯一一個xcode project文件將被使用。
在有多個xcode project文件時,使用project
指定需要的工程項目,例如
target 'myApp_123' do
project './myApp_123' #或者添加擴展名 ./myApp_123.xcodeproj
end
target 'myApp_456' do
project './myApp_456'
end
還可以指定構建配置,例如
target 'myApp' do
project './myApp_123', '發佈的Target' => :release, '測試的Target' => :debug
end
xcodeproj(deprecated)
爲CocoaPod 1.0之前的指令,行爲同project
指定工作空間(workspace)
workspace 'MyWorkspace'
添加依賴庫下載源
source
CocoaPods Master Repository #官方的源
source 'https://github.com/artsy/Specs.git'
source 'https://github.com/CocoaPods/Specs.git'
在不指定任何源情況下,CocoaPods將使用隱含的官方源;如果指定了其他源,那麼這個隱含的官方源需要顯式指定(如果不使用官方源,可以不指定);
源的優先級和順序相關,第一個源優先級最高;
CocoaPods將使用包含Pod的第一個源的Pod的最高版本(無論其他源是否具有更高版本)