導語
Cocoapods是iOS開發中一款優秀的包管理工具,由于其使用起來簡單、高效,得到了廣泛的使用。為什么要使用Cocoapods來管理第三方庫呢?Cocoapods背后的原理是什么呢?如何制作出屬于自己的私有庫?如何制作屬于自己的公有庫呢?
為什么要使用Cocoapods來管理第三方庫呢?
-
傳統使用第三方庫的劣勢
- 使用一個第三方SDK,需要在工程里面添加一堆配置,少添加一步配置就會報一大堆錯誤。這個時候為了排查少了哪一個步驟,只能從頭開始重做一遍,太浪費時間和精力。有些配置還不好配置,就更使人煩躁郁悶了。
- 如果使用的第三方SDK有比較重要的更新,想使用最新的SDK只能到官方下載最新的SDK,重新導入到自己的項目工程中。
- 如果公司有多個項目,每一個工程都這樣配置一遍,這是多么痛苦的領悟呀。
-
使用Cocoapods管理第三方庫的優勢
我們看下使用Cocoapods是如何管理一個第三方庫的?在Podfile里面寫入這些內容:
platform :ios, '8.0'
use_frameworks!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/
Cocoapods是如何實現查找第三方庫呢?我自己是這樣理解的,如下圖:
從圖中,可以看到通過.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" } #作者信息
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這個文件下面查找的。
如何制作出屬于自己的私有庫?
先創建出一個私有倉庫,大家可以在coding上創建一個私有庫(免費的)。
-
先cd到你要創建私有庫的目錄下面,然后把剛才創建的私有庫從remote端clone到本地,clone完成后,如下圖:
Cocoapods-03.png
MyPods是我創建出來的文件夾,MyPrivatePods是從remote端clone到本地的。
-
在MyPrivatePods文件目錄下,創建一個Classes文件,用來存放源碼文件。創建完成如下:
CocoaPods-04.png -
在MyPrivatePods目錄下創建.podspec文件,先在終端cd到該目錄下,然后輸入以下命令:
pod spec create BruceCategoryComponents
其中BruceCategoryComponents是我自己起的spec_name,可以根據自己的需要改成自己想要的名字。創建完成后如下圖:
-
然后用Xcode打開.podspec文件,進行編輯,怎么進行編輯可以參考Cocoapods原理那部分,有提到的。編輯完成后,在終端可以輸入
pod lib lint
編輯成功后,會出現以下提示的:
否則的話,根據終端提示的錯誤信息,進行修改,直到驗證成功。
-
為了測試的方便,我們在MyPrivatePods目錄下創建一個demo工程,這樣方便以后對私有庫進行維護更新與測試,創建完成后如下圖:
Cocoapods-07.png
把Classes源文件拷貝到demo工程里面,這樣方便其他人也對該私有庫進行維護,添加新的功能。
-
往coding上提交剛才的修改,并打上tag標簽。一定要記得打上tag標簽,且與剛才編輯.podspec里面寫的版本號一致。
Cocoapods-08.png -
創建屬于自己的私有庫中心,為什么要創建自己的私有庫,可以參照Cocoapods原理部分講的。敲入以下命令即可:
pod repo add BrucePods https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git
創建成功后,可以進入~/.cocoapods/repos目錄下可以看到BrucePods文件。如下圖:
-
下面就是把BruceCategoryComponents.podspec添加到私有庫中心,如下:
pod repo push BrucePods BruceCategoryComponents.podspec
添加成功后,如下圖:
可以進入到BrucePods目錄下查看一下現在的文件目錄結構:
-
這個時候,就可以通過pod search命令搜索到剛才創建的私有庫了。如下所示:
Cocoapods-12.png
到這個步驟我們的私有庫就制作完成了。來測試一下,我們的私有庫是否能夠正常使用。我們創建一個新的工程,在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'
-
私有庫的升級、分支
在對私有庫進行升級維護的時候,測試沒有問題后,只需要重新編輯.podspec文件,修改相應的版本號,再次執行下面命令即可:pod repo push BrucePods BruceCategoryComponents.podspec
想創建分支的話,只需對subspec進行設置即可。
-
刪除私有庫
如果想要刪除私有庫,需要分兩步,第一步刪除coding上創建的私有庫。第二部,到~/.cocoapods/repos目錄下,通過以下命令行即可刪除:rm -rf BrucePods
其他項目組成員如何使用私有庫
首先在coding上面給其他成員添加相應的權限。另外,在其電腦上執行以下命令即可:
pod repo add BrucePods https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git
如何制作屬于自己的公有庫呢?
公有庫的制作和私有庫的制作很多都是相同的,唯一不同的就是把.podspec文件提交到公有倉庫里面了。以前Cocoapods組件的提交方式是通過pull request進行的,現在改成trunk自動化的提交方式。Trunk自動化提交有下面幾個步驟:
- 首次使用trunk的時候,需要注冊自己的電腦:
// pod trunk register [E-mail] [User Name]
$ pod trunk register cqdeyouxiang@163.com "bruce" -
執行完成之后,會受到一封驗證郵件,按郵件提示完成驗證即可。
注冊流程完成之后,可以使用
pod trunk me
驗證一下自己是否注冊成功,成功后,會看到一下輸出的:
Cocoapods-14.png - 接下來重復制作私有庫1-7步驟,注意此時應該在github上創建一個公有的倉庫,其他不變。
1-7步驟做完之后,執行提交命令,如下:
pod trunk push BRCategoryComponents.podspec
只需要這一條命令,組件就被推送到Cocoapods的主倉庫中了。 - 可以通過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/
國士梅花
歡迎大家關注國士梅花,技術路上與你陪伴。