元件化開發之私有庫製作以及常見問題
前言:這篇文章主要描述私有庫的製作過程以及本人在使用過程中的一些問題和解決方案,提到元件化就不得不想到pods私有庫相關的東西(當然元件化不侷限於結合私有庫使用,還可以做成靜態庫或者多target開發等方式,這裡只講解私有庫相關的東西,稍後會出一篇元件化結合私有庫實現元件化開發的方式)
私有庫,顧名思義就是不想暴露給公共知曉的庫,也可以說僅供公司或者個人使用的庫,我們常用的第三方庫管理方式是cocoapods,所有的第三方都有一個存放索引的源地址,也可以理解為公有庫地址
https://github.com/CocoaPods/Specs
在終端輸入pod repo
就能看到裡面有個master,這個就是我們在安裝cocoapods的時候,在本地建立的索引庫,預設的第三方庫檔案都會從本地索引庫先查詢,如果本地索引庫沒有,就會從源地址中獲取,這也是為何我們首次pod install
第三方的時候慢,執行pod update
或者pod update xxx --no-repo-update
的時候也會慢的原因。好了,廢話不多說,下面開始進入正題(為了方便複製和檢視,我會配上操作圖以及對應的命令)
一:準備工作
1. 檢視本地是否有了私有庫索引檔案
pod repo
,會看到有個索引列表如下:
master
一個,我這裡已經有了一個私有的,那麼如何建立呢?請看下面:
2. 建立遠端私有庫索引(這裡以在github上為例)
由於github
私有庫收費,我這裡以public
為例,實則是一樣的。 一般命名為xxxSpec
點選create repository
即可建立倉庫成功 這裡我們可以得到一個遠端索引庫的地址,下面要用
3. 新增本地私有庫索引
終端執行命令 : pod repo add 本地索引庫名稱 遠端索引庫地址
,後面的地址就是遠端索引庫地址,LWPrivateSpec
即為本地索引庫的名稱,這個可以自定義,一般和遠端庫名稱保持一致即可
執行 pod repo
後檢視,本地私有索引庫檔案已經好了,到這裡關於索引庫的建立就完成了,下面開始進入私有庫建立的環節
二:私有庫建立
1. 建立遠端倉庫
方法和索引庫建立一樣,這裡不在贅述
2. 將遠端庫拉取到本地
選擇一個路徑,將遠端庫clone到本地 git clone 遠端庫地址
為了測試需要,需要建立測試工程,方便對元件功能的測試
3. 建立工程
4. 引入pod
進入工程目錄,執行如下命令,建立空的pod檔案 pod init
pod install
5. 建立podspec檔案
進入本地倉庫路徑,執行如下命令
pod spec create 庫名稱
這裡庫名稱最好和倉庫名稱一致,也可以隨便起,也就是日後pod 'xx庫'
這裡要填寫的名稱
另外在.podspec同等路徑下,建立Pod/Classess檔案,最後的結構如下:
之後的功能模組就放在classes檔案下
三:podspec的編寫及其相關依賴設定
1. podspec檔案的編寫
開啟.podspec檔案如下(擷取部分):
這裡主要注意一下幾個點:
- s.name: 庫的名稱
- s.version:版本號
- s.summary:摘要
- s.description:描述部分,要比摘要長
- s.homepage:源地址,也就是私有庫對應的遠端地址
- s.license:執照,一般選擇預設
- s.author:作者名稱
- s.platform:支援平臺
- s.source:來源
- s.source_files:檔案路徑
- s.framework/s.frameworks:依賴的系統的framework
- s.dependency:依賴的庫
這樣提交後,引用時會發現,所有的.h,.m檔案都在Classes檔案下,我們看到有的第三方檔案管理會出現分層
像這樣有幾個子庫,比如我們想要用WXPay,那麼在podfile中只需要引入pod 'YGFunctionComponent/WXPay'
即可,那麼這種是如何設定的呢?下面講述:
2. 分層檔案的編寫
這裡有三個子庫,每個子庫中都可以只編寫自己的功能,當然子庫之間也可以依賴,這個後面再講
子庫建立主要依賴於subpec 要注意的是 do 和 and要成對出現,不然驗證的時候會報錯 也許你已經注意到,子庫中也可以設定各自的依賴,還有一點要注意,父庫的source_files設定要麼去掉,要麼就變化,不能再是Pod/Classess/**/*.{h,m}
的格式,否則分層是沒用的,比如我們想要在父庫中有一個頭檔案xxx.h,需要這樣設定:Pod/Classes/xxx.h
匯入後的結構如下:
3. 子庫間的依賴
比如:我在
LWFunctionComponent
中有一個Utils
的子庫,在LocationTool
中用到了Utils
這個子庫,那麼該如何設定呢?
xx.dependency "庫名稱/子庫名稱"
4. 私有庫之間的依賴
和依賴第三方庫一樣 s.dependency
"私有庫名稱
5. 驗證過程
首先是要提交到遠端並打tag值 git add .
git commit -m "xxx"
git push
git tag xxx
這裡的tag要和podspec中的保持一致,否則會報錯
git push --tags
5.1 本地驗證 pod lib lint
5.2 遠端驗證 pod spec lint
6. 新增到私有庫索引
pod repo push 本地私有索引檔名 庫名稱.podspec
當然如果只是上面的寫法你會發現會遇到很多問題,在第三點中我會列出一些常見的問題以及解決方案
三:驗證過程的問題及其解決方案
- tag值導致的問題,這裡再次強調,一定要注意git所打的tag值一定要和podspec中的保持一致
- 警告導致的問題,提交的時候你會發現很多-WARN開頭的,如果你按照的是
pod spec lint
或者pod lib lint
,那麼一定會報錯,這個時候只需要加上--allow-warnings
即可解決 - 依賴第三方庫導致的報錯問題,只需加上
--use-libraries
即可解決 - 私有庫依賴私有庫找不到的報錯問題,一般情況下會預設從master或者官方的spec源地址
https://github.com/CocoaPods/Specs
中去查詢依賴庫檔案,而私有庫是查詢不到的,所以解決方法如下:--source=私有庫源地址,官方庫源地址
即可
注意:上面的2,3兩點錯誤在新增私有索引的時候,也要加上--use-libraries --allow-warnings這樣的標識,否則也會報錯哦
結束語:寫了兩個多小時,最後的問題以及解決方案模組實在不想再截圖了,如果有需要後續會慢慢補上,敬請諒解 如果有其他問題,可以留言或評論區討論
此外如果提交公共倉庫開源出來,當然需要註冊一個trunk嘍,註冊方式如下:
1.pod trunk register 郵箱 '作者名稱’ --verbose
這裡的作者名和podspec中設定的s.author保持一致 2.去郵箱驗證即可