導(dǎo)語
Cocoapods是iOS開發(fā)中一款優(yōu)秀的包管理工具,由于其使用起來簡單蜓陌、高效觅彰,得到了廣泛的使用。為什么要使用Cocoapods來管理第三方庫呢钮热?Cocoapods背后的原理是什么呢填抬?如何制作出屬于自己的私有庫?如何制作屬于自己的公有庫呢隧期?
為什么要使用Cocoapods來管理第三方庫呢飒责?
-
傳統(tǒng)使用第三方庫的劣勢
- 使用一個第三方SDK赘娄,需要在工程里面添加一堆配置,少添加一步配置就會報(bào)一大堆錯誤宏蛉。這個時(shí)候?yàn)榱伺挪樯倭四囊粋€步驟遣臼,只能從頭開始重做一遍,太浪費(fèi)時(shí)間和精力拾并。有些配置還不好配置暑诸,就更使人煩躁郁悶了。
- 如果使用的第三方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è)計(jì)原則,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的時(shí)候就在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):
-
這個時(shí)候,就可以通過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ù)的時(shí)候,測試沒有問題后馍忽,只需要重新編輯.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的時(shí)候尉共,需要注冊自己的電腦:
// 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步驟,注意此時(shí)應(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ù)路上與你陪伴。