最近公司的項(xiàng)目因?yàn)楣δ茌^多,復(fù)雜度較高,所以打算使用組件化方案去解耦業(yè)務(wù),當(dāng)然組件化方案的考慮有很多,不過這里我們只談用CocoaPods去管理組件這一塊.
在決定使用CocoaPods去管理組件之前,我的思路歷程是這樣的↓
- 我們?yōu)槭裁词褂肅ocoaPods去管理組件呢?
- 我們?yōu)槭裁匆獎?chuàng)建Pod私有庫呢?
- 我們在用 cocoaPods 去管理組件,還會遇到一個(gè)問題,那就是需不需要把我們的組件封裝成framework?
1. 我們?yōu)槭裁词褂肅ocoaPods去管理組件呢?
CocoaPods組件化開發(fā)好處:
- 在CocoaPods中可以通過podfile很好的配置各個(gè)組件匆笤,包括組件的增加和刪除研侣,以及控制某個(gè)組件的版本.使用CocoaPods的原因,很大程度是為了解決大型項(xiàng)目中炮捧,代碼管理工具merge代碼導(dǎo)致的沖突.并且可以通過配置podfile文件庶诡,輕松配置項(xiàng)目.
- 每個(gè)組件都是一個(gè)獨(dú)立app,可以獨(dú)立開發(fā)咆课、測試末誓,使得業(yè)務(wù)組件更加獨(dú)立扯俱,所有組件可以并行開發(fā).下層為上層提供能滿足需求的底層庫,保證上層業(yè)務(wù)層可以正常開發(fā).
2. 我們?yōu)槭裁匆獎?chuàng)建Pod私有庫呢?
眾所周知, CocoaPods 有兩種庫,公開庫
和私有庫
,公開庫
是所有人都可以通過 pod 把你的代碼集成到自己的項(xiàng)目,而私有庫
只是可以內(nèi)部人員自己使用,而我們并沒有打算把自己的組件給別人用,所以我們要用Pod私有庫
3. 我們在用 cocoaPods 去管理組件,還會遇到一個(gè)問題,那就是需不需要把我們的組件封裝成framework?
封裝成framework有如下好處:
- 保證在開發(fā)過程中,其他的開發(fā)人員肯能會修改我的組件代碼.
在多人開發(fā)的情況下,我不能保證其他開發(fā)人員不去修改我的組件代碼
,如果我更新了我的組件代碼,那工程在升級組件之后,程序必然會出現(xiàn)問題,如果我封裝成了framework,只在. h 文件中暴露出調(diào)用接口的話,是最安全的.
- 如果以后我們的組件要公布出去,又不想開源代碼,只要創(chuàng)建一個(gè)Pod公開庫就可以.
在封裝成framework的情況下,調(diào)用者是看不見接口的內(nèi)部實(shí)現(xiàn)的,保證了代碼的安全性
封裝成framework有如下壞處:
- 不方便調(diào)試,是封裝成framework最不方便的地方,出現(xiàn)一個(gè)小 bug, 我都需要在本地調(diào)試成功之后,打包成framework,然后去更新我的 pod 私有庫.這個(gè)過程是很麻煩的,無形增加了開發(fā)成本.
封裝成framework的利弊都說完了,大家可以根據(jù)自己的實(shí)際情況進(jìn)行選擇.
創(chuàng)建Pod私有庫
言歸正傳,當(dāng)我們要創(chuàng)建Pod私有庫時(shí),都需要做什么?
創(chuàng)建工程
創(chuàng)建Pod所對應(yīng)的podspec文件
創(chuàng)建私有的Spec Repo
本地測試podspec文件是否可用
向私有的Spec Repo中提交podspec
測試Spec Repo中的的 podspec 是否可用
私有庫關(guān)聯(lián)trunk 賬號
1. 創(chuàng)建工程
因?yàn)?github 的私有庫是付費(fèi)的,所以我使用碼云的私有倉庫.
創(chuàng)建完才想起來截圖,所以就變成這樣了,大家將就看一下吧
正常添加 License 這里我選擇的是 MIT License
把你的組件代碼上傳到倉庫
我的目錄結(jié)構(gòu)是這樣的
2. 創(chuàng)建Pod所對應(yīng)的podspec文件
切換到項(xiàng)目目錄下
cd ~/Desktop/foundationcategaries
生成.podspec文件
$ pod spec create FoundationCategaries
FoundationCategaries
替換成自己私有庫的名字,就像SDWebImage
.
執(zhí)行完這句換之后,你就多了一個(gè)FoundationCategaries.podspec
文件
用 Sublime Text
或其他工具 打開FoundationCategaries.podspec
文件,修改為一下樣式,注意修改完成后,不要有注釋信息.
Pod::Spec.new do |s|
s.name = "FoundationCategaries"
s.version = "0.1"
s.summary = "Just Testing."
s.description = <<-DESC
Testing Private Podspec.
* Markdown format.
* Don't worry about the indent, we strip it!
DESC
s.homepage = "https://git.oschina.net/baozhatou"
s.license = "MIT"
s.author = { "Sean" => "xxxx@xxx.com" }
s.source = { :git => "https://git.oschina.net/xxx/foundationcategaries.git", :tag => "0.1" }
s.platform = :ios, '8.0'
s.requires_arc = true
s.source_files = 'FoundationCategories/FoundationCategories/*.{h,m}', 'FoundationCategories/FoundationCategories/*.{h,m}'
s.frameworks = 'Foundation'
end
修改完成后,把你的代碼
和FoundationCategaries.podspec
文件提交碼云的倉庫.
3. 創(chuàng)建私有的Spec Repo
打開你cocopods 倉庫
open ~/.cocoapods/repos/
現(xiàn)在的目錄結(jié)構(gòu)是這樣的
pod repo add FoundationCategories http://git.oschina.net/xxx/foundationcategaries
執(zhí)行成功后你會發(fā)現(xiàn)當(dāng)前目錄下多了一個(gè)FoundationCategories
的文件夾
切換到FoundationCategories
路徑下
cd ~/.cocoapods/repos/FoundationCategories/
測試本地庫是否正確
pod lib lint
測試后,發(fā)現(xiàn)問題,就去修改,錯(cuò)誤信息一般提示的很明顯,成功后會提示如下:
4. 本地測試podspec文件是否可用
我們可以創(chuàng)建一個(gè)新的項(xiàng)目喇澡,在這個(gè)項(xiàng)目的Podfile
文件中直接指定剛才創(chuàng)建編輯好的podspec
文件迅栅,看是否可用。 在Podfile
中我們可以這樣編輯
platform :ios, '8.0'
pod 'FoundationCategaries', :podspec => '~/.cocoapods/repos/FoundationCategories/FoundationCategaries.podspec' # 指定podspec文件
然后執(zhí)行pod install
命令安裝依賴
我這里遇到個(gè)錯(cuò)誤,如下
fatal: Remote branch 0.1 not found in upstream origin
這個(gè)錯(cuò)誤就是沒有找到碼云倉庫找到我的tag
0.1
,所以出錯(cuò).因?yàn)槲覀冊?code>FoundationCategaries.podspec文件里面指定了tag
0.1
s.source = { :git => "https://git.oschina.net/xxx/foundationcategaries.git", :tag => "0.1" }
cocopods
去我們的倉庫找,卻沒有找到,所以會報(bào)錯(cuò)
那我們就去打一個(gè)0.1
的 tag
,讓cocopods
找到就可以了
然后執(zhí)行pod install
命令安裝依賴
安裝成功.
5. 向私有的Spec Repo中提交podspec
提交之前需要注冊Cocoapods賬號,如果有請忽略此步驟
pod trunk register xxx@xxx.com ‘snoopy’ --description='write for blog'
注冊成功,會給你發(fā)一封驗(yàn)證郵件.
打開郵件驗(yàn)證一下就好,如果發(fā)現(xiàn)自己沒有收到郵件,去垃圾郵件里面找一下,可能被攔截了.
驗(yàn)證之后,執(zhí)行pod trunk me
,驗(yàn)證一下是否注冊成功.
成功后,切換到FoundationCategories
目錄下
cd ~/.cocoapods/repos/FoundationCategories/
向私有的Spec Repo中提交podspec
pod repo push FoundationCategories FoundationCategaries.podspec #前面是本地Repo名字 后面是podspec名字
完成之后這個(gè)組件庫就添加到我們的私有Spec Repo
中了.
查找一下
pod search FoundationCategaries
ok
6. 測試Spec Repo中的的 podspec 是否可用
新建工程測試一下
在 Podfile
文件中添加FoundationCategaries
pod 'FoundationCategaries', '~> 0.1'
完成之后,說明Spec Repo中的的 podspec 可用
7. 私有庫關(guān)聯(lián)trunk 賬號
以上建立了本地私有庫,如果更換設(shè)備,還想使用,就要給私有庫關(guān)聯(lián) trunk
賬號,關(guān)聯(lián)以后,我們以后就可以通過賬號管理和維護(hù)我們的私有庫了
pod trunk push
這樣表示關(guān)聯(lián)成功
這時(shí)候我們看看我們的 trunk賬戶信息
??,關(guān)聯(lián)完畢.
關(guān)于 trunk 的其他操作大家可以訪問trunk文檔,里面的內(nèi)容很詳細(xì).
這篇文章我們就講到這里,關(guān)于更新維護(hù)podspec我們會在下一篇文章詳細(xì)介紹.