前言:這篇文章主要描述私有庫的制作過程以及本人在使用過程中的一些問題和解決方案,提到組件化就不得不想到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文件如下(截取部分):
image.png
這里主要注意一下幾個點:
- 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:依賴的庫
image.png
這樣提交后,引用時會發現,所有的.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
這個子庫,那么該如何設置呢?
image.png
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
當然如果只是上面的寫法你會發現會遇到很多問題,在第四點中我會列出一些常見的問題以及解決方案
三:引入圖片等資源文件
創建Assets資源文件,創建bundle文件放到Assets中
設置resource_bundles的路徑
導入后的層次結構圖如圖
使用:
xib的引入與使用也是類似,具體的講解這里不再多說
四:驗證過程的問題及其解決方案
- 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這樣的標識,否則也會報錯哦
結束語:寫了兩個多小時,最后的問題以及解決方案模塊實在不想再截圖了,如果有需要后續會慢慢補上,敬請諒解
如果有其他問題,可以留言或評論區討論