CocoaPod使用--Podfile--版本依赖管理
文章目錄
- 安裝cocoapod
- 和現有工程集成--空Podfile
- 和現有工程集成-- 指定workspace
- 添加依賴庫
- Podfile 語法
- 添加依賴庫
- 指定依賴庫的描述文件(Specification)
- 將依賴庫以framework形式引入
- 設置依賴庫版本號
- 忽略所有依賴庫的所有警告
- 忽略單個依賴庫的警告
- 依賴庫的構建配置(Build configurations)
- 模塊化頭文件 (Modular Headers)
- 指定依賴庫的源
- 從本地文件目錄引入依賴庫
- 從代碼倉庫中引入依賴庫
- 定義target
- inherit! 依賴繼承
- 添加腳本
- 抽象target (abstract_target)
- link_with (deprecated)
- 另一種抽象target的(abstract!)
- 指定平臺最小版本
- 指定工程項目(project)和配置(build configurations)
- xcodeproj(deprecated)
- 指定工作空間(workspace)
- 添加依賴庫下載源
參考網址 http://guides.cocoapods.org
成文的環境
- mac os 10.14
- cocoapod 1.5.3
- xcode 10.1
安裝cocoapod
安裝需要gem包管理器
在shell中執行
安裝后,可以查看pod版本,輸出正常,則安裝完成
$ pod --version和現有工程集成–空Podfile
和現有工程集成,使用空podfile,是一個簡單有效的方法。
在現有工程的工程文件目錄中,添加Podfile
保存podfile文件,將其放在工程文件同目錄,打開shell執行
$ pod install執行完畢后,一般會多出些文件和文件夾:myApp.xcworkspace 、Podfile.lock 、Pods。
之后,就可以打開myApp.xcworkspace 管理現有工程了
和現有工程集成-- 指定workspace
如果現有工程已經有了xxxx.xcworkspace文件怎么辦?
也很簡單,在空Podfile上稍微修改即可
添加workspace 'abcd.xcworkspace'
然后執行
$ pod install
打開abcd.xcworkspace
添加依賴庫
空Podfile建立后,就可以添加依賴庫了,以AFNetworking 為例
在空Podfile基礎上,添加依賴庫 pd 庫名 版本
然后執行 pod install
$ pod install
這樣,AFNetwork庫就引入工程了。
Podfile 語法
添加依賴庫
指令 pod
例如 pod 'AFNetworking',pod 'AFNetworking', '~> 3.2.1'
指定依賴庫的描述文件(Specification)
podspec
通常,一個Pod庫目錄下只要一個podspec文件,在有多個的情況下,CocoaPod將使用找到的第一個podspec文件;你也可以指定使用哪一個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
可以不指定依賴庫的版本,如下
如果指定,規則如下:
- '> 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!
例如:
依賴庫的構建配置(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
指定依賴庫的源
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' dopod 'SSZipArchive' end默認情況下,target會繼承在自身外面的依賴項,若不想繼承需要使用inherit!指令(參見 inherit! 依賴繼承)
target 'ZipApp' dopod 'SSZipArchive'target 'ZipAppTests' do #ZipAppTests需要繼續ZipApp的依賴,即也依賴 SSZipArchivepod 'Nimble'end endinherit! 依賴繼承
inherit! 依賴繼承 可用模式如下:
- inherit! : complete 繼承父項的所有行為
- inherit! : none 不會繼承父項的任何行為
- inherit! : search_paths 僅繼承父項的搜索路徑
添加腳本
script_phase
給指定的target的添加腳本,該腳本可以訪問xcode環境變量,在Xcode執行編譯時被調用。
可在xcode的target->Build Phases中查看
上面的示例執行pod install后,在xcode的target->Build Phases中查看
抽象target (abstract_target)
abstract_target
一般情況下,target必須和xcode工程中的target名字保持一致,而abstract_target則不必這樣。
abstract_target主要是為了方便管理依賴項繼承。
一個應用場景就是,xcode中的多個target都依賴相同的三方庫,則可以使用抽象target來管理
link_with (deprecated)
為CocoaPod 1.0之前的指令,請使用abstract_target
另一種抽象target的(abstract!)
abstract!
表示當前target是抽象的,因此不會直接鏈接到Xcode目標(target)中。
指定平臺最小版本
platform
例如
默認情況下,各個平臺對應的版本
- iOS 4.3
- OS X 10.6
- tvOS 9.0
- watchOS 2.0
也可以自己指定版本號
指定工程項目(project)和配置(build configurations)
指定哪些xcode project需要使用鏈接Pods庫
Podfile文件所在目錄如果只有一個xcode project文件,那么在不指定project的情況下,和Podfile文件同目錄下的那個唯一一個xcode project文件將被使用。
在有多個xcode project文件時,使用project指定需要的工程項目,例如
target 'myApp_123' doproject './myApp_123' #或者添加擴展名 ./myApp_123.xcodeproj endtarget 'myApp_456' doproject './myApp_456' end還可以指定構建配置,例如
target 'myApp' doproject './myApp_123', '發布的Target' => :release, '測試的Target' => :debug endxcodeproj(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的最高版本(無論其他源是否具有更高版本)
總結
以上是生活随笔為你收集整理的CocoaPod使用--Podfile--版本依赖管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过Cadence学拉扎维的第1天-直流
- 下一篇: 通过Cadence学拉扎维的第2天-mo