導(dǎo)語
Cocoapods是iOS開發(fā)中一款優(yōu)秀的包管理工具,由于其使用起來簡單、高效,得到了廣泛的使用。為什么要使用Cocoapods來管理第三方庫呢?Cocoapods背后的原理是什么呢?如何制作出屬于自己的私有庫?如何制作屬于自己的公有庫呢?
為什么要使用Cocoapods來管理第三方庫呢?
-
傳統(tǒng)使用第三方庫的劣勢
- 使用一個第三方SDK,需要在工程里面添加一堆配置,少添加一步配置就會報一大堆錯誤。這個時候?yàn)榱伺挪樯倭四囊粋€步驟,只能從頭開始重做一遍,太浪費(fèi)時間和精力。有些配置還不好配置,就更使人煩躁郁悶了。
- 如果使用的第三方SDK有比較重要的更新,想使用最新的SDK只能到官方下載最新的SDK,重新導(dǎo)入到自己的項(xiàng)目工程中。
- 如果公司有多個項(xiàng)目,每一個工程都這樣配置一遍,這是多么痛苦的領(lǐng)悟呀。
-
使用Cocoapods管理第三方庫的優(yōu)勢
我們看下使用Cocoapods是如何管理一個第三方庫的?在Podfile里面寫入這些內(nèi)容:
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私有庫帶來的好處
至此我們已經(jīng)大概了解了一下使用Cocoapods管理第三方庫的優(yōu)勢,但是我們會發(fā)現(xiàn)這些都是公有的庫。如果公司內(nèi)部實(shí)現(xiàn)一些私有的組件,不對外公開,而有想在不同項(xiàng)目中使用,改怎么辦呢?使用Cocoapods制作私有庫就完美的解決了這個問題。下圖就是使用私有庫帶給我們的好處:
通過圖我們也可以看到,相同的代碼只需要維護(hù)一份即可,遵循了軟件的設(shè)計原則,don't repeat.
Cocoapods原理
關(guān)于具體的原理,可以參考Objc上的這篇文章:http://objccn.io/issue-6-4/
Cocoapods是如何實(shí)現(xiàn)查找第三方庫呢?我自己是這樣理解的,如下圖:
從圖中,可以看到通過.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" #版權(quán)聲明
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
至此,我們明白了查找到第三方庫背后的原理。但是,具體如何進(jìn)行搜索的呢?
先解釋一個概念,什么是Spec Repo?它是所有的Pods的一個索引,也就是一個容器(集合),所有公開的Pods都在這個里面。實(shí)際上就是一個Git倉庫remote端,當(dāng)你使用了Cocoapods,這個倉庫會被clone到本地的~/.cocoapods/repos目錄下,進(jìn)入到這個文件下可以看到master文件夾,就是官方的Spec Repo了。當(dāng)你pod search的時候就在master這個文件下面查找的。
如何制作出屬于自己的私有庫?
先創(chuàng)建出一個私有倉庫,大家可以在coding上創(chuàng)建一個私有庫(免費(fèi)的)。
-
先cd到你要創(chuàng)建私有庫的目錄下面,然后把剛才創(chuàng)建的私有庫從remote端clone到本地,clone完成后,如下圖:
Cocoapods-03.png
MyPods是我創(chuàng)建出來的文件夾,MyPrivatePods是從remote端clone到本地的。
-
在MyPrivatePods文件目錄下,創(chuàng)建一個Classes文件,用來存放源碼文件。創(chuàng)建完成如下:
CocoaPods-04.png -
在MyPrivatePods目錄下創(chuàng)建.podspec文件,先在終端cd到該目錄下,然后輸入以下命令:
pod spec create BruceCategoryComponents
其中BruceCategoryComponents是我自己起的spec_name,可以根據(jù)自己的需要改成自己想要的名字。創(chuàng)建完成后如下圖:
-
然后用Xcode打開.podspec文件,進(jìn)行編輯,怎么進(jìn)行編輯可以參考Cocoapods原理那部分,有提到的。編輯完成后,在終端可以輸入
pod lib lint
編輯成功后,會出現(xiàn)以下提示的:
否則的話,根據(jù)終端提示的錯誤信息,進(jìn)行修改,直到驗(yàn)證成功。
-
為了測試的方便,我們在MyPrivatePods目錄下創(chuàng)建一個demo工程,這樣方便以后對私有庫進(jìn)行維護(hù)更新與測試,創(chuàng)建完成后如下圖:
Cocoapods-07.png
把Classes源文件拷貝到demo工程里面,這樣方便其他人也對該私有庫進(jìn)行維護(hù),添加新的功能。
-
往coding上提交剛才的修改,并打上tag標(biāo)簽。一定要記得打上tag標(biāo)簽,且與剛才編輯.podspec里面寫的版本號一致。
Cocoapods-08.png -
創(chuàng)建屬于自己的私有庫中心,為什么要創(chuàng)建自己的私有庫,可以參照Cocoapods原理部分講的。敲入以下命令即可:
pod repo add BrucePods https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git
創(chuàng)建成功后,可以進(jìn)入~/.cocoapods/repos目錄下可以看到BrucePods文件。如下圖:
-
下面就是把BruceCategoryComponents.podspec添加到私有庫中心,如下:
pod repo push BrucePods BruceCategoryComponents.podspec
添加成功后,如下圖:
可以進(jìn)入到BrucePods目錄下查看一下現(xiàn)在的文件目錄結(jié)構(gòu):
-
這個時候,就可以通過pod search命令搜索到剛才創(chuàng)建的私有庫了。如下所示:
Cocoapods-12.png
到這個步驟我們的私有庫就制作完成了。來測試一下,我們的私有庫是否能夠正常使用。我們創(chuàng)建一個新的工程,在Podfile文件中,寫入以下內(nèi)容:
target 'BruceDemo' do
platform :ios, '7.0'
pod 'BruceCategoryComponents'
end
然后運(yùn)行pod install --no-repo-update命令,但是結(jié)果卻如下:
這是為什么呢?因?yàn)樾枰该鱾}庫的來源才可以的。添加以下兩句話就可以了。
公有倉庫
source 'https://github.com/CocoaPods/Specs.git'
私有倉庫
source 'https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git'
-
私有庫的升級、分支
在對私有庫進(jìn)行升級維護(hù)的時候,測試沒有問題后,只需要重新編輯.podspec文件,修改相應(yīng)的版本號,再次執(zhí)行下面命令即可:pod repo push BrucePods BruceCategoryComponents.podspec
想創(chuàng)建分支的話,只需對subspec進(jìn)行設(shè)置即可。
-
刪除私有庫
如果想要刪除私有庫,需要分兩步,第一步刪除coding上創(chuàng)建的私有庫。第二部,到~/.cocoapods/repos目錄下,通過以下命令行即可刪除:rm -rf BrucePods
其他項(xiàng)目組成員如何使用私有庫
首先在coding上面給其他成員添加相應(yīng)的權(quán)限。另外,在其電腦上執(zhí)行以下命令即可:
pod repo add BrucePods https://git.coding.net/Bruce_ChenQi/MyPrivatePods.git
如何制作屬于自己的公有庫呢?
公有庫的制作和私有庫的制作很多都是相同的,唯一不同的就是把.podspec文件提交到公有倉庫里面了。以前Cocoapods組件的提交方式是通過pull request進(jìn)行的,現(xiàn)在改成trunk自動化的提交方式。Trunk自動化提交有下面幾個步驟:
- 首次使用trunk的時候,需要注冊自己的電腦:
// pod trunk register [E-mail] [User Name]
$ pod trunk register cqdeyouxiang@163.com "bruce" -
執(zhí)行完成之后,會受到一封驗(yàn)證郵件,按郵件提示完成驗(yàn)證即可。
注冊流程完成之后,可以使用
pod trunk me
驗(yàn)證一下自己是否注冊成功,成功后,會看到一下輸出的:
Cocoapods-14.png - 接下來重復(fù)制作私有庫1-7步驟,注意此時應(yīng)該在github上創(chuàng)建一個公有的倉庫,其他不變。
1-7步驟做完之后,執(zhí)行提交命令,如下:
pod trunk push BRCategoryComponents.podspec
只需要這一條命令,組件就被推送到Cocoapods的主倉庫中了。 - 可以通過pod search來搜索剛才自己創(chuàng)建的公有組件,如下圖:
總結(jié)
希望這篇文章能幫助大家可以創(chuàng)建出自己的私有庫和公有庫,文章有什么錯誤的地方,歡迎大家指正。
我的聯(lián)系方式: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/
國士梅花
歡迎大家關(guān)注國士梅花,技術(shù)路上與你陪伴。