注:需要讀者有一定CocoaPods基礎,并且設備中CocoaPods已經更新到最新版!
一.組件化介紹
需求來源
隨著項目規模不斷擴大,業務模塊增多,開發過程中會有多條產品線(多人或多小組開發不同的功能);如果用傳統的開發模式,會導致代碼臃腫,編譯速度越來越慢,開發效率低下,代碼維護成本越來越高.
組件化優勢
代碼邏輯和項目結構清晰;代碼利用率高,迭代效率高;可以快速集成,并能做單元測試;每個組件可以單獨運行,組件之間的耦合度低.
組件化模塊劃分
基礎組件: 宏定義/自定義分類/自定義工具類
功能組件: 項目中常用功能,如:定位/推送/分享
業務組件: 根據具體業務而定,如:聊天/商城
中間組件: 負責界面路由/傳參/回調
宿主工程: 類似一個殼子,組合各個組件,形成一個完整的App
組件化實質
組件化其實是把每一個功能模塊拆分成一個一個的Pod庫;比如項目中要用到AFN,只要Pod一下,便觸手可及~;現在我們制作自己的Pod庫,然后把它集成到項目中.
二.需要了解
Trunk賬號
- 認證CocoaPods API的服務
- 用來管理公共倉庫中的自己的組件
索引文件(.podspec文件)
- 記錄一個組件的名稱/版本/資源儲存路徑/維護者信息等
- 每個組件都必須有一個索引文件
索引文件庫(Spec Repo)
- 存放索引文件的倉庫
- 儲存在CocoaPods服務器上,我們下載或更新Pod的時候會把這個倉庫拷貝一份到本地,本地存放路徑:~/.cocoapods/repos/
- CocoaPods提供一個公共庫,儲存在本地的路徑為:~/.cocoapods/repos/master/
- 我們可以創建私有倉庫,儲存在本地的路徑為:~/.cocoapods/repos/自定義倉庫名/
組件模板
- CocoaPods提供用于快速創建組件的模板
- 里邊可以制作我們的代碼,可以做單元測試等,包含一個對應的索引文件
- 組件化就是以這個模板為基礎,制作自己的組件
三.思路梳理(注意劃重點了)
- 有了以上基礎知識的了解我們來梳理一下思路
- 本文會使用私有索引倉庫來維護組件(不使用公共倉庫master)
- 組件添加到公共倉庫中需要注冊Trunk賬號: 傳送門
- 在碼云(或者其他Git倉庫)創建一個私有的倉庫,當做<私有索引文件倉庫>,后邊用來儲存索引文件(項目名稱:xxSpecs)
- 在碼云(或者其他Git倉庫)創建一個公開的倉庫,當做<組件倉庫>,后邊用來儲存組件(項目名稱:xxKit)
- CocoaPods服務器不儲存我們的代碼,只儲存索引文件
- 制作好組件之后,索引文件里會儲存<組件倉庫>的地址,把索引文件傳給CocoaPods服務器,告訴它儲存在指定的<私有索引文件倉庫>
- 使用時,先通過CocoaPods服務器更新<私有索引文件倉庫>到本地;項目中Pod某個組件的時候,會在本地<私有索引文件倉庫>中找到這個組件的索引文件,從索引文件里拿到<組件倉庫>的地址,從這個地址把代碼下載到項目中
- 總結:思路梳理介紹了組件化制作過程的主干,只要大體明白我們在干什么,下邊具體操作時會有詳細步驟
四.具體操作
索引文件倉庫
- 關聯索引文件倉庫
- 把碼云上創建的索引文件倉庫關聯拷貝到本地
pod repo add [倉庫名] [倉庫URL地址]
- 之后輸入遠端Git倉庫的賬號和密碼
- 檢查是否安裝成功
- cd 到索引文件倉庫
cd ~/.cocoapods/repos/[倉庫名]
- 驗證索引文件倉庫
pod repo lint .
組件
- 本地新建一個文件夾,用于存放管理組件(起名:xxPod)
- 下載組件模板到xxPod文件夾
- cd 到xxPod文件夾
cd [文件夾全路徑]/xxPod
- 下載組件模板并設置組件名
[組件名] : xxKit (跟碼云上組件倉庫的名字一致)
pod lib create [組件名]
- 組件基本設置
// 使用哪種系統的模板
What platform do you want to use?? [ iOS / macOS ]
> ios
// 使用哪種語言
What language do you want to use?? [ Swift / ObjC ]
> objc
// 是否創建測試Demo
Would you like to include a demo application with your library? [ Yes / No ]
> yes
// 使用哪種測試框架
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> specta
// 是否需要測試視圖
Would you like to do view based testing? [ Yes / No ]
> yes
// 測試Demo的類前綴
What is your class prefix?
> XX
- 代碼制作
- 把自己的代碼(類文件)直接復制到xxPod/xxKit/xxKit/Classes里
- 配置組件索引文件: 傳送門
- 檢查索引文件格式是否規范
- cd 到組件根目錄
cd [文件夾全路徑]/xxPod/xxKit
- 檢查本地索引文件(passed validation 表示通過驗證;--allow-warnings可忽略警告)
pod lib lint
如果提示標簽類錯誤可暫時不用管,往下繼續
- 制作好的代碼Pod到組件測試工程中(可進行編譯,運行,發現代碼問題)
- cd 到組件的Example文件夾
cd [文件夾全路徑]/xxPod/xxKit/Example
- Pod集成
pod install
- 把做好的組件推送到自己的組件倉庫
- cd 到組件根目錄
cd [文件夾全路徑]/xxPod/xxKit/
- 初始化git
git init
git add .
- 提交一個Git版本
git commit -m "xxKit組件初始化"
- 關聯碼云上的組件倉庫
git remote add origin [組件倉庫URL]
- 推送版本到master分支(-f強制推送,覆蓋掉之前的所有文件)
git push origin master -f
- 添加版本標簽(標簽號必須與索引文件里的標簽號一致)
git tag 0.1.0
- 標簽推送到組件倉庫
git push --tags
- 檢查遠程索引文件(passed validation 表示通過驗證)
pod spec lint
關聯CocoaPods服務器
- 制作好的組件關聯CocoaPods服務器
- cd 到xxKit組件根目錄
cd [文件夾全路徑]/xxPod/xxKit
- 推送組件的索引文件到服務器,并告訴服務器存在哪個私有倉庫中
[私有倉庫名] : xxSpecs
[組件名] : xxKit
pod repo push [私有倉庫名] [組件名].podspec --allow-warnings
- 查看本地的CocoaPods倉庫(可看到公共庫和自己的私有庫)
pod repo
- 檢查組件
- 更新本地CocoaPods倉庫
pod repo update
- 搜索剛才制作的組件
[組件名] : xxKit
pod search [組件名]
項目中引用私有組件
- 新建一個項目工程,并添加Pod
- 配置Podfile文件
- 全局添加(<私有索引文件倉庫>地址)
source 'https://gitee.com/xxSpecs.git'
- 單獨添加(<組件倉庫>地址)
pod 'xxKit', :git => 'https://gitee.com/xxKit.git'