####爲何要使用Cocoapods來管理第三方庫呢?ios
傳統使用第三方庫的劣勢git
使用Cocoapods管理第三方庫的優點 咱們看下使用Cocoapods是如何管理一個第三方庫的?在Podfile裏面寫入這些內容: platform :ios, '8.0' use_frameworks!github
target 'MyApp' do pod 'AFNetworking' pod 'ORStackView' pod 'SwiftyJSON' end‘
上面作完以後,只須要在命令終端敲入如下命令便可完成安裝: $ pod install 是否是很簡單,只須要敲入pod install命令,就能完成各類繁瑣的配置,若是第三方庫有更新,只須要敲入如下命令便可完成更新: $ pod update --no-repo-update #--no-repo-update忽略本地repo更新,這個會在下面作解釋的。微信
Cocoapods私有庫帶來的好處 至此咱們已經大概瞭解了一下使用Cocoapods管理第三方庫的優點,可是咱們會發現這些都是公有的庫。若是公司內部實現一些私有的組件,不對外公開,而有想在不一樣項目中使用,改怎麼辦呢?使用Cocoapods製做私有庫就完美的解決了這個問題。下圖就是使用私有庫帶給咱們的好處:測試
經過圖咱們也能夠看到,相同的代碼只須要維護一份便可,遵循了軟件的設計原則,don't repeat. ####Cocoapods原理 關於具體的原理,能夠參考Objc上的這篇文章:http://objccn.io/issue-6-4/ui
Cocoapods是如何實現查找第三方庫呢?我本身是這樣理解的,以下圖:.net
從圖中,能夠看到經過.podspec能夠找到咱們想要的第三方庫,那麼.spec是什麼呢?以下:命令行
Pod::Spec.new do |s| s.name = "CategoryComponents" #名稱
s.version = "0.0.2" #版本號 s.summary = "bruce CategoryComponents." #描述設計
s.homepage = "https://coding.net/u/Bruce_ChenQi/p/DDNPrivatePods" #描述頁面 s.license = "MIT" #版權聲明 s.author = { "guoshimeihua" => "cqdeyouxiang@163.com" } #做者信息code
s.platform = :ios, "7.0" #使用平臺 s.source = { :git => "https://git.coding.net/Bruce_ChenQi/DDNPrivatePods.git", :tag => "0.0.2" } #源碼地址
s.source_files = "Classes", "Classes/**/*.{h,m}" #源碼文件 s.frameworks = "CoreGraphics", "CoreFoundation", "Foundation", "UIKit" #依賴的framework s.requires_arc = true #是否支持ARC end
至此,咱們明白了查找到第三方庫背後的原理。可是,具體如何進行搜索的呢?
先解釋一個概念,什麼是Spec Repo?它是全部的Pods的一個索引,也就是一個容器(集合),全部公開的Pods都在這個裏面。實際上就是一個Git倉庫remote端,當你使用了Cocoapods,這個倉庫會被clone到本地的~/.cocoapods/repos目錄下,進入到這個文件下能夠看到master文件夾,就是官方的Spec Repo了。當你pod search的時候就在master這個文件下面查找的。
####如何製做出屬於本身的私有庫?
1.先建立出一個私有倉庫,你們能夠在coding上建立一個私有庫(免費的)。
2.先cd到你要建立私有庫的目錄下面,而後把剛纔建立的私有庫從remote端clone到本地,clone完成後,以下圖:
MyPods是我建立出來的文件夾,MyPrivatePods是從remote端clone到本地的。
3.在MyPrivatePods文件目錄下,建立一個Classes文件,用來存放源碼文件。建立完成以下:
4.在MyPrivatePods目錄下建立.podspec文件,先在終端cd到該目錄下,而後輸入如下命令:
pod spec create BruceCategoryComponents
其中BruceCategoryComponents是我本身起的spec_name,能夠根據本身的須要改爲本身想要的名字。建立完成後以下圖:
5.而後用Xcode打開.podspec文件,進行編輯,怎麼進行編輯能夠參考Cocoapods原理那部分,有提到的。編輯完成後,在終端能夠輸入
pod lib lint
編輯成功後,會出現如下提示的:
不然的話,根據終端提示的錯誤信息,進行修改,直到驗證成功。
6.爲了測試的方便,咱們在MyPrivatePods目錄下建立一個demo工程,這樣方便之後對私有庫進行維護更新與測試,建立完成後以下圖:
把Classes源文件拷貝到demo工程裏面,這樣方便其餘人也對該私有庫進行維護,添加新的功能。
7.往coding上提交剛纔的修改,並打上tag標籤。必定要記得打上tag標籤,且與剛纔編輯.podspec裏面寫的版本號一致。
8.建立屬於本身的私有庫中心,爲何要建立本身的私有庫,能夠參照Cocoapods原理部分講的。敲入如下命令便可:
pod repo add BrucePods https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git
建立成功後,能夠進入~/.cocoapods/repos目錄下能夠看到BrucePods文件。以下圖:
9.下面就是把BruceCategoryComponents.podspec添加到私有庫中心,以下:
pod repo push BrucePods BruceCategoryComponents.podspec
添加成功後,以下圖:
能夠進入到BrucePods目錄下查看一下如今的文件目錄結構:
10.這個時候,就能夠經過pod search命令搜索到剛纔建立的私有庫了。以下所示:
到這個步驟咱們的私有庫就製做完成了。來測試一下,咱們的私有庫是否可以正常使用。咱們建立一個新的工程,在Podfile文件中,寫入如下內容:
target 'BruceDemo' do
platform :ios, '7.0' pod 'BruceCategoryComponents' end
而後運行pod install --no-repo-update命令,可是結果卻以下:
這是爲何呢?由於須要指明倉庫的來源才能夠的。添加如下兩句話就能夠了。 公有倉庫 source 'https://github.com/CocoaPods/Specs.git' 私有倉庫 source 'https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git'
11.私有庫的升級、分支 在對私有庫進行升級維護的時候,測試沒有問題後,只須要從新編輯.podspec文件,修改相應的版本號,再次執行下面命令便可:
pod repo push BrucePods BruceCategoryComponents.podspec
想建立分支的話,只需對subspec進行設置便可。
12.刪除私有庫 若是想要刪除私有庫,須要分兩步,第一步刪除coding上建立的私有庫。第二部,到~/.cocoapods/repos目錄下,經過如下命令行便可刪除:
rm -rf BrucePods
13.其餘項目組成員如何使用私有庫 首先在coding上面給其餘成員添加相應的權限。另外,在其電腦上執行如下命令便可: pod repo add BrucePods https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git
####如何製做屬於本身的公有庫呢? 公有庫的製做和私有庫的製做不少都是相同的,惟一不一樣的就是把.podspec文件提交到公有倉庫裏面了。之前Cocoapods組件的提交方式是經過pull request進行的,如今改爲trunk自動化的提交方式。Trunk自動化提交有下面幾個步驟:
1.首次使用trunk的時候,須要註冊本身的電腦:
# pod trunk register [E-mail] [User Name] $ pod trunk register cqdeyouxiang@163.com "bruce"
2.執行完成以後,會受到一封驗證郵件,按郵件提示完成驗證便可。 註冊流程完成以後,可使用 pod trunk me 驗證一下本身是否註冊成功,成功後,會看到一下輸出的:
3.接下來重複製做私有庫1-7步驟,注意此時應該在github上建立一個公有的倉庫,其餘不變。 1-7步驟作完以後,執行提交命令,以下:
pod trunk push BRCategoryComponents.podspec
只須要這一條命令,組件就被推送到Cocoapods的主倉庫中了。
4.能夠經過pod search來搜索剛纔本身建立的公有組件,以下圖:
但願這篇文章能幫助你們能夠建立出本身的私有庫和公有庫,文章有什麼錯誤的地方,歡迎你們指正。 個人聯繫方式:cqdeyouxiang@163.com 微信號:BruceGuoShi
######參考文章 http://blog.wtlucky.com/blog/2015/02/26/create-private-podspec/ http://foggry.com/blog/2016/03/23/cocoapods-xiang-jie-zhi-geng-xin-pian/ https://blog.cnbluebox.com/blog/2014/03/31/cocoapodsdai-ma-guan-li/