cocoapods 一次升級操作 關於pods中相關文件 關於pods一些命令原理 關於pods中的一些問題

背景

pods repo倉庫是同事下載到本地的,有次開發需要升級阿里雲視頻sdk,但是網絡不太好,pod repo update 總失敗,專門升級個別庫也有問題,去pods repo 庫 執行git pull 也無用,所以,重新下載pods repo倉庫到本地

手動下載pods repo 庫的方法

  • 1.訪問

https://github.com/CocoaPods/Specs,然後將Specs項目fork到自己的github賬戶上

  • 2.下載GitHub Desktop, 然後clone Specs項目。

  • 3.將clone的Specs項目的文件夾改名爲master,然後拖到/Users/用戶名/.cocoapods/repos目錄下。

  • 4.運行pod setup

解釋:pod setup的本質就是將https://github.com/CocoaPods/Specs上的Specs項目clone到/Users/用戶名/.cocoapods/repos目錄下。若此目錄下已有Specs項目,則會將項目更新到最新的狀態。由於Specs很大,容易導致pod setup失敗。這時就需要我們手動安裝Specs。若直接從github上下載zip文件,由於缺少git文件,會導致cocoa pods不使用。若用git clone,由於文件過大,容易導致失敗。但是使用GitHub Desktop軟件,則會提高clone的成功率,並且會給出clone的進度。

關於podfile 和 podfile.lock 中 庫的版本問題

一直使用新的版本

//不用指定版本
pod 'SSZipArchive'

指定版本

pod 'SSZipArchive'

其他版本的原理

'> 0.1' 高於0.1的任何版本
'>= 0.1' 版本0.1或更高版本
'< 0.1' 低於0.1的任何版本
'<= 0.1' 版本0.1或更低的版本
除了邏輯運算符,還有一種運算符:

'~> 0.1.2' 版本0.1.2和0.2版本之間的任意版本,不包括0.2和比0.2更高的版本
'~> 0.1' 版本0.1和版本1.0之間的任意版本,不包括1.0和比1.0更高的版本
'~> 0' 版本0或比版本0更高的版本,這基本上和不指定版本號的效果是一樣的。
  • 舉例
pod 'AFNetworking'      //不顯式指定依賴庫版本,表示每次都獲取最新版本  
pod 'AFNetworking', '2.0'     //只使用2.0版本  
pod 'AFNetworking', '> 2.0'     //使用高於2.0的版本  
pod 'AFNetworking', '>= 2.0'     //使用大於或等於2.0的版本  
pod 'AFNetworking', '< 2.0'     //使用小於2.0的版本  
pod 'AFNetworking', '<= 2.0'     //使用小於或等於2.0的版本  
pod 'AFNetworking', '~> 0.1.2'     //使用大於等於0.1.2但小於0.2的版本  
pod 'AFNetworking', '~>0.1'     //使用大於等於0.1但小於1.0的版本  
pod 'AFNetworking', '~>0'     //高於0的版本,寫這個限制和什麼都不寫是一個效果,都表示使用最新版本 

使用本地文件夾內的一個庫

前提是本地的庫是可供pods管理的,也就是該庫中要有xxx.podspec

然後執行pod install後 本地的庫會管理在pods - Development pods 下

關於pods中相關文件

Podfile

CocoaPods是用ruby實現的,因此Podfile文件的語法就是ruby的語法。
podfile是一個說明文件,用以描述管理一個或者多個Xcode project的target的依賴庫。這個文件應該且必須被命名爲Podfile

podspec文件

後綴名爲podspec(cocoapods specification)的文件是cocoapods的說明文件,該文件爲Pods依賴庫的描述文件,每個Pods依賴庫必須有且僅有那麼一個描述文件。該文件包括依賴庫的名字、版本、描述、license、author、source、platform等信息。

Podfile.lock

這是 CocoaPods 創建的最重要的文件之一。它記錄了需要被安裝的 pod 的每個已安裝的版本。如果你想知道已安裝的 pod 是哪個版本,可以查看這個文件。推薦將 Podfile.lock 文件加入到版本控制中,這有助於整個團隊的一致性。Objc中國
Podfile.lock文件最大得用處在於多人開發。當團隊中的某個人執行完pod install命令後,生成的Podfile.lock文件就記錄下了當時最新Pods依賴庫的版本,這時團隊中的其它人check下來這份包含Podfile.lock文件的工程以後,再去執行pod install命令時,獲取下來的Pods依賴庫的版本就和最開始用戶獲取到的版本一致。如果沒有Podfile.lock文件,後續所有用戶執行pod install命令都會獲取最新版本的依賴庫,這就有可能造成同一個團隊使用的依賴庫版本不一致,這對團隊協作來說絕對是個災難!在這種情況下,如果團隊想使用當前最新版本的依賴庫,有兩種方案:

1.更改Podfile,使其指向最新版本的依賴庫;
2.執行pod update命令;
當執行pod install 命令時,首先會根據Podfile文件指定的內容,安裝依賴庫,如果有Podfile.lock文件而且對應的Podfile文件未被修改,則會根據Podfile.lock文件指定的版本安裝。
每次更新了Podfile文件時,都需要重新執行pod install命令,以便重新安裝Pods依賴庫。
當執行pod update命令時,如果Podfile中指定的依賴庫版本不是寫死的,當對應的依賴庫有了更新,無論有沒有Podfile.lock文件,都會去獲取Podfile文件描述的允許獲取到的最新依賴庫版本。

關於pods一些命令原理

pod repo update

先說一下pod官方庫

終端 cd ~/.cocoapods/repos/

進入該文件夾下可以發現一個master/文件夾,繼續進Specs/,會發現很多很多以數字命名的文件夾,這裏其實就是官方管理所有pod庫的一個資源庫,如果一直cd,進到最底層,會發現其實到最後是每一個庫的.podspec.json,這裏涉及到.podspec是一個什麼東西,以及關於pod庫的製作,可以自行查閱資料。

我們平時開發pod update或者pod install , 這裏其實 pod的工作就是根據pod庫名在master/Specs/中找到對應的庫,若指定版本則找到指定版本的podspec,否則找最高版本的podspec,找到後根據podsepc文件中的配置下載指定的庫資源。

那麼pod repo update 的工作就是更新pod資源目錄,也就是master下的資源,簡單說 如果有一個第三方庫發佈了一個最新的版本,如果你不執行pod repo update,那麼你的本地是不會知道有一個最新版本的,還會一直以你本地的資源目錄爲準。那麼你永遠都拿不到這個庫的最新版本。

可能有些人會問了,我平時從來不會用pod repo update也可以拿到最新的庫,那是因爲在使用pod update是默認會執行一遍pod repo update ,所以會發現如果你的pod庫引用多了,每次pod update都很慢,網絡如果不好更是經常會斷掉,就是因爲你在更新pod時,也更新了資源目錄

pod update 工作流程 :
先拉取遠程最新目錄,再根據目錄中的資源重新更新一遍pod

如果你的podfile中每個庫都指定了版本還好,如果沒有,那麼每次都是拉一遍最新庫, 這時候就要用到命令

pod update --no-repo-update
這條命令表示只根據本地目錄更新庫,不需要拉取遠程

再說一下有些時候會引用一些私有庫 , pod repo update 會把 ~/.cocoapods/repos/這個目錄下所有的資源庫目錄都更新一遍,有時候不想更新master,只想更新某個具體的私有庫怎麼辦。。命令。。。強大而又實用

pod repo update ~/.cocoapods/repos/***/
需要更新哪個就指定哪個文件夾就可以了

關於pods中的一些問題

cocoaPods was not able to update the master repo

先刪除全局的緩存:
sudo rm -fr ~/Library/Caches/CocoaPods/
sudo rm -fr ~/.cocoapods/repos/master/

終極大招
sudo rm -fr Pods/

再執行
sudo gem install cocoapods
pod setup

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