CocoaPod使用--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.xcworkspacePodfile.lockPods
在這裏插入圖片描述
之後,就可以打開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'

  • 注意,多個和一個的指令有區別 ,configurationsconfiguration

模塊化頭文件 (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的最高版本(無論其他源是否具有更高版本)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章