CocoaPods 知識(shí)
- 目錄
- 前言
- CocoaPods安裝
- CocoaPods原理
- CocoaPods使用
1、 前言
CocoaPods是OS X和iOS下的一個(gè)第三類庫(kù)管理工具龄毡,通過CocoaPods工具我們可以為項(xiàng)目添加被稱為“Pods”的依賴庫(kù)(這些類庫(kù)必須是CocoaPods本身所支持的)想诅,并且可以輕松管理其版本召庞。
相關(guān)資料
2、 CocoaPods安裝
1来破、設(shè)置 ruby 源
Mac 系統(tǒng)自帶的會(huì)安裝好 ruby 環(huán)境
1.1篮灼、查看自己電腦的 ruby 源
- ruby -v
ruby -v
- 如果自己電腦版本低于這個(gè)版本就升級(jí) ruby ,上面顯示我的電腦版本不需要升級(jí)徘禁,可以忽略下面的升級(jí)操作
sudo gem update --system
- 要是沒有ruby環(huán)境, 執(zhí)行下面的指令
gem install ruby
1.2诅诱、更換 ruby 鏡像
- ruby 默認(rèn)的原地址是國(guó)外網(wǎng)絡(luò)地址,通過下面命令查看當(dāng)前的鏡像
gem sources -l
*** CURRENT SOURCES ***
https://rubygems.org/
- 移除當(dāng)前鏡像
gem sources --remove https://rubygems.org/
https://rubygems.org/ removed from sources
- 添加國(guó)內(nèi)的 ruby 鏡像
gem sources -a https://gems.ruby-china.com/
https://gems.ruby-china.com/ added to sources
- 再次查看當(dāng)前鏡像,發(fā)現(xiàn)已經(jīng)替換成功
gem sources -l
*** CURRENT SOURCES ***
https://gems.ruby-china.com/
2送朱、安裝 CocoaPods
ruby 環(huán)境安裝后娘荡,就可以安裝 CocoaPods 了
2.1 檢查pod版本
pod --version
2.2 卸載CocoaPods
#卸載
sudo gem uninstall cocoapods
#卸載指定版本
sudo gem uninstall cocoapods -v 1.9.3
2.3 安裝
方法一
#下載最新版本
sudo gem install cocoapods
#下載指定版本
sudo gem install cocoapods -v 1.9.3
等待了幾分鐘后干旁,顯示下面的信息,便表示已經(jīng)安裝成功了炮沐。
方法二
sudo gem install -n /usr/local/bin cocoapods
2.2 檢測(cè)是否安裝成功
- 可以通過檢查pod版本指令查看是否安裝成功
pod --version
2.3 下載文件
pod setup
2.4 驗(yàn)證安裝成功與否
pod search AFNetworking
3争群、 CocoaPods原理
核心組件
CocoaPods 是一個(gè) objc 的依賴管理工具,而其本身是利用 ruby 的依賴管理 gem 進(jìn)行構(gòu)建的大年。
CocoaPods是用 Ruby 寫的换薄,并由若干個(gè) Ruby 包 (gems) 構(gòu)成的。在解析整合過程中翔试,最重要的幾個(gè) gems 分別是:
- CocoaPods/Specs
- CocoaPods/CocoaPods
- CocoaPods/Core
- CocoaPods/Xcodeproj
CocoaPods/Specs
這個(gè)是一個(gè)保存第三方組件 podspec 文件的倉(cāng)庫(kù)轻要。第三方組件開發(fā)完成之后,會(huì)傳一份 podspec 文件傳到 CocoaPods垦缅,這個(gè) Specs 包含了每個(gè)第三方組件所有版本的 podspec 文件伦腐。當(dāng)使用某個(gè)第三方組件時(shí),如果這些組件支持 CocoaPods失都,會(huì)在 Podfile 中指定 source,例如下面這樣:
source 'https://github.com/CocoaPods/Specs.git'
當(dāng)執(zhí)行 pod install 或 pod update 等一些命令時(shí)幸冻,便會(huì)從這個(gè)倉(cāng)庫(kù)找到組件指定版本的 podspec 文件粹庞,然后根據(jù)這個(gè) podspec 配置信息去獲取組件。
CocoaPods/CocoaPod
這是是一個(gè)面向用戶的組件洽损,每當(dāng)執(zhí)行一個(gè) pod 命令時(shí)庞溜,這個(gè)組件都將被激活。該組件包括了所有使用 CocoaPods 涉及到的功能碑定,并且還能通過調(diào)用所有其它的 gems 來(lái)執(zhí)行任務(wù)流码。
CocoaPods/Core Core
組件提供支持與 CocoaPods 相關(guān)文件的處理,文件主要是 Podfile 和 podspecs延刘。
當(dāng)執(zhí)行 pod install等一些命令時(shí)漫试。Core組件會(huì)解析第三方組件開發(fā)者上傳的podspec文件和使用者的podfile,以此確定需要為project引入哪些文件。除此之外碘赖,當(dāng)執(zhí)行與這些文件一些相關(guān)的命令時(shí)驾荣,也由這部分組件處理,例如使用 pod spec lint 來(lái)檢測(cè) podspec 文件的有效性普泡。
CocoaPods/Xcodeproj
這個(gè) gem 組件負(fù)責(zé)所有工程文件的整合播掷。它能夠?qū)?chuàng)建并修改 .xcodeproj 和 .xcworkspace 文件。它也可以作為單獨(dú)的一個(gè) gem 包使用撼班。如果你想要寫一個(gè)腳本來(lái)方便的修改工程文件歧匈,那么可以使用這個(gè) gem。
Podfile
Podfile 是一個(gè)文件砰嘁,用于定義項(xiàng)目所需要使用的第三方庫(kù)件炉。該文件支持高度定制勘究,你可以根據(jù)個(gè)人喜好對(duì)其做出定制。
Podspec
.podspec 也是一個(gè)文件妻率,該文件描述了一個(gè)庫(kù)是怎樣被添加到工程中的乱顾。它支持的功能有:列出源文件、framework宫静、編譯選項(xiàng)和某個(gè)庫(kù)所需要的依賴等走净。
Ruby 概述
方法
- 簡(jiǎn)單的方法
Ruby 代碼在調(diào)用方法時(shí)可以省略括號(hào)。
def method_name (var1=value1, var2=value2)
expr..
end
ruby中的方法以'def'開頭孤里,以'end'作為結(jié)尾伏伯,我們可以為參數(shù)設(shè)置默認(rèn)值,如果方法調(diào)用時(shí)未傳遞必需的參數(shù)則使用默認(rèn)值捌袜,上例中的value1和value2就是默認(rèn)值说搅。
- 可變數(shù)量的參數(shù)
def sample (*test)
puts "參數(shù)個(gè)數(shù)為 #{test.length}"
for i in 0...test.length
puts "參數(shù)值為 #{test[I]}"
end
end
sample "Zara", "6", "F"。
數(shù)據(jù)類型--Hash
哈希(Hash)是類似 "key" => "value" 這樣的鍵值對(duì)集合虏等。哈希類似于一個(gè)數(shù)組弄唧,只不過它的索引(或者叫"鍵")不局限于使用數(shù)字,Hash 的索引幾乎可以是任何對(duì)象霍衫。
Hash 雖然和數(shù)組類似候引,但卻有一個(gè)很重要的區(qū)別:Hash 的元素沒有特定的順序。 如果順序很重要的話就要使用數(shù)組了敦跌。
pod 'SwViewCapture', :git=>'git@github.com:startry/SwViewCapture.git', :branch=>'master'
def pod(name = nil, *requirements)
unless name
raise StandardError, 'A dependency requires a name.'
end
current_target_definition.store_pod(name, *requirements)
end
pod方法后面跟著的參數(shù)就是一個(gè)Hash的對(duì)象澄干,寫成key-value的形式就是
{
":git": "git@github.com:startry/SwViewCapture.git",
":branch": "'master'"
}
block
Ruby中do ~end之間的部分稱為塊,也可以寫為{..}
所以這個(gè)target方法可以以這種形式調(diào)用:
target('PodSample') {
pod('SDWebImage', '~> 4.4.2')
}
也可以使用我們常見的形式調(diào)用:
target('PodSample') do
pod('SDWebImage', '~> 4.4.2')
end
eval
這個(gè)方法會(huì)將字符串當(dāng)做代碼來(lái)執(zhí)行,也就是說 eval 模糊了代碼與數(shù)據(jù)之間的邊界柠傍,iOS開發(fā)過程中也會(huì)使用eval執(zhí)行js代碼麸俘。
eval "1 + 2 * 3" => 7
Podfile&Podfile.lock的解析
Podfile
CocoaPods內(nèi)部定義了一些配置方法,把方法參數(shù)轉(zhuǎn)化為內(nèi)部Hash變量的屬性惧笛。
Podfile.lock
Podfile.lock文件是用數(shù)據(jù)描述語(yǔ)言YAML編寫的从媚,YAML(YAML Ain’t Markup)是一種簡(jiǎn)潔的非標(biāo)記語(yǔ)言,以數(shù)據(jù)為中心患整,使用空白静檬,縮進(jìn),分行組織數(shù)據(jù)并级,從而使得表示更加簡(jiǎn)潔易讀拂檩,其可以與json互轉(zhuǎn),CocoaPods內(nèi)部是把Podfile.lock文件解析成Hash類型嘲碧,從而進(jìn)行參數(shù)數(shù)據(jù)查詢和與Podfile文件中的參數(shù)進(jìn)行對(duì)比稻励。
4、CocoaPods使用
- 遠(yuǎn)程 pods 庫(kù):
- 可以是CocoaPods 公共庫(kù),也可以是一個(gè)自定義的 Git 倉(cāng)庫(kù)(遠(yuǎn)程私有庫(kù))
- 本地索引庫(kù):
- 位置可以通過命令$cd ~/.cocoapods/repos進(jìn)入.公共庫(kù)和私有庫(kù)都會(huì)在該路徑下
- 源代碼庫(kù):
- 可以是CocoaPods公共Git倉(cāng)庫(kù)中的庫(kù),也可以用任何一個(gè)Git, Mercurial或者SVN倉(cāng)庫(kù)取代望抽,并且還可以指定具體的commit, branch或者tag加矛。
基礎(chǔ)
1. 創(chuàng)建Podfile文件
#進(jìn)入項(xiàng)目根路徑中執(zhí)行,生成Podfile文件(如果有Podfile文件不用執(zhí)行pod init)
pod init
說明:Podfile文件詳細(xì)描述了一個(gè)或多個(gè)工程中targets的依賴關(guān)系
2. Podfile添加第三方庫(kù)依賴
target 'QSAppDemo' do
pod 'AFNetworking'
pod 'YYModel', '~> 1.0.4'
end
3. 下載和安裝第三方庫(kù)
pod install
- 下載成功后煤篙,使用CocoaPods 生成的 .xcworkspace 文件來(lái)打開工程斟览;每次更改了 Podfile 文件,要重新執(zhí)行一次pod update命令;
- 發(fā)生執(zhí)行pod install或pod update都卡在Analyzing dependencies的情況辑奈,是因?yàn)橐?jí)CocoaPods的spec倉(cāng)庫(kù)苛茂,命令后添加--verbose --no-repo-update 參數(shù)可以省略此步。
pod指定依賴項(xiàng)版本范圍
- 如果依賴項(xiàng)后不指定版本鸠窗,默認(rèn)取最新版本
pod 'AFNetworking'
版本控制
> 0.1 高于0.1版本(不包含0.1版本)的任意一個(gè)版本
>= 0.1 高于0.1版本(包含0.1版本)的任意一個(gè)版本
< 0.1 低于0.1版本(不包含0.1版本)的任意一個(gè)
<= 0.1低于0.1版本(包含0.1版本)的任意一個(gè)
~> 0.1.2 版本 0.1.2的版本到0.2 妓羊,不包括0.2。這個(gè)基于你指定的版本號(hào)的最后一個(gè)部分稍计。這個(gè)例子等效于>= 0.1.2并且 <0.2.0躁绸,并且始終是你指定范圍內(nèi)的最新版本。
pod制定依賴庫(kù)的分支或節(jié)點(diǎn)
- 引入master分支(默認(rèn))
pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git'
- 引入指定的分支
pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git', :branch => 'develop'
- 引入某個(gè)節(jié)點(diǎn)的代碼
pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => '2.7.0'
- 引入某個(gè)特殊的提交節(jié)點(diǎn)
pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '685e31a31bb1ebce3fdb5a752e392dfd8263e169'
- 使用本地文件
我們也可以指定依賴庫(kù)的來(lái)源地址臣嚣。如果我們想引入我們本地的一個(gè)庫(kù)净刮,可以這樣寫:
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
關(guān)于Podfile中一些配置說明
Source:
指定pod的來(lái)源。如果不指定source硅则,默認(rèn)是使用CocoaPods官方的source
# 使用官方默認(rèn)地址(默認(rèn))
source 'https://github.com/CocoaPods/Specs.git'
# 公司私有庫(kù)
source '私有庫(kù)url'
Target configuration (目標(biāo)項(xiàng)配置)
platform用于指定應(yīng)建立的靜態(tài)庫(kù)的平臺(tái)淹父。CocoaPods提供了默認(rèn)的平臺(tái)版本配置:
#指定具體平臺(tái)和版本
platform :ios, '4.0'
platform :iOS
use_frameworks!:
使用此命令會(huì)在Pods工程下的Frameworks目錄下生成依賴庫(kù)的framework,如果不使用抢埋,會(huì)在Pods工程下的Products目錄下生成.a的靜態(tài)庫(kù)。
target 'Demo' do
use_frameworks!
end
Dependencies(依賴項(xiàng))
Podfile指定每個(gè)target的依賴項(xiàng)
pod指定特定的依賴庫(kù)
podspec可以提供一個(gè)API來(lái)創(chuàng)建podspecs
target通過target指定依賴范圍
target
在給定的塊內(nèi)定義pod的target(Xcode工程中的target)和指定依賴的范圍督暂。一個(gè)target應(yīng)該與Xcode工程的target有關(guān)聯(lián)揪垄。默認(rèn)情況下,target會(huì)包含定義在塊外的依賴逻翁,除非指定不使用inherit!來(lái)繼承(說的是嵌套的塊里的繼承問題)
定義一個(gè)Apptarget僅引入AFNetworking庫(kù)饥努,定義AppTeststarget 引入Nimble的同時(shí)也會(huì)繼承Apptarget里面的AFNetworking庫(kù)
target 'App' do
pod 'AFNetworking'
target 'AppTests' do
inherit! :search_paths
pod 'Nimble'
end
end
- target塊中嵌套多個(gè)子塊
target 'ShowsApp' do
# ShowsApp 僅僅引入ShowsKit
pod 'ShowsKit'
# 引入 ShowsKit 和 ShowTVAuth
target 'ShowsTV' do
pod 'ShowTVAuth'
end
# 引入了Specta和Expecta以及ShowsKit
target 'ShowsTests' do
inherit! :search_paths
pod 'Specta'
pod 'Expecta'
end
end
- 抽象target
定義一個(gè)新的抽象目標(biāo),它可以方便的用于目標(biāo)依賴?yán)^承八回。
簡(jiǎn)單寫法
abstract_target 'Networking' do
pod 'AlamoFire'
target 'Networking App 1'
target 'Networking App 2'
end
定義一種abstract_target包含多個(gè)target
# 注意:這是個(gè)抽象的target也就是說在工程中并沒有這個(gè)target引入ShowsKit
abstract_target 'Shows' do
pod 'ShowsKit'
# ShowsiOS target會(huì)引入ShowWebAuth庫(kù)以及繼承自Shows的ShowsKit庫(kù)
target 'ShowsiOS' do
pod 'ShowWebAuth'
end
# ShowsTV target會(huì)引入ShowTVAuth庫(kù)以及繼承自Shows的ShowsKit庫(kù)
target 'ShowsTV' do
pod 'ShowTVAuth'
end
# ShowsTests target引入了Specta和Expecta庫(kù)酷愧,并且指明繼承Shows,所以也會(huì)引入ShowsKit
target 'ShowsTests' do
inherit! :search_paths
pod 'Specta'
pod 'Expecta'
end
end
Build configurations(編譯配置)
默認(rèn)情況下缠诅, 依賴項(xiàng)會(huì)被安裝在所有target的build configuration中溶浴。為了調(diào)試或者處于其他原因,依賴項(xiàng)只能在給定的build configuration中被啟用管引。
下面寫法指明只有在Debug和Beta模式下才有啟用配置
pod 'MJRefresh', :configurations => ['Debug', 'Beta']
或者士败,可以弄白名單只指定一個(gè)build configurations。
pod 'MJRefresh', :configuration => 'Debug'
注意:默認(rèn)情況下如果不指定具體生成配置,那么會(huì)包含在所有的配置中谅将,如果你想具體指定就必須手動(dòng)指明漾狼。
Subspecs
一般情況我們會(huì)通過依賴庫(kù)的名稱來(lái)引入,cocoapods會(huì)默認(rèn)安裝依賴庫(kù)的所有內(nèi)容饥臂。
我們也可以指定安裝具體依賴庫(kù)的某個(gè)子模塊逊躁,例如:
# 僅安裝QueryKit庫(kù)下的Attribute模塊
pod 'QueryKit/Attribute'
# 僅安裝QueryKit下的Attribute和QuerySet模塊
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
def
我們還可以通過def命令來(lái)聲明一個(gè)pod集:
def 'CustomPods'
pod 'IQKeyboardManagerSwift'
end
然后,我們就可以在需要引入的target處引入:
target 'MyTarget' do
CustomPods
end
這么寫的好處是:如果有多個(gè)target隅熙,而不同target之間并不全包含稽煤,那么可以通過這種方式來(lái)分開引入。
post_install
當(dāng)我們安裝完成猛们,但是生成的工程還沒有寫入磁盤之時(shí)念脯,我們可以指定要執(zhí)行的操作。
比如弯淘,我們可以在寫入磁盤之前绿店,修改一些工程的配置:
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
pre_install
當(dāng)我們下載完成,但是還沒有安裝之時(shí)庐橙,可以使用hook機(jī)制通過pre_install指定要做更改假勿,更改完之后進(jìn)入安裝階段。
pre_install do |installer|
# 做一些安裝之前的更改
end
abstract! 和 inherit!
abstract! 指示當(dāng)前的target是抽象的态鳖,因此不會(huì)直接鏈接Xcode target转培。
inherit! 設(shè)置當(dāng)前target的繼承模式。例如:
target 'App' do
target 'AppTests' do
inherit! :search_paths
end
end
inhibit_all_warnings!
inhibit_all_warnings! 屏蔽所有來(lái)自于cocoapods依賴庫(kù)的警告浆竭。你可以全局定義浸须,也能在子target里面定義,也可以指定某一個(gè)庫(kù):
# 隱藏SSZipArchive的警告而不隱藏ShowTVAuth的警告
pod 'SSZipArchive', :inhibit_warnings => true
pod 'ShowTVAuth', :inhibit_warnings => false
5邦泄、CocoaPods創(chuàng)建私有庫(kù)
CocoaPods拉取開源庫(kù)的原理:
CocoaPods 有一個(gè)開源的索引倉(cāng)庫(kù)Specs删窒,倉(cāng)庫(kù)存放著所有開源庫(kù)的各個(gè)版本的.podspec文件,.podspec文件包含中記錄著源碼的地址顺囊。首次使用CocoaPods時(shí)肌索,會(huì)將這個(gè)文件庫(kù)克隆到本地~/.cocoapods/repos/master。
- 在Podfile目錄下執(zhí)行 pod install 命令特碳,會(huì)從本地的索引庫(kù)查找該庫(kù)的.podsepc诚亚,如果本地不存在會(huì)從遠(yuǎn)程拉取最新的索引庫(kù)。
- 根據(jù)索引庫(kù)中查到的.podspec文件內(nèi)容午乓,獲取源碼地址站宗。
- 從源碼地址拉取對(duì)應(yīng)版本的代碼。
使用是可以發(fā)現(xiàn)益愈,首次導(dǎo)入一個(gè)開源庫(kù)時(shí)速度較慢份乒,之后再導(dǎo)入時(shí)會(huì)很快。是因?yàn)镃ocoaPods在本地會(huì)有一個(gè)緩存目錄,存放開源庫(kù)的源碼或辖,首次下載后瘾英,再次導(dǎo)入該庫(kù)時(shí),會(huì)直接從本地復(fù)制過去颂暇。
查看緩存列表使用pod cache list,緩存路徑為~/Library/Caches/CocoaPods/Pods/缺谴。
創(chuàng)建私有庫(kù)步驟:
1. 創(chuàng)建podspec文件
1.1 什么是podspec?文件夾打開~/.cocoapods/repos看到
specs存放的就是cocoapod官網(wǎng)庫(kù)的specification:說明書耳鸯,通過這個(gè)podspec文件里的信息湿蛔,找到對(duì)應(yīng)資源URL,然后clone到我們的pod中县爬⊙羯叮可以理解為書的目錄,我們查找第三方庫(kù)的時(shí)候?qū)嶋H就是查找這個(gè)specs集合财喳。所以我們創(chuàng)建私有庫(kù)第一步就是創(chuàng)建我們的spec察迟,目錄。
先創(chuàng)建空的repository,為了區(qū)分命名最好以spec為后綴耳高,說明這是存說明書的庫(kù)
然后將這個(gè)庫(kù)添加到~/.cocoapods/repos中扎瓶,操作很簡(jiǎn)單,終端執(zhí)行pod命令pod repo add hxkSpec git@github.com:xiaoyiqiu/spec.git
1.2 開始創(chuàng)建私有庫(kù)podspec泌枪,理解為pod私有庫(kù)說明書
在github上創(chuàng)建一個(gè)存放specification的倉(cāng)庫(kù)概荷,注意不是存放源碼的庫(kù),一定不要搞錯(cuò)了
我建議先創(chuàng)建空的repository,為了區(qū)分命名最好以spec為后綴,說明這是存說明書的庫(kù)
然后將這個(gè)庫(kù)添加到~/.cocoapods/repos中,操作很簡(jiǎn)單顷蟆,終端執(zhí)行pod命令pod repo add TDNIMKitSpec git@github.com:strivever/TDNIMKitSpec.git
命令格式:
pod repo add 【specName】 【spec遠(yuǎn)程倉(cāng)庫(kù)地址】
2.制作我們的pod庫(kù)
2.1 創(chuàng)建庫(kù)
pod lib create 【你的pod庫(kù)名】
2.2 配置.Podspec文件信息
Podspec文件語(yǔ)法
Pod::Spec.new do |s|
#pod私有庫(kù)名稱
s.name = 'TDNIMKit'
#pod私有庫(kù)版本號(hào)
s.version = '0.1.0'
#pod私有庫(kù)概要
s.summary = 'A short description of TDNIMKit.'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
#主要,最好能訪問
s.homepage = 'https://github.com/458362366@qq.com/TDNIMKit'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
#開源協(xié)議
s.license = { :type => 'MIT', :file => 'LICENSE' }
#開源作者
s.author = 'Striver'
#源碼地址愈捅,clone時(shí)候就需要使用這個(gè)地址跟版本拉取
s.source = { :git => 'https://github.com/458362366@qq.com/TDNIMKit.git', :tag =>'0.1.0' }
#支持的系統(tǒng)版本
s.ios.deployment_target = '8.0'
#源碼相對(duì)路徑
s.source_files = 'TDNIMKit/Classes/**/*'
# s.resource_bundles = {
# 'TDNIMKit' => ['TDNIMKit/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
#需要使用的框架
# s.frameworks = 'UIKit', 'MapKit'
#依賴的其它第三方庫(kù)
# s.dependency 'AFNetworking', '~> 2.3'
end
- cd到源碼的文件夾中:
pod lib lint --sources=git@github.com:xiaoyiqiu/spec.git,https://github.com/CocoaPods/Specs.git --allow-warnings
pod repo push spec huang.podspec --sources=git@github.com:xiaoyiqiu/spec.git,https://github.com/CocoaPods/Specs.git --allow-warnings
2.3 驗(yàn)證庫(kù)有沒問題
進(jìn)行本地驗(yàn)證podspec文件是否正了
cd 到xxx.podspec目錄:執(zhí)行以下指令
pod lib lint --use-libraries --allow-warnings
2.4 編寫代碼
2.5 上傳到gitLab托管平臺(tái)
- 上傳到遠(yuǎn)程服務(wù)器
- 一定要打上tag值. 需要跟podspec文件中指定的tag一致
- 將podsepec中的 source填入倉(cāng)庫(kù)地址 上傳到倉(cāng)庫(kù)記得看一下遠(yuǎn)程倉(cāng)庫(kù)資源是否被同步上去了,不然一會(huì)校驗(yàn)會(huì)出現(xiàn)資源匹配不到叠殷。
2.6 遠(yuǎn)程倉(cāng)庫(kù)驗(yàn)證
- 方法一(推薦):
pod lib lint --sources=【gitLab ssh地址】,https://github.com/CocoaPods/Specs.git --allow-warnings
pod lib lint --sources=git@github.com:xiaoyiqiu/spec.git(遠(yuǎn)程庫(kù)的地址),https://github.com/CocoaPods/Specs.git --allow-warnings
- 方法二:
pod spec lint --use-libraries --allow-warnings
驗(yàn)證可能很漫長(zhǎng)改鲫,可以增加 --verbose查看日志
2.6 發(fā)布私有庫(kù)
執(zhí)行以下發(fā)布指令:
- 方法一:
// pod 命令:
pod repo push spec huang.podspec 【本地spec文件夾名稱】【需要發(fā)布的.podspec文件 --sources=【gitLab ssh地址】,https://github.com/CocoaPods/Specs.git --allow-warnings
pod repo push spec huang.podspec --sources=git@github.com:xiaoyiqiu/spec.git,https://github.com/CocoaPods/Specs.git --allow-warnings
- 方法二:
pod命令 pod repo push 【本地spec文件夾名稱】【需要發(fā)布的.podspec文件】--use-libraries --allow-warnings --verbose
- 發(fā)布成功后查看一下本地和遠(yuǎn)程應(yīng)該都有了podspec
2.7 驗(yàn)證私有倉(cāng)庫(kù)是否可用
- 用pod命令進(jìn)行搜索诈皿,看能否搜索到:$ pod search [私有庫(kù)名字]
- 如果搜索不到林束,在終端執(zhí)行如下命令 pod repo update然后重新search
2.8 使用私有庫(kù)
6、常用pod指令
pod setup原理
本質(zhì)就是將 https://github.com/CocoaPods/Specs 上的項(xiàng)目克隆到/Users/用戶名/.cocoapods/repos目錄下稽亏,若此目錄下已經(jīng)有這個(gè)項(xiàng)目壶冒,使用pod setup命令則會(huì)將項(xiàng)目更新到最新的狀態(tài)。
pod instal和pod update的區(qū)別
執(zhí)行pod install時(shí)截歉,如果Podfile.lock文件存在, 則下載Podfile.lock文件中指定的版本安裝胖腾,對(duì)于不在Podfile.lock文件中的pod庫(kù),pod install命令會(huì)搜索這個(gè)pod庫(kù)在Podfile文件中指定的版本來(lái)安裝;
當(dāng)你想要更新pod庫(kù)的版本時(shí)才使用pod update咸作;它不管Podfile.lock是否存在, 都會(huì)讀取Podfile文件的的框架信息去下載安裝锨阿,下載好之后, 再根據(jù)下載好的框架信息, 生成Podfile.lock文件
//生成Podfile文件,編寫需要的第三方文件
$ pod init
//安裝第三方庫(kù)记罚,安裝成功會(huì)生成`podfile.lock`文件用來(lái)記錄第三方庫(kù)版本墅诡,
后面接上--no--repo--install 的意思是不更新本地索引庫(kù)
$ pod install
$ pod install --no--repo--install
//更新第三方庫(kù)為本地索引庫(kù)最新版本,后面接上--no--repo--update的意思是不更新本地索引庫(kù)
$ pod update
$ pod update --no--repo--update
//搜索當(dāng)前本地索引倉(cāng)庫(kù)中對(duì)應(yīng)的第三方庫(kù)
$ pod search 第三方庫(kù)名稱
//查看當(dāng)前版本
$pod --version
//更新本地所有索引庫(kù) 桐智,更新指定索引庫(kù)接上索引庫(kù)名稱即可
$ pod repo update
//通過pod查看已添加的 repo
$ pod repo list
清除相關(guān)命令
#查看本地pod緩存
pod cache list
#清除某個(gè)庫(kù)緩存
pod cache clean xxxx
# 清除所有pod緩存
pod cache clean -all
#刪除緩存方法
rm ~/Library/Caches/Cocoapods/Pods/Pods/Release
其他
# 刪除 search_index.json 文件
rm ~/Library/Caches/CocoaPods/search_index.json