原文連接node
CocoaPods是iOS開發、macOS開發中的包依賴管理工具,效果如Java中的Maven,nodejs的npm。ios
CocoaPods是一個開源的項目,源碼是用ruby寫的,源碼地址在GitHub上。git
不管是作iOS開發仍是macOS開發,都不可避免的要使用到一些第三方庫,優秀的第三方庫可以提高咱們的開發效率。若是不使用包依賴管理工具,咱們須要手動管理第三方包,包括但不限於:github
以上工做雖然簡單,可是若是項目中的第三方庫較多,須要耗費大量的時間和精力。CocoaPods能夠將咱們從這些繁瑣的工做中解放出來。npm
安裝CocoaPods比較方便。一般狀況下,macOS都安裝了ruby,直接使用ruby 的gem命令便可安裝CocoaPods。xcode
使用以下命令能夠查看有沒有安裝ruby:ruby
// 若是能正確的輸出版本號,則說明ruby已經正確安裝
ruby --version
複製代碼
使用以下命令能夠查看gem的版本號:bash
// 該命令會輸出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主要是用於iOS項目、macOS項目管理第三方框架,所以在介紹如何使用CocoaPods時,須要結合iOS項目或者macOS項目。這裏新建一個iOS項目TestCocoaPods。
touch 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的版本的最新版本
一般狀況下使用 ~> 的方式。 4. 安裝所依賴的第三方庫。安裝使用的方式是命令行,在該目錄下執行下述命令便可:
pod install
複製代碼
安裝以後會發現該目錄下有較大的變化,以下圖:
多了Pods目錄,且Pods目錄裏面也是一個單獨的工程。
多了TestCocoaPods.xcworkspace文件,之後打開TestCocoaPods項目時,須要打開TestCocoaPods.xcworkspace而不是TestCocoaPods.xcodeproj。
打開TestCocoaPods.xcworkspace後,能夠發現,裏面包含兩個工程,分別是TestCocoaPods和Pods。
在TestCocoaPods中使用第三方庫,直接import便可。 5. 當有需求增長或者刪除依賴的第三方庫時,直接修改Podfile文件便可,修改完畢以後,執行命令:
pod install
複製代碼
便可。
若是有需求修改依賴的第三方庫的版本號,修改完畢以後,執行命令:
pod update
複製代碼
便可。
在使用CocoaPods時,能夠提早檢查第三方框架是否在CocoaPods的管理之下,使用的命令是search:
pod search 框架名
複製代碼
這是我search YYWebImage的結果:
CocoaPods的使用相對來講是比較簡單的。那麼CocoaPods是如何完成這些工做的?以及爲什麼生成了一個Pods工程?
實際上,CocoaPods是將全部依賴的第三方庫都放到了Pods項目中
全部的源碼管理工做從住項目轉移到了Pods項目中。
Pods項目最終會編譯成一個libPods-項目名.a的文件,主項目只須要依賴這個.a文件便可。
對於libPods-TestCocoaPods.a這個文件,能夠將其理解爲各個第三方庫的.a文件的集合。在本例中,libPods-TestCocoaPods.a就是libPureLayout.a和libSDWebImage.a的集合。
下面介紹一下如何讓本身的開源項目支持CocoaPods。
首先,須要在gitHub上新建倉庫,新建倉庫時記得選擇開源協議,一般選擇MIT,另外就是設置成項目爲public。這裏新建一個倉庫ACMoreResponseButton。
記得選擇開源協議爲MIT:
開源協議有多種,如MIT、BSD等,常見的有6種,關於這6種開源協議的區別,網上有一張圖描述的是很是清楚的,這裏貼一下:
能夠看到,MIT許可證是要求最不嚴格的許可證,能夠給其餘開發者更大的空間。這也是爲什麼多數開源框架都使用MIT許可證的緣由。
使用git clone命令,將gitHub上的倉庫克隆到本地:
git clone https://github.com/acBool/ACMoreResponseButton.git
複製代碼
克隆完以後,在本地倉庫上新建項目,並完成對應的功能。以後,使用git add、git commit、git push命令,將本地的修改提交,而且推送到遠程倉庫,這些步驟再也不詳細介紹。
凡是支持CocoaPods的開源庫,都須要具有podspec文件,podspec文件能夠理解成是對該開源庫的描述,包括做者信息,項目主頁等。新建podspec文件使用下述命令:
pod spec create ACMoreResponseButton
複製代碼
新建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" => "acbool@163.com" }
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文件是怎麼寫的。
在上面的podspec文件中注意到,tag值爲1.1.0,所以咱們須要在分支上新建一個tag,而且將該tag推送到遠程倉庫,命令以下:
// 新建tag
git tag 1.1.0
// 將本地的tag推送到遠程倉庫
git push --tags
git push
複製代碼
這裏的tag值須要和podspec中寫的保持一致。
在將開源庫提交至CocoaPods以前,咱們須要驗證一下podspec文件,驗證命令以下:
pod spec lint ACMoreResponseButton.podspec
複製代碼
若是驗證不經過,會提示有幾個警告,有幾個error,且警告信息,error信息都會標識出來。須要注意的是,不管是警告仍是error,都須要解決。
若是驗證經過,會提示以下圖:
注意,只有podspec文件驗證經過後,才能將開源庫提交至CocoaPods,不然即便提交了也不會成功。提交CocoaPods的命令以下:
pod trunk push ACMoreResponseButton.podspec
複製代碼
提交成功以後以下圖:
注意,若是以前沒有提交過開源庫到CocoaPods,須要先註冊一下。註冊的命令爲:
// 注意將郵箱名和暱稱替換
pod trunk register test@163.com '暱稱名' --description='描述'
複製代碼
執行完畢後,CocoaPods會給對應的郵箱發送一封確認郵件,點擊郵件中的確認連接便可。註冊成功後,再執行上面的提交步驟。
在公司項目中,有時一些通用的功能會封裝成框架,這些框架也是能夠支持CocoaPods的。所不一樣的是,咱們但願這些框架只爲公司內部使用,並非開源的,能夠稱之爲私有庫。
私有庫支持CocoaPods的步驟和公有庫基本一致,區別就是不須要提交至CocoaPods,也就是驗證podspec文件經過後就能夠了。
另外就是,使用私有庫時,Podfile文件的寫法也有細微區別。Podfile文件中引入私有庫時的寫法:
// 注意替換私有git域名
pod 'ProjectName',git=>"https://XXX.git"
複製代碼