組件化方案之創(chuàng)建Pod私有庫(kù)

最近公司的項(xiàng)目因?yàn)楣δ茌^多,復(fù)雜度較高,所以打算使用組件化方案去解耦業(yè)務(wù),當(dāng)然組件化方案的考慮有很多,不過(guò)這里我們只談?dòng)肅ocoaPods去管理組件這一塊.

在決定使用CocoaPods去管理組件之前,我的思路歷程是這樣的↓

  1. 我們?yōu)槭裁词褂肅ocoaPods去管理組件呢?
  2. 我們?yōu)槭裁匆獎(jiǎng)?chuàng)建Pod私有庫(kù)呢?
  3. 我們?cè)谟?cocoaPods 去管理組件,還會(huì)遇到一個(gè)問(wèn)題,那就是需不需要把我們的組件封裝成framework?

1. 我們?yōu)槭裁词褂肅ocoaPods去管理組件呢?

CocoaPods組件化開(kāi)發(fā)好處:

  • 在CocoaPods中可以通過(guò)podfile很好的配置各個(gè)組件,包括組件的增加和刪除,以及控制某個(gè)組件的版本.使用CocoaPods的原因,很大程度是為了解決大型項(xiàng)目中,代碼管理工具merge代碼導(dǎo)致的沖突.并且可以通過(guò)配置podfile文件,輕松配置項(xiàng)目.
  • 每個(gè)組件都是一個(gè)獨(dú)立app,可以獨(dú)立開(kāi)發(fā)、測(cè)試,使得業(yè)務(wù)組件更加獨(dú)立,所有組件可以并行開(kāi)發(fā).下層為上層提供能滿足需求的底層庫(kù),保證上層業(yè)務(wù)層可以正常開(kāi)發(fā).

2. 我們?yōu)槭裁匆獎(jiǎng)?chuàng)建Pod私有庫(kù)呢?

眾所周知, CocoaPods 有兩種庫(kù),公開(kāi)庫(kù)私有庫(kù),公開(kāi)庫(kù)是所有人都可以通過(guò) pod 把你的代碼集成到自己的項(xiàng)目,而私有庫(kù)只是可以內(nèi)部人員自己使用,而我們并沒(méi)有打算把自己的組件給別人用,所以我們要用Pod私有庫(kù)

3. 我們?cè)谟?cocoaPods 去管理組件,還會(huì)遇到一個(gè)問(wèn)題,那就是需不需要把我們的組件封裝成framework?

封裝成framework有如下好處:

  • 保證在開(kāi)發(fā)過(guò)程中,其他的開(kāi)發(fā)人員肯能會(huì)修改我的組件代碼.

在多人開(kāi)發(fā)的情況下,我不能保證其他開(kāi)發(fā)人員不去修改我的組件代碼,如果我更新了我的組件代碼,那工程在升級(jí)組件之后,程序必然會(huì)出現(xiàn)問(wèn)題,如果我封裝成了framework,只在. h 文件中暴露出調(diào)用接口的話,是最安全的.

  • 如果以后我們的組件要公布出去,又不想開(kāi)源代碼,只要?jiǎng)?chuàng)建一個(gè)Pod公開(kāi)庫(kù)就可以.

在封裝成framework的情況下,調(diào)用者是看不見(jiàn)接口的內(nèi)部實(shí)現(xiàn)的,保證了代碼的安全性

封裝成framework有如下壞處:

  • 不方便調(diào)試,是封裝成framework最不方便的地方,出現(xiàn)一個(gè)小 bug, 我都需要在本地調(diào)試成功之后,打包成framework,然后去更新我的 pod 私有庫(kù).這個(gè)過(guò)程是很麻煩的,無(wú)形增加了開(kāi)發(fā)成本.

封裝成framework的利弊都說(shuō)完了,大家可以根據(jù)自己的實(shí)際情況進(jìn)行選擇.

創(chuàng)建Pod私有庫(kù)

言歸正傳,當(dāng)我們要?jiǎng)?chuàng)建Pod私有庫(kù)時(shí),都需要做什么?

  1. 創(chuàng)建工程
  2. 創(chuàng)建Pod所對(duì)應(yīng)的podspec文件
  3. 創(chuàng)建私有的Spec Repo
  4. 本地測(cè)試podspec文件是否可用
  5. 向私有的Spec Repo中提交podspec
  6. 測(cè)試Spec Repo中的的 podspec 是否可用
  7. 私有庫(kù)關(guān)聯(lián)trunk 賬號(hào)

1. 創(chuàng)建工程

因?yàn)?github 的私有庫(kù)是付費(fèi)的,所以我使用碼云的私有倉(cāng)庫(kù).

創(chuàng)建完才想起來(lái)截圖,所以就變成這樣了,大家將就看一下吧

正常添加 License 這里我選擇的是 MIT License

把你的組件代碼上傳到倉(cāng)庫(kù)

我的目錄結(jié)構(gòu)是這樣的

2. 創(chuàng)建Pod所對(duì)應(yīng)的podspec文件

切換到項(xiàng)目目錄下

cd ~/Desktop/foundationcategaries 

生成.podspec文件

$ pod spec create FoundationCategaries

FoundationCategaries替換成自己私有庫(kù)的名字,就像SDWebImage.

執(zhí)行完這句換之后,你就多了一個(gè)FoundationCategaries.podspec文件

Sublime Text或其他工具 打開(kāi)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文件提交碼云的倉(cāng)庫(kù).

3. 創(chuàng)建私有的Spec Repo

打開(kāi)你cocopods 倉(cāng)庫(kù)

open ~/.cocoapods/repos/

現(xiàn)在的目錄結(jié)構(gòu)是這樣的

pod repo add FoundationCategories http://git.oschina.net/xxx/foundationcategaries

執(zhí)行成功后你會(huì)發(fā)現(xiàn)當(dāng)前目錄下多了一個(gè)FoundationCategories的文件夾

切換到FoundationCategories路徑下

cd ~/.cocoapods/repos/FoundationCategories/

測(cè)試本地庫(kù)是否正確

pod lib lint

測(cè)試后,發(fā)現(xiàn)問(wèn)題,就去修改,錯(cuò)誤信息一般提示的很明顯,成功后會(huì)提示如下:

4. 本地測(cè)試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ò)誤就是沒(méi)有找到碼云倉(cāng)庫(kù)找到我的tag 0.1,所以出錯(cuò).因?yàn)槲覀冊(cè)?code>FoundationCategaries.podspec文件里面指定了tag 0.1

s.source       = { :git => "https://git.oschina.net/xxx/foundationcategaries.git", :tag => "0.1" }

cocopods去我們的倉(cāng)庫(kù)找,卻沒(méi)有找到,所以會(huì)報(bào)錯(cuò)

那我們就去打一個(gè)0.1tag,讓cocopods找到就可以了

然后執(zhí)行pod install命令安裝依賴

安裝成功.

5. 向私有的Spec Repo中提交podspec

提交之前需要注冊(cè)Cocoapods賬號(hào),如果有請(qǐng)忽略此步驟

pod trunk register xxx@xxx.com ‘snoopy’ --description='write for blog'

注冊(cè)成功,會(huì)給你發(fā)一封驗(yàn)證郵件.

打開(kāi)郵件驗(yàn)證一下就好,如果發(fā)現(xiàn)自己沒(méi)有收到郵件,去垃圾郵件里面找一下,可能被攔截了.

驗(yàn)證之后,執(zhí)行pod trunk me,驗(yàn)證一下是否注冊(cè)成功.

成功后,切換到FoundationCategories目錄下

cd ~/.cocoapods/repos/FoundationCategories/

向私有的Spec Repo中提交podspec

pod repo push FoundationCategories FoundationCategaries.podspec  #前面是本地Repo名字 后面是podspec名字

完成之后這個(gè)組件庫(kù)就添加到我們的私有Spec Repo中了.

查找一下

pod search FoundationCategaries

ok

6. 測(cè)試Spec Repo中的的 podspec 是否可用

新建工程測(cè)試一下
Podfile 文件中添加FoundationCategaries

 pod 'FoundationCategaries', '~> 0.1'

完成之后,說(shuō)明Spec Repo中的的 podspec 可用

7. 私有庫(kù)關(guān)聯(lián)trunk 賬號(hào)

以上建立了本地私有庫(kù),如果更換設(shè)備,還想使用,就要給私有庫(kù)關(guān)聯(lián) trunk 賬號(hào),關(guān)聯(lián)以后,我們以后就可以通過(guò)賬號(hào)管理和維護(hù)我們的私有庫(kù)了

pod trunk push

這樣表示關(guān)聯(lián)成功

這時(shí)候我們看看我們的 trunk賬戶信息

??,關(guān)聯(lián)完畢.

關(guān)于 trunk 的其他操作大家可以訪問(wèn)trunk文檔,里面的內(nèi)容很詳細(xì).

這篇文章我們就講到這里,關(guān)于更新維護(hù)podspec我們會(huì)在下一篇文章詳細(xì)介紹.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容