Cocoapods基礎(chǔ)使用
基礎(chǔ)使用
創(chuàng)建一個(gè)Cocoapods管理的Xcode項(xiàng)目
創(chuàng)建一個(gè)Xcode項(xiàng)目
打開(kāi)終端,
cd
到工程目錄下,使用pod init
命令,會(huì)初始化一個(gè)Podfile的文件打開(kāi)Podfile文件达址, 第一行指定我們使用的平臺(tái)以及版本,例如:
platform :ios, '9.0'
晌区,指定支持iOS9之后-
為了使cocoapods關(guān)聯(lián)我們指定的項(xiàng)目,我們需要添加
target '$TARGET_NAME' do end
通贞,在end前pod要添加的庫(kù)名即可target 'MyApp' do pod 'ObjectiveSugar' end
保存修改的Podfile文件朗若,執(zhí)行
pod install
命令即可
當(dāng)需要像一個(gè)已經(jīng)存在的
xcworkspace
中集成cocoapod功能時(shí),只需要在目標(biāo)塊外部添加一行來(lái)指定workspace即可:workspace 'MyWorkspace'
cocoapod做了哪些事情
- cocoapod創(chuàng)建了一個(gè)
workspace
- 將我們的工程添加到該workspace,
- 添加需要的靜態(tài)庫(kù)到該workspace
- pod庫(kù)之后都會(huì)打包成libPods.a昌罩,將該文件link到工程
- pod庫(kù)的編譯依賴參數(shù)等變?yōu)閹?kù)的.xcconfig文件捡偏,根據(jù)該文件向項(xiàng)目中添加
Xcode configuration
設(shè)置在編譯時(shí)的依賴參數(shù) - 改變項(xiàng)目 target configurations基于Cocoapods
- 添加工程執(zhí)行script為Pods-resources.sh的bash腳本,然后在每次編譯時(shí)將pod庫(kù)中的資源文件復(fù)制
pod install && pod update
pod install
pod install
只在我們每次修改了podfile文件,增加峡迷、刪除银伟、修改了依賴庫(kù)時(shí),才需要執(zhí)行該命令來(lái)檢索指定庫(kù)
當(dāng)執(zhí)行pod install后绘搞,會(huì)將我們使用的庫(kù)的版本號(hào)寫入podfile.lock
文件中彤避,此文件用來(lái)追蹤我們使用的pod庫(kù)的版本號(hào)
執(zhí)行pod install,會(huì)下載Podfile.lock
文件中已存在的pod庫(kù)的指定版本,或者不在podfile.lock中的pod庫(kù)的合適版本
pod outdated
此命令會(huì)根據(jù)podfile.lock中的版本夯辖,列出所有有較新版本的pod庫(kù)琉预,這就是我們執(zhí)行pod update
或者 pod update PODNAME
會(huì)更新的版本內(nèi)容(這些寫版本也是會(huì)受限于我們的podfile中設(shè)置的pod庫(kù)版本號(hào) pod 'MyPod', '~>x.y'
)
pod outdated
會(huì)檢索比podfile.lock中版本更新的庫(kù),并更新(只要該版本符合podfile中版本的限制)
pod update PODNAME
更新一個(gè)
pod update
更新所有
因?yàn)閜odfile.lock是記錄我們pod庫(kù)版本的蒿褂,因此我們需要向遠(yuǎn)程倉(cāng)庫(kù)中commit圆米、push該文件
Podfile
一個(gè)比較復(fù)雜的podfile文件如下
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/Artsy/Specs.git'
platform :ios, '9.0'
inhibit_all_warnings!
target 'MyApp' do
pod 'GoogleAnalytics', '~> 3.1'
# Has its own copy of OCMock
# and has access to GoogleAnalytics via the app
# that hosts the test target
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
具體用法可以查看cocoapod官網(wǎng),下面為部分用法解析:
多個(gè)Target共享pod庫(kù)
使用abstract_target
來(lái)使多個(gè)目標(biāo)共享pod
abstract_target是抽象對(duì)象,只是為了讓方便繼承啄栓,并不存在實(shí)際該target
# 并沒(méi)有名為'Shows'的目標(biāo)工程
abstract_target 'Shows' do
pod 'ShowsKit'
pod 'Fabric'
# 'ShowsiOS’工程包含'ShowsKit'和'Fabric'pod庫(kù)的拷貝
target 'ShowsiOS' do
pod 'ShowWebAuth'
end
# 'ShowsTV’工程包含'ShowsKit'和'Fabric'pod庫(kù)的拷貝
target 'ShowsTV' do
pod 'ShowTVAuth'
end
end
可以簡(jiǎn)寫為 和我們上面復(fù)雜的的Podfile 例子一樣了
pod 'ShowsKit'
pod 'Fabric'
target 'ShowsiOS' do
pod 'ShowWebAuth'
end
target 'ShowsTV' do
pod 'ShowTVAuth'
end
指定版本
-
指定特別的版本
-
pod 'SSZipArchive'
用最新的pod庫(kù)版本 -
pod 'Objection', '0.9'
指定使用的為特定的pod庫(kù)版本 -
pod 'Objection', '>0.1'
指定任何大于0.1的版本 -
pod 'Objection', '>=0.1'
指定任何大于或等于0.1的版本 -
pod 'Objection', '<0.1'
指定任何小于0.1的版本 -
pod 'Objection', '<=0.1'
指定任何小于或等于0.1的版本 -
pod 'Objection', '~>0.1.2'
指定版本在0.1.2到0.2之間 不包括0.2 -
pod 'Objection', '~>0.1'
指定版本在0.1.2到1.0之間 不包括1.0
-
指定pod的來(lái)源
指定pod來(lái)源為本地文件
常用于pod發(fā)布之前的本地調(diào)試
#
pod 'Alamofire', :path => '~/Documents/Alamofire'
#Pod文件的podspec應(yīng)該位于指定的文件夾中
自定義pod的git分支或版本
有時(shí)候?qū)τ谖覀冏约簞?chuàng)建的pod庫(kù)娄帖,我們可能需要pod特定版本或者指定分支
此時(shí),在該庫(kù)的根目錄中應(yīng)該包含podspec文件
# pod git 上master分支的版本
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git'
# pod dev分支的版本庫(kù)
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'dev'
# pod 指定tag的庫(kù)
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :tag => '3.1.1'
# pod 指定commit號(hào)版本
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :commit => '0f506b1c45'
指定特定的源
通常我們會(huì)在全局范圍搜索指定的庫(kù)昙楚,當(dāng)指定了該項(xiàng)后近速,我們對(duì)此pod庫(kù)將只搜索指定的源
pod 'PonyDebugger', :source => 'https://github.com/CocoaPods/Specs.git'
安裝子pod庫(kù)
我們通常在安裝pod時(shí) 會(huì)安裝定義在其中的所有的Subspecs
我們可以通過(guò)此方法安裝其中子庫(kù)
pod 'QueryKit/Attribute'
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
對(duì)于沒(méi)有podspec的庫(kù),從spec集合庫(kù)外其他獲取
假如可以從其它來(lái)源,例如http請(qǐng)求堪旧,獲取到podspec
pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'
install削葱!
生命安裝期間使用的安裝方法或選項(xiàng), 一般情況下淳梦,不需要特殊指定析砸,使用默認(rèn)的就行
abstract!
指定當(dāng)前目標(biāo)是抽象的,因此不會(huì)鏈接到xcode目標(biāo)
inherit!
設(shè)置子target繼承父target的繼承模式爆袍, :none表示不繼承任何 :search_path之繼承父的searchPath
target 'App' do
target 'AppTests' do
inherit! :search_paths
end
end
工程配置
inhibit_all_warnings!
禁止所有cocoapods的warning首繁,可以被子target繼承或重定義
# 禁用特定庫(kù)的warning
pod 'SSZipArchive', :inhibit_warnings => true
use_frameworks!
使用framework代替靜態(tài)庫(kù) 常用與swift項(xiàng)目
Source
Source是用來(lái) 從給定的source列表檢索指定pod庫(kù)的specs
我們可以指定specs位置
# 這是自定義源 源的順序與pod庫(kù)順序相關(guān) pod庫(kù)將使用第一個(gè)找到該庫(kù)的源的版本
source 'https://github.com/artsy/Specs.git'
# 這是官方源 其實(shí)隱含包括的 當(dāng)使用自定義source時(shí) 就需要顯示指定官方源
source 'https://github.com/CocoaPods/Specs.git'
Hooks
Hooks 包括 plugin pre_install post_install 等 會(huì)在安裝pod庫(kù)的進(jìn)程中調(diào)用進(jìn)行一些處理作郭,詳情