一、Podfile.lock 文件的作用
Podfile.lock 用于記錄最后一次更新Pods時(shí),記錄所有的第三方框架的版本號(hào)。
Podfile.lock 文件主要包括:
PODS: 記錄所有Pod庫(kù)的具體安裝的版本號(hào)
DEPENDENCIES: 記錄各Pod庫(kù)之間的相互依賴關(guān)系
SPEC REPOS: 倉(cāng)庫(kù)信息,即安裝了哪些三方庫(kù),他們來(lái)自哪個(gè)倉(cāng)庫(kù)
EXTERNAL SOURCES: 在Podfile引用的版本使用的git的引用,沒有上傳到源的這種引用
SPEC CHECKSUMS: 記錄當(dāng)前各Pod庫(kù)的Podspc文件Hash值,其實(shí)就是文件的md5
POPODFILE CHECKSUM: 記錄Podfile文件的hash值,同樣是md5,確認(rèn)是否有變更
COCOAPODS: 記錄上次所用的CocoaPods版本
Podfile.lock文件最大的用處在于多人開發(fā)。當(dāng)團(tuán)隊(duì)中的某個(gè)人執(zhí)行完pod install命令后,生成的Podfile.lock文件就記錄下了當(dāng)時(shí)最新Pods依賴庫(kù)的版本,這時(shí)團(tuán)隊(duì)中的其它人check下來(lái)這份包含Podfile.lock文件的工程以后,再去執(zhí)行pod install命令時(shí),獲取下來(lái)的Pods依賴庫(kù)的版本就和最開始用戶獲取到的版本一致。如果沒有Podfile.lock文件,后續(xù)所有用戶執(zhí)行pod install命令都會(huì)獲取最新版本的依賴庫(kù),這就有可能造成同一個(gè)團(tuán)隊(duì)使用的依賴庫(kù)版本不一致,這對(duì)團(tuán)隊(duì)協(xié)作來(lái)說(shuō)絕對(duì)是個(gè)災(zāi)難!
團(tuán)隊(duì)開發(fā)時(shí),一定要保證Podfile.lock的一致
二、Podfile常用指令的區(qū)別


當(dāng)執(zhí)行pod install 命令時(shí),首先會(huì)根據(jù)Podfile文件指定的內(nèi)容,安裝依賴庫(kù),如果有Podfile.lock文件而且對(duì)應(yīng)的Podfile文件未被修改,則會(huì)根據(jù)Podfile.lock文件指定的版本安裝
當(dāng)執(zhí)行pod update命令時(shí),如果Podfile中指定的依賴庫(kù)版本不是寫死的,當(dāng)對(duì)應(yīng)的依賴庫(kù)有了更新,無(wú)論有沒有Podfile.lock文件,都會(huì)去獲取Podfile文件描述的允許獲取到的最新依賴庫(kù)版本,并且創(chuàng)建一個(gè)Podfile.lock文件覆蓋掉原來(lái)的Podfile.lock文件
pod install/ pod update 過程:
1、在通過pod install或pod update指令安裝框架前,都會(huì)先執(zhí)行pod repo update指令,將服務(wù)器最新的框架下載到本地,項(xiàng)目中是否安裝最新版本的框架,取決于安裝方式:pod install(指定版本)和pod update(最新版本);
2、在第一次執(zhí)行pod install指令時(shí),podfile.lock還不存在,會(huì)根據(jù)podfile中的說(shuō)明來(lái)集成框架。如果指定了框架版本號(hào),則安裝指定版本,如果未指定,則安裝最新的,并自動(dòng)生成podfile.lock文件;
3、當(dāng)以后再次執(zhí)行pod install指令時(shí),會(huì)根據(jù)podfile.lock中記錄的框架版本號(hào)來(lái)安裝框架;
4、即便服務(wù)器中有最新的版本,通過pod install指令也不會(huì)安裝最新的第三方框架,只會(huì)根據(jù)podfile.lock中記錄的版本來(lái)安裝。
備注:
--no-repo-update 常用命令
安裝前不會(huì)執(zhí)行pod repo update,意味著不去檢查服務(wù)器版本,直接使用本地cache的框架版本
三、.podspec 文件
podspec 文件是 CocoaPods 中用于描述和配置一個(gè)庫(kù)(或者稱為 Pod)的文件。當(dāng)創(chuàng)建并封裝一個(gè)基于CocoaPods的屬于自己的三方庫(kù)時(shí),會(huì)伴隨創(chuàng)建一個(gè)podspec 文件來(lái)定義這個(gè)庫(kù)的元數(shù)據(jù),其包括但不限于以下內(nèi)容:

https://guides.cocoapods.org/syntax/podspec.html#specification
在項(xiàng)目中使用 CocoaPods 時(shí),podspec 文件是在項(xiàng)目的根目錄下的描述文件。通過 pod install 命令,CocoaPods 將會(huì)讀取這個(gè)文件并下載、安裝相應(yīng)的依賴庫(kù)
使用細(xì)節(jié):
目錄分層:

使用:

目錄分層的好處:
1、目錄分層,結(jié)構(gòu)清晰;
2、使用pod引入一個(gè)三方庫(kù)時(shí),可以只引入一個(gè)subspec而不用將整個(gè)三方庫(kù)引入
Podspec的校驗(yàn):
pod lib lint (從本地驗(yàn)證pod能否通過驗(yàn)證)
pod spec lint (從本地和遠(yuǎn)程驗(yàn)證pod能否通過驗(yàn)證)
pod lib lint --verbose (加--verbose可以顯示詳細(xì)的檢測(cè)過程,出錯(cuò)時(shí)會(huì)顯示詳細(xì)的錯(cuò)誤信息)
pod lib lint --allow-warnings (允許警告,用來(lái)解決由于代碼中存在警告導(dǎo)致不能通過校驗(yàn)的問題)
pod lib lint --help (查看所有可選參數(shù),可選參數(shù)可以加多個(gè))
pod驗(yàn)證相關(guān)參數(shù)說(shuō)明:
--allow-warnings : 忽略警告,即可以允許有警告也可以通過驗(yàn)證
--use-libraries: 使用靜態(tài)庫(kù)安裝規(guī)范,當(dāng)包含依賴的第三方或自定義的靜態(tài)庫(kù)需要添加此規(guī)范
--use-modular-headers:如果是OC和swift 的混編需要加上
--sources=https://cdn.cocoapods.org/:指定索引庫(kù)的源,多個(gè)源必須用逗號(hào)分隔
--local-only:不執(zhí)行將回購(gòu)?fù)频狡溥h(yuǎn)程服務(wù)器的步驟
--no-private:包括僅適用于公共回購(gòu)的檢查
--skip-import-validation:跳過驗(yàn)證pod是否可以導(dǎo)入
--skip-tests:在驗(yàn)證期間跳過構(gòu)建和運(yùn)行測(cè)試
--commit-message="Fix bug in pod":添加自定義提交消息。如果沒有指定提交消息,則打開默認(rèn)編輯器
--use-json:在將其推送到repo之前,將podspec轉(zhuǎn)換為JSON
--swift-version=VERSION:在標(biāo)記規(guī)范時(shí)應(yīng)該使用的SWIFT_VERSION。這優(yōu)先于規(guī)范中指定的Swift版本或.Swift版本文件
--no-overwrite:不允許將覆蓋現(xiàn)有規(guī)范的推送