組件化開發之私有庫制作以及常見問題

前言:這篇文章主要描述私有庫的制作過程以及本人在使用過程中的一些問題和解決方案,提到組件化就不得不想到pods私有庫相關的東西(當然組件化不局限于結合私有庫使用,還可以做成靜態庫或者多target開發等方式,這里只講解私有庫相關的東西,稍后會出一篇組件化結合私有庫實現組件化開發的方式)

私有庫,顧名思義就是不想暴露給公共知曉的庫,也可以說僅供公司或者個人使用的庫,我們常用的第三方庫管理方式是cocoapods,所有的第三方都有一個存放索引的源地址,也可以理解為公有庫地址 https://github.com/CocoaPods/Specs
在終端輸入 pod repo就能看到里面有個master,這個就是我們在安裝cocoapods的時候,在本地創建的索引庫,默認的第三方庫文件都會從本地索引庫先查找,如果本地索引庫沒有,就會從源地址中獲取,這也是為何我們首次pod install第三方的時候慢,執行pod update或者 pod update xxx --no-repo-update的時候也會慢的原因。好了,廢話不多說,下面開始進入正題(為了方便復制和查看,我會配上操作圖以及對應的命令)

一:準備工作

1. 查看本地是否有了私有庫索引文件
image.png

終端操作:pod repo,會看到有個索引列表如下:

image.png

如果本地沒有就只有master一個,我這里已經有了一個私有的,那么如何創建呢?請看下面:

2. 創建遠程私有庫索引(這里以在github上為例)
image.png

由于github私有庫收費,我這里以public為例,實則是一樣的。
一般命名為xxxSpec

image.png

點擊create repository即可創建倉庫成功
這里我們可以得到一個遠程索引庫的地址,下面要用

image.png
3. 添加本地私有庫索引
image.png

終端執行命令 : pod repo add 本地索引庫名稱 遠程索引庫地址,后面的地址就是遠程索引庫地址,LWPrivateSpec即為本地索引庫的名稱,這個可以自定義,一般和遠程庫名稱保持一致即可

image.png

執行 pod repo后查看,本地私有索引庫文件已經好了,到這里關于索引庫的創建就完成了,下面開始進入私有庫創建的環節

二:私有庫創建

1. 創建遠程倉庫

方法和索引庫創建一樣,這里不在贅述

2. 將遠程庫拉取到本地
image.png

選擇一個路徑,將遠程庫clone到本地
git clone 遠程庫地址

為了測試需要,需要創建測試工程,方便對組件功能的測試

3. 創建工程
image.png
4. 引入pod

進入工程目錄,執行如下命令,創建空的pod文件
pod init

pod install

5. 創建podspec文件

進入本地倉庫路徑,執行如下命令


image.png

pod spec create 庫名稱這里庫名稱最好和倉庫名稱一致,也可以隨便起,也就是日后pod 'xx庫'這里要填寫的名稱

另外在.podspec同等路徑下,創建Pod/Classess文件,最后的結構如下:


image.png

之后的功能模塊就放在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文件下,我們看到有的第三方文件管理會出現分層


image.png

像這樣有幾個子庫,比如我們想要用WXPay,那么在podfile中只需要引入pod 'YGFunctionComponent/WXPay'即可,那么這種是如何設置的呢?下面講述:

2. 分層文件的編寫
image.png

這里有三個子庫,每個子庫中都可以只編寫自己的功能,當然子庫之間也可以依賴,這個后面再講


image.png

子庫創建主要依賴于subpec
要注意的是 do 和 and要成對出現,不然驗證的時候會報錯
也許你已經注意到,子庫中也可以設置各自的依賴,還有一點要注意,父庫的source_files設置要么去掉,要么就變化,不能再是Pod/Classess/**/*.{h,m}的格式,否則分層是沒用的,比如我們想要在父庫中有一個頭文件xxx.h,需要這樣設置:Pod/Classes/xxx.h

image.png

導入后的結構如下:


image.png
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中

sources設置

設置resource_bundles的路徑

結果

導入后的層次結構圖如圖

使用:


讀取bundle中的圖片資源

xib的引入與使用也是類似,具體的講解這里不再多說

四:驗證過程的問題及其解決方案

  1. tag值導致的問題,這里再次強調,一定要注意git所打的tag值一定要和podspec中的保持一致
  2. 警告導致的問題,提交的時候你會發現很多-WARN開頭的,如果你按照的是pod spec lint或者pod lib lint,那么一定會報錯,這個時候只需要加上--allow-warnings即可解決
  3. 依賴第三方庫導致的報錯問題,只需加上--use-libraries即可解決
  4. 私有庫依賴私有庫找不到的報錯問題,一般情況下會默認從master或者官方的spec源地址https://github.com/CocoaPods/Specs中去查找依賴庫文件,而私有庫是查找不到的,所以解決方法如下:
    --source=私有庫源地址,官方庫源地址即可

注意:上面的2,3兩點錯誤在添加私有索引的時候,也要加上--use-libraries --allow-warnings這樣的標識,否則也會報錯哦

結束語:寫了兩個多小時,最后的問題以及解決方案模塊實在不想再截圖了,如果有需要后續會慢慢補上,敬請諒解
如果有其他問題,可以留言或評論區討論

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,283評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,947評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,094評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,485評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,268評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,817評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,906評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,039評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,551評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,502評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,662評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,188評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,907評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,304評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,563評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,255評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,637評論 2 370

推薦閱讀更多精彩內容

  • 最近在學習vue.js的時候發現,vue的組件化的思想對于編寫代碼是一個非常有用的事情。 首先為什么需要組件化? ...
    拂曉的云閱讀 7,201評論 6 23
  • 項目更新到一定的階段,工程越來越大,編譯時間越來越長,我們一般會將項目抽取成一個個的組件,組件一般都會使用coco...
    魏小莊閱讀 1,366評論 0 2
  • 項目組件化、平臺化是技術公司的共同目標,越來越多的技術公司推崇使用pod管理第三方庫以及私有組件,一方面使項目架構...
    swu_luo閱讀 22,007評論 0 39
  • 姓名:徐群杰 公司:寧波大發 【日精進打卡第27天】 【知~學習】 《六項精進》大綱0遍 ...
    徐群杰閱讀 206評論 0 0
  • 對于畫畫從來沒堅持過,總是三天打魚兩天曬網,偶爾心血來潮就畫上一副,所以水平也一直沒提高過,小時候的夢想也變成了現...
    語木閱讀 338評論 9 8