組件化方案之創建Pod私有庫

最近公司的項目因為功能較多,復雜度較高,所以打算使用組件化方案去解耦業務,當然組件化方案的考慮有很多,不過這里我們只談用CocoaPods去管理組件這一塊.

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

  1. 我們為什么使用CocoaPods去管理組件呢?
  2. 我們為什么要創建Pod私有庫呢?
  3. 我們在用 cocoaPods 去管理組件,還會遇到一個問題,那就是需不需要把我們的組件封裝成framework?

1. 我們為什么使用CocoaPods去管理組件呢?

CocoaPods組件化開發好處:

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

2. 我們為什么要創建Pod私有庫呢?

眾所周知, CocoaPods 有兩種庫,公開庫私有庫,公開庫是所有人都可以通過 pod 把你的代碼集成到自己的項目,而私有庫只是可以內部人員自己使用,而我們并沒有打算把自己的組件給別人用,所以我們要用Pod私有庫

3. 我們在用 cocoaPods 去管理組件,還會遇到一個問題,那就是需不需要把我們的組件封裝成framework?

封裝成framework有如下好處:

  • 保證在開發過程中,其他的開發人員肯能會修改我的組件代碼.

在多人開發的情況下,我不能保證其他開發人員不去修改我的組件代碼,如果我更新了我的組件代碼,那工程在升級組件之后,程序必然會出現問題,如果我封裝成了framework,只在. h 文件中暴露出調用接口的話,是最安全的.

  • 如果以后我們的組件要公布出去,又不想開源代碼,只要創建一個Pod公開庫就可以.

在封裝成framework的情況下,調用者是看不見接口的內部實現的,保證了代碼的安全性

封裝成framework有如下壞處:

  • 不方便調試,是封裝成framework最不方便的地方,出現一個小 bug, 我都需要在本地調試成功之后,打包成framework,然后去更新我的 pod 私有庫.這個過程是很麻煩的,無形增加了開發成本.

封裝成framework的利弊都說完了,大家可以根據自己的實際情況進行選擇.

創建Pod私有庫

言歸正傳,當我們要創建Pod私有庫時,都需要做什么?

  1. 創建工程
  2. 創建Pod所對應的podspec文件
  3. 創建私有的Spec Repo
  4. 本地測試podspec文件是否可用
  5. 向私有的Spec Repo中提交podspec
  6. 測試Spec Repo中的的 podspec 是否可用
  7. 私有庫關聯trunk 賬號

1. 創建工程

因為 github 的私有庫是付費的,所以我使用碼云的私有倉庫.

創建完才想起來截圖,所以就變成這樣了,大家將就看一下吧

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

把你的組件代碼上傳到倉庫

我的目錄結構是這樣的

2. 創建Pod所對應的podspec文件

切換到項目目錄下

cd ~/Desktop/foundationcategaries 

生成.podspec文件

$ pod spec create FoundationCategaries

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

執行完這句換之后,你就多了一個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. 創建私有的Spec Repo

打開你cocopods 倉庫

open ~/.cocoapods/repos/

現在的目錄結構是這樣的

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

執行成功后你會發現當前目錄下多了一個FoundationCategories的文件夾

切換到FoundationCategories路徑下

cd ~/.cocoapods/repos/FoundationCategories/

測試本地庫是否正確

pod lib lint

測試后,發現問題,就去修改,錯誤信息一般提示的很明顯,成功后會提示如下:

4. 本地測試podspec文件是否可用

我們可以創建一個新的項目,在這個項目的Podfile文件中直接指定剛才創建編輯好的podspec文件,看是否可用。 在Podfile中我們可以這樣編輯

platform :ios, '8.0'

pod 'FoundationCategaries', :podspec => '~/.cocoapods/repos/FoundationCategories/FoundationCategaries.podspec'  # 指定podspec文件

然后執行pod install命令安裝依賴

我這里遇到個錯誤,如下

fatal: Remote branch 0.1 not found in upstream origin

這個錯誤就是沒有找到碼云倉庫找到我的tag 0.1,所以出錯.因為我們在FoundationCategaries.podspec文件里面指定了tag 0.1

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

cocopods去我們的倉庫找,卻沒有找到,所以會報錯

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

然后執行pod install命令安裝依賴

安裝成功.

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

提交之前需要注冊Cocoapods賬號,如果有請忽略此步驟

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

注冊成功,會給你發一封驗證郵件.

打開郵件驗證一下就好,如果發現自己沒有收到郵件,去垃圾郵件里面找一下,可能被攔截了.

驗證之后,執行pod trunk me,驗證一下是否注冊成功.

成功后,切換到FoundationCategories目錄下

cd ~/.cocoapods/repos/FoundationCategories/

向私有的Spec Repo中提交podspec

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

完成之后這個組件庫就添加到我們的私有Spec Repo中了.

查找一下

pod search FoundationCategaries

ok

6. 測試Spec Repo中的的 podspec 是否可用

新建工程測試一下
Podfile 文件中添加FoundationCategaries

 pod 'FoundationCategaries', '~> 0.1'

完成之后,說明Spec Repo中的的 podspec 可用

7. 私有庫關聯trunk 賬號

以上建立了本地私有庫,如果更換設備,還想使用,就要給私有庫關聯 trunk 賬號,關聯以后,我們以后就可以通過賬號管理和維護我們的私有庫了

pod trunk push

這樣表示關聯成功

這時候我們看看我們的 trunk賬戶信息

??,關聯完畢.

關于 trunk 的其他操作大家可以訪問trunk文檔,里面的內容很詳細.

這篇文章我們就講到這里,關于更新維護podspec我們會在下一篇文章詳細介紹.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容