創(chuàng)建私有Pods,從小白到老鐵

eGlvbmdoYW5saW4xMzg0NDc3MjE1_8.jpg

前言

騷年,你聽說過組件化嗎?沒有?但你一定玩過樂高玩具,樂高玩具本身一個龐大的模型卻是依靠無數(shù)個各自分工的基礎(chǔ)模塊構(gòu)建而成!同理,隨著項業(yè)務(wù)的增長,項目也必然越來越龐大。此時,為了更好地管理我們的項目,我們可以適當?shù)夭鸱植糠帜K與其相關(guān)業(yè)務(wù)邏輯。這樣不僅能提高相關(guān)模塊的復(fù)用性也使其單元測試變得可行等。


如何進行組件化管理

CocoaPods 是一個很好的三方開源庫管理工具,在配置和更新上為我們節(jié)省了大量的時間與降低了工作的繁瑣度。CocoaPods不僅可以對公有的Git倉庫進行分享開源(AFNetworking等),還可以對我們自己的私有Git倉庫進行管理。這里我們就利用CocoaPods來對我們私有的Git倉庫進行索引。


CocoaPods相關(guān)概念介紹以及索引原理介紹

這里我們簡單介紹下 CocoaPods 相關(guān)的一些特定文件與簡單的索引原理,這樣能更好的幫助我們理解后續(xù)步驟,讓我們不僅只是代碼的搬運工??

  • 概念介紹

.podspec : 該文件為你的代碼倉庫索引描述文件,CocoaPods通過該文件對你真正存儲代碼工程的 Git 倉庫進行索引與下載

Lib : 你上傳到遠程Git倉庫的代碼工程,將來用于開源共享或則私有

Git 倉庫 : Git介紹

  • 索引流程
003E81AB-C120-41FB-BE4B-545BE5787264.png

CocoaPod 通過第一個 Git 倉庫的里 .podspec 描述文件找到真正存儲你代碼的第二個 Git 倉庫,然后根據(jù) .podspec 里的相關(guān)字段對特定目錄下的代碼,三方依賴庫,資源文件等進行下載。
換一種說法來理解,第一個 Git 倉庫里的 .podspec 描述文件相當于我們的指針, 其指向的另一個 Git 倉庫(內(nèi)存)才是你自己真正所共享的代碼。


私有Pod制作流程

1. 創(chuàng)建第一個用于存儲 .podspec 后綴文件的私有 Git 倉庫。

基于 Git 開源的版本控制倉庫有很多,由于 GitHub 的需要付費才能創(chuàng)建私有倉庫,所以這里博主使用的是開源中國的碼云(不是馬云??)。并且命名為 PrivatePodspec (這里建議初學(xué)者跟隨博主進行同樣的名字,這樣避免了后續(xù)對象混亂的情況出現(xiàn))

609DF83C-DECE-44D7-869F-71D4D6599550.png
80CD0AA2-335F-42FD-BD6C-AD54556EA9FE.png

這樣第一個私有的 Git 倉庫就建好了。

2.創(chuàng)建第二個用于存儲的共享代碼的私有 Git 倉庫。

流程基本相似,為了區(qū)分我們命名為 PrivateLib

FA82C732-CE1D-4D86-8429-C17EC9A54833.png

但這里的倉庫權(quán)限為私有的,請注意

5670BF44-938A-49C3-B312-6A50901178C4.png

復(fù)制 Git 倉庫地址,等會配置 .podspec 文件會用到

3.本地創(chuàng)建后續(xù)要被共享的Lib工程
  • 打開終端 cd 到你要創(chuàng)建的目錄下
  • 這里博主為了方便演示就創(chuàng)建到了桌面上


    BD90FCDF-F0A4-47E9-AEDD-904862C15BC2.png
  • 然后輸入 pod lib create PrivateLib 命令創(chuàng)建一個待上傳的 Lib 模版
556A3A9A-F480-43EC-ADCB-14C7C1478862.png
  • 然后系統(tǒng)會要求你配置相關(guān)的設(shè)置,博主這里按照自己的需求最簡單的設(shè)置了下,這些英文還是比較簡單的,相信大家都能看的懂。也可根據(jù)自己需求進行配置
2EF525F4-114D-4929-A5DA-0A62347B7BD9.png
7A25BA51-C9AF-4CE5-9C3A-B9EAB257F248.png

生成的工程目錄及相關(guān)文件介紹

26C32509-A79D-44AF-89EC-CD9A68B45959.png

我們創(chuàng)建兩個空文件作為我們的模擬項目代碼

0CE208E1-51A0-4261-B83F-C981D904F610.png
  • 配置 .podspec 后綴文件
    s.name : 項目名
    s.version : 版本號(需跟后面打 Tag 的值相等)
    s.homepage : 項目主頁(請注意,這里的地址跟git倉庫地址有一定差別,請同學(xué)們看清截圖示例并區(qū)分)
    s.license : 開源協(xié)議(這里我們選擇 MIT
    s.source : Git 倉庫地址(第二步所復(fù)制的倉庫地址)
    s.ios.deployment_target : 項目最低支持版本
    s.source_files : 具體去那個目錄下下載特定共享代碼(注意:這里的地址與 .podspec 文件同級目錄開始,,示例:PrivateLib/Classes/** /*表示如下目錄下的所有文件
6C45873E-4C7A-4D7E-8DC3-9AC34B78D8B1.png

s.frameworks : 項目所依賴的系統(tǒng)庫(如果需要)
s.dependency : 項目所依賴的第三方庫(如果需要)

  • 配置完成后,我們需要驗證下 .podspec 文件的格式正確性
    還是 .podspec 同級目錄下,在終端輸入
pod lib lint
AED20A03-2D46-45E3-B8B0-D91508F09C9A.png

驗證成功~

  • 將本地 PrivateLib 工程與遠程私有 Git 倉庫關(guān)聯(lián)

關(guān)聯(lián)遠程倉庫

git remote add origin 遠程倉庫地址
79AF7709-A257-4D8D-8157-FB412085D715.png

將本地倉庫內(nèi)容同步到遠程倉庫

git push origin master

5ACEA97F-EDEB-491B-8450-C35D8FA3E173.png

但是發(fā)現(xiàn)推送失敗,由于第一次執(zhí)行 push 操作,我們需要從遠程倉庫進行拉取并且合并(pull

git pull origin master --allow-unrelated-histories
E6215858-3919-4D15-B379-F54BAD9093FD.png

但是新的問題又來了,由于文件內(nèi)容不相關(guān)所以產(chǎn)生了沖突??

git mergetool

E8EC224E-F1DE-4E88-A28D-3B8A42BEC00B.png

使用了上面的命令后按 Enter 后可進入 merge 對比的界面,我們暫且不處理,先按 ESC 然后輸入 wq 保存退出,然后進入 .podspec 同級目錄刪除系統(tǒng)備份的文件并且手動修改有沖突的文件

BCA7BC4C-AB00-41D5-A1DC-FC5475CD7688.png

7C6B7A02-34C8-4331-B626-8D8671B108E7.png

這里我們采用遠程倉庫的版本,將紅色框內(nèi)的本地版本進行刪除,README.md 同理。
操作完成我們便對本地倉庫與遠程倉庫進行同步

git add .
git commit -m 'PrivateLib commit'
git push origin master
217EF32D-9F98-4E31-B90D-FD916BD8CA49.png

此時本地倉庫與遠程倉庫已經(jīng)同步成功,讓我們?nèi)ミh程倉庫看看!

716BF588-6BDC-49C2-BF2E-94029DEDDB52.png

破費(Perfect)??

然后進行本地和遠程驗證文件有效性。

pod spec lint

5B71666A-4420-4047-A23D-240B6D1FF55B.png

這里提示我們需要給遠程倉庫打上與本地倉庫 .podspec 相同的 Tag 值。

git tag -a 0.1.0 -m '0.1.0標簽'
8D54ED01-2F75-4BC5-8E3C-32B52B3D009E.png

OK,讓我們重新驗證下

32DF4FF0-5542-44ED-8D99-E69E148CFC4F.png

通過了?。。?!

4. 上傳.podspec到第一個遠程私有倉庫
  • 首先進入 ~/.cocoapods/repos 目錄下,該目錄為隱藏目錄,如需查看需在終端輸入以下命令并重啟電腦
defaults write com.apple.finder AppleShowAllFiles -bool true
  • 然后創(chuàng)建一個私有倉庫目錄
pod repo add PrivatePodspec 第一個創(chuàng)建的git倉庫地址
A302C973-3A62-4FE2-B9C6-91AD94C53D60.png
17669D4A-60A9-41A7-A265-47E8E0C89964.png
  • 然后向私有的 PrivatePodspec 遠程倉庫中提交 .podspec
pod repo push PrivatePodspec PrivateLib.podspec

D10FD208-0CB6-4EFC-A536-6A9FFF51A65C.png

提交成功,然后我在看看先前的 cocoapods 目錄

5485AF60-BBD6-4D41-99C1-6F706AEACF99.png

確實生成了一個版本為0.1.0的文件

同時我們使用 search 命令,也是能搜索到的

pod search PrivateLib
52E09404-ACCD-4CD7-ACA5-2367B8464C61.png
5.如何使用私有庫
5786EC94-BCD5-4D69-968A-BAA59B6BCED6.png
D479DEDF-B170-447D-A10D-111D3D967178.png
6A08614D-0C85-4AC7-B566-C0C9A172B328.png

老鐵不雙擊66666???

感謝各位看官花費寶貴的時間以及極大的耐心看完了本篇文章(末尾有福利哦~),現(xiàn)在讓我們一起創(chuàng)建自己的 Pod,并且拼接自己的夢想世界吧!


參考資料:

  1. 教你如何從0到1實現(xiàn)組件化架構(gòu)
  2. cocoapod搭建私有庫超級詳細教程
  3. 使用私有Cocoapods倉庫 中高級用法
121111lpqsuseqlzwswmz0.jpg

****************************華麗的分割線****************************

2009011211354159.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容