iOS組件化開發(基礎篇)

注:需要讀者有一定CocoaPods基礎,并且設備中CocoaPods已經更新到最新版!

一.組件化介紹

需求來源

隨著項目規模不斷擴大,業務模塊增多,開發過程中會有多條產品線(多人或多小組開發不同的功能);如果用傳統的開發模式,會導致代碼臃腫,編譯速度越來越慢,開發效率低下,代碼維護成本越來越高.

組件化優勢

代碼邏輯和項目結構清晰;代碼利用率高,迭代效率高;可以快速集成,并能做單元測試;每個組件可以單獨運行,組件之間的耦合度低.

組件化模塊劃分

基礎組件: 宏定義/自定義分類/自定義工具類
功能組件: 項目中常用功能,如:定位/推送/分享
業務組件: 根據具體業務而定,如:聊天/商城
中間組件: 負責界面路由/傳參/回調
宿主工程: 類似一個殼子,組合各個組件,形成一個完整的App

組件化實質

組件化其實是把每一個功能模塊拆分成一個一個的Pod庫;比如項目中要用到AFN,只要Pod一下,便觸手可及~;現在我們制作自己的Pod庫,然后把它集成到項目中.

二.需要了解

Trunk賬號

  1. 認證CocoaPods API的服務
  2. 用來管理公共倉庫中的自己的組件

索引文件(.podspec文件)

  1. 記錄一個組件的名稱/版本/資源儲存路徑/維護者信息等
  2. 每個組件都必須有一個索引文件

索引文件庫(Spec Repo)

  1. 存放索引文件的倉庫
  2. 儲存在CocoaPods服務器上,我們下載或更新Pod的時候會把這個倉庫拷貝一份到本地,本地存放路徑:~/.cocoapods/repos/
  3. CocoaPods提供一個公共庫,儲存在本地的路徑為:~/.cocoapods/repos/master/
  4. 我們可以創建私有倉庫,儲存在本地的路徑為:~/.cocoapods/repos/自定義倉庫名/

組件模板

  1. CocoaPods提供用于快速創建組件的模板
  2. 里邊可以制作我們的代碼,可以做單元測試等,包含一個對應的索引文件
  3. 組件化就是以這個模板為基礎,制作自己的組件

三.思路梳理(注意劃重點了)

  1. 有了以上基礎知識的了解我們來梳理一下思路
  2. 本文會使用私有索引倉庫來維護組件(不使用公共倉庫master)
  3. 組件添加到公共倉庫中需要注冊Trunk賬號: 傳送門
  4. 在碼云(或者其他Git倉庫)創建一個私有的倉庫,當做<私有索引文件倉庫>,后邊用來儲存索引文件(項目名稱:xxSpecs)
  5. 在碼云(或者其他Git倉庫)創建一個公開的倉庫,當做<組件倉庫>,后邊用來儲存組件(項目名稱:xxKit)
  6. CocoaPods服務器不儲存我們的代碼,只儲存索引文件
  7. 制作好組件之后,索引文件里會儲存<組件倉庫>的地址,把索引文件傳給CocoaPods服務器,告訴它儲存在指定的<私有索引文件倉庫>
  8. 使用時,先通過CocoaPods服務器更新<私有索引文件倉庫>到本地;項目中Pod某個組件的時候,會在本地<私有索引文件倉庫>中找到這個組件的索引文件,從索引文件里拿到<組件倉庫>的地址,從這個地址把代碼下載到項目中
  9. 總結:思路梳理介紹了組件化制作過程的主干,只要大體明白我們在干什么,下邊具體操作時會有詳細步驟

四.具體操作

索引文件倉庫

  1. 關聯索引文件倉庫
  • 把碼云上創建的索引文件倉庫關聯拷貝到本地
    pod repo add [倉庫名] [倉庫URL地址]
  • 之后輸入遠端Git倉庫的賬號和密碼
  1. 檢查是否安裝成功
  • cd 到索引文件倉庫
    cd ~/.cocoapods/repos/[倉庫名]
  • 驗證索引文件倉庫
    pod repo lint .

組件

  1. 本地新建一個文件夾,用于存放管理組件(起名:xxPod)
  2. 下載組件模板到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
  1. 代碼制作
  • 把自己的代碼(類文件)直接復制到xxPod/xxKit/xxKit/Classes里
  1. 配置組件索引文件: 傳送門
  2. 檢查索引文件格式是否規范
  • cd 到組件根目錄
    cd [文件夾全路徑]/xxPod/xxKit
  • 檢查本地索引文件(passed validation 表示通過驗證;--allow-warnings可忽略警告)
    pod lib lint
    如果提示標簽類錯誤可暫時不用管,往下繼續
  1. 制作好的代碼Pod到組件測試工程中(可進行編譯,運行,發現代碼問題)
  • cd 到組件的Example文件夾
    cd [文件夾全路徑]/xxPod/xxKit/Example
  • Pod集成
    pod install
  1. 把做好的組件推送到自己的組件倉庫
  • 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服務器

  1. 制作好的組件關聯CocoaPods服務器
  • cd 到xxKit組件根目錄
    cd [文件夾全路徑]/xxPod/xxKit
  • 推送組件的索引文件到服務器,并告訴服務器存在哪個私有倉庫中
    [私有倉庫名] : xxSpecs
    [組件名] : xxKit
    pod repo push [私有倉庫名] [組件名].podspec --allow-warnings
  • 查看本地的CocoaPods倉庫(可看到公共庫和自己的私有庫)
    pod repo
  1. 檢查組件
  • 更新本地CocoaPods倉庫
    pod repo update
  • 搜索剛才制作的組件
    [組件名] : xxKit
    pod search [組件名]

項目中引用私有組件

  1. 新建一個項目工程,并添加Pod
  2. 配置Podfile文件
  • 全局添加(<私有索引文件倉庫>地址)
source 'https://gitee.com/xxSpecs.git'
  • 單獨添加(<組件倉庫>地址)
pod 'xxKit', :git => 'https://gitee.com/xxKit.git'
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。