CocoaPods使用
ofollow,noindex">原文連結
CocoaPods/">CocoaPods簡介
CocoaPods是iOS開發、macOS開發中的包依賴管理工具,效果如Java中的Maven,nodejs的npm。
CocoaPods是一個開源的專案,原始碼是用ruby寫的, 原始碼地址 在GitHub上。
無論是做iOS開發還是macOS開發,都不可避免的要使用到一些第三方庫,優秀的第三方庫能夠提升我們的開發效率。如果不使用包依賴管理工具,我們需要手動管理第三方包,包括但不限於:
- 將這些第三方庫的原始碼拷貝到專案中
- 第三方庫程式碼有可能依賴一些系統framework,我們需要把第三方庫依賴的framework匯入到專案中
- 當第三方庫有更新時,需要將更新過的程式碼拷貝到專案中
以上工作雖然簡單,但是如果專案中的第三方庫較多,需要耗費大量的時間和精力。CocoaPods可以將我們從這些繁瑣的工作中解放出來。
安裝CocoaPods
安裝CocoaPods比較方便。通常情況下,macOS都安裝了ruby,直接使用ruby 的gem命令即可安裝CocoaPods。
使用如下命令可以檢視有沒有安裝ruby:
// 如果能正確的輸出版本號,則說明ruby已經正確安裝 ruby --version
使用如下命令可以檢視gem的版本號:
// 該命令會輸出gem的版本號 gem --version
如果gem的版本號過低,安裝CocoaPods可能會失敗。所以在安裝CocoaPods之前可以升級一下gem,使用如下命令:
// 更新gem sudo gem update --system
另外需要注意的是,ruby的軟體源 https://rubygems.org 使用的是亞馬遜雲的服務,國內普通網路是不能訪問的。如果不能訪問,可以將ruby的源換成國內淘寶的源,命令如下:
gem sources --remove https://rubygems.org/ gem sources -a https://ruby.taobao.org/
操作完後,可以驗證下更換源是否成功,命令如下:
// 如果只有一個淘寶的源,說明更換源成功 gem source -l
以上所有工作都完成之後,現在可以安裝CocoaPods了,命令如下:
// 安裝CocoaPods sudo gem install cocoapods
安裝成功後,在使用之前,還需要對CocoaPods初始化,命令如下:
// 這一步花費的時間比較久,耐心等待即可 pod setup
測試一下CocoaPods有沒有安裝成功:
// 如果能正確顯示版本號,說明CocoaPods安裝成功 pod --version
使用CocoaPods
使用CocoaPods安裝第三方框架
CocoaPods主要是用於iOS專案、macOS專案管理第三方框架,因此在介紹如何使用CocoaPods時,需要結合iOS專案或者macOS專案。這裡新建一個iOS專案TestCocoaPods。
- 進入專案中和.xcodeproj同級的資料夾,如圖:

image
- 在該目錄下新建一個Podfile檔案,可以使用命令:
touch Podfile
新建Podfile後如下圖:

image
- 編輯Podfile檔案。Podfile檔案有其固定的格式,可以從網上找一個,然後修改裡面的內容即可。這裡隨便貼一個:
# Uncomment this line to define a global platform for your project platform :ios, '8.0' target 'TestCocoaPods' do pod 'SDWebImage', '~> 4.3.2' end
當然可以增加更多的第三方庫,上述示例中只增加了1個,是SDWebImage。
Podfile檔案中需要寫明平臺,是iOS還是osx(macOS),以及第三方庫所要支援的系統最低版本號。之後是target,一個Podfile中可以有多個target。比如說外掛開發中,主專案和外掛專案所依賴的包可能是不同的,就可以寫兩個target,分別設定依賴的第三方庫。需要匯入一個第三方庫,只需要
pod 'package name', 'version number'
即可。版本號有多種表示方式,這裡簡單介紹幾種:
(1)'>=1.0' 最低版本號為1.0
(2)'<=1.0' 最高版本號為1.0
(3)'~>1.0' 相容1.0的版本的最新版本
通常情況下使用 ~> 的方式。
- 安裝所依賴的第三方庫。安裝使用的方式是命令列,在該目錄下執行下述命令即可:
pod install
安裝之後會發現該目錄下有較大的變化,如下圖:

image
多了Pods目錄,且Pods目錄裡面也是一個單獨的工程。

image
多了TestCocoaPods.xcworkspace檔案,以後開啟TestCocoaPods專案時,需要開啟TestCocoaPods.xcworkspace而不是TestCocoaPods.xcodeproj。
開啟TestCocoaPods.xcworkspace後,可以發現,裡面包含兩個工程,分別是TestCocoaPods和Pods。

image
在TestCocoaPods中使用第三方庫,直接import即可。
- 當有需求增加或者刪除依賴的第三方庫時,直接修改Podfile檔案即可,修改完畢之後,執行命令:
pod install
即可。
如果有需求修改依賴的第三方庫的版本號,修改完畢之後,執行命令:
pod update
即可。
使用CocoaPods查詢第三方框架
在使用CocoaPods時,可以提前檢查第三方框架是否在CocoaPods的管理之下,使用的命令是search:
pod search 框架名
這是我search YYWebImage的結果:

image
CocoaPods的大概工作原理
CocoaPods的使用相對來說是比較簡單的。那麼CocoaPods是如何完成這些工作的?以及為何生成了一個Pods工程?
實際上,CocoaPods是將所有依賴的第三方庫都放到了Pods專案中

image
所有的原始碼管理工作從住專案轉移到了Pods專案中。
Pods專案最終會編譯成一個libPods-專案名.a的檔案,主專案只需要依賴這個.a檔案即可。

image
對於libPods-TestCocoaPods.a這個檔案,可以將其理解為各個第三方庫的.a檔案的集合。在本例中,libPods-TestCocoaPods.a就是libPureLayout.a和libSDWebImage.a的集合。

image
開源專案支援CocoaPods
下面介紹一下如何讓自己的開源專案支援CocoaPods。
gitHub上新建倉庫
首先,需要在gitHub上新建倉庫,新建倉庫時記得選擇開源協議,通常選擇MIT,另外就是設定成專案為public。這裡新建一個倉庫ACMoreResponseButton。

image
記得選擇開源協議為MIT:

image
各種開源協議
開源協議有多種,如MIT、BSD等,常見的有6種,關於這6種開源協議的區別,網上有一張圖描述的是非常清楚的,這裡貼一下:

image
可以看到,MIT許可證是要求最不嚴格的許可證,可以給其他開發者更大的空間。這也是為何多數開源框架都使用MIT許可證的原因。
將gitHub上的倉庫克隆到本地
使用git clone命令,將gitHub上的倉庫克隆到本地:
git clone https://github.com/acBool/ACMoreResponseButton.git
克隆完之後,在本地倉庫上新建專案,並完成對應的功能。之後,使用git add、git commit、git push命令,將本地的修改提交,並且推送到遠端倉庫,這些步驟不再詳細介紹。
新建podspec檔案
凡是支援CocoaPods的開源庫,都需要具備podspec檔案,podspec檔案可以理解成是對該開源庫的描述,包括作者資訊,專案主頁等。新建podspec檔案使用下述命令:
pod spec create ACMoreResponseButton
新建podspec之後:

image
編輯podspec檔案
podspec檔案新建之後,裡面會有一些資訊,可以看做是一個模板,我們只需要稍微對podspec的檔案做改動即可。這裡貼一下我修改之後的podspec檔案:
s.name= "ACMoreResponseButton" s.version= "1.1.0" s.summary= "This is a moreResponseArea Button" s.homepage= "https://github.com/acBool/ACMoreResponseButton" s.license= "MIT" s.author= { "wmn" => "[email protected]" } s.platform= :ios, "9.0" s.source= { :git => "https://github.com/acBool/ACMoreResponseButton.git", :tag => "1.1.0" } s.source_files= "MoreResponseButtonExample/MoreResponseButtonExample/ACMoreResponseButton/*" s.exclude_files = "UIKit" s.requires_arc = true
podspec檔案中可以做更多的配置,如果想要了解更多,可以參考gitHub上一些比較好的開源庫,看下podspec檔案是怎麼寫的。
分支新建tag,並推送到遠端倉庫
在上面的podspec檔案中注意到,tag值為1.1.0,因此我們需要在分支上新建一個tag,並且將該tag推送到遠端倉庫,命令如下:
// 新建tag git tag 1.1.0 // 將本地的tag推送到遠端倉庫 git push --tags git push
這裡的tag值需要和podspec中寫的保持一致。
驗證podspec檔案
在將開源庫提交至CocoaPods之前,我們需要驗證一下podspec檔案,驗證命令如下:
pod spec lint ACMoreResponseButton.podspec
如果驗證不通過,會提示有幾個警告,有幾個error,且警告資訊,error資訊都會標識出來。需要注意的是,無論是警告還是error,都需要解決。
如果驗證通過,會提示如下圖:

image
提交至CocoaPods
注意,只有podspec檔案驗證通過後,才能將開源庫提交至CocoaPods,否則即使提交了也不會成功。提交CocoaPods的命令如下:
pod trunk push ACMoreResponseButton.podspec
提交成功之後如下圖:

image
註冊CocoaPods
注意,如果之前沒有提交過開源庫到CocoaPods,需要先註冊一下。註冊的命令為:
// 注意將郵箱名和暱稱替換 pod trunk register [email protected] '暱稱名' --description='描述'
執行完畢後,CocoaPods會給對應的郵箱傳送一封確認郵件,點選郵件中的確認連結即可。註冊成功後,再執行上面的提交步驟。
私有庫支援CocoaPods
在公司專案中,有時一些通用的功能會封裝成框架,這些框架也是可以支援CocoaPods的。所不同的是,我們希望這些框架只為公司內部使用,並不是開源的,可以稱之為私有庫。
私有庫支援CocoaPods的步驟和公有庫基本一致,區別就是不需要提交至CocoaPods,也就是驗證podspec檔案通過後就可以了。
另外就是,使用私有庫時,Podfile檔案的寫法也有細微區別。Podfile檔案中引入私有庫時的寫法:
// 注意替換私有git域名 pod 'ProjectName',git=>"https://XXX.git"