前言
首先跟大家講個故事哈梧税!話說哥們我做iOS開發(fā)5年了,從外包公司干起侵蒙,到現(xiàn)在的中小企業(yè)造虎,基本上都是獨立開發(fā)項目,平時也會去看一些最新的技術文檔之類的纷闺,自認為技術上還算中等哈算凿,畢竟也挺追逐前沿技術的份蝴,但是苦命的是有些技術因為工作環(huán)境問題沒有辦法深入研究。
一次很有收獲的打擊
前幾天去面試了一家大型公司氓轰,那家伙都是問一些底層問題婚夫,有些知道的還能說寫。最后問到了組件化開發(fā)。組件化開發(fā)說白了就是一種架構(gòu)設計思路,奈何我沒有實際經(jīng)驗策彤,被問的一頭霧水,最后的結(jié)果大家可想而知时捌。當然了我后面也懟了回去:我也問了一些偏門的知識點,面試官不也是一臉懵比炉抒,因此大家都是彼此彼此奢讨,只是精通的領域各有千秋而已。
在組件化開發(fā)中焰薄,有一點是必須要會的拿诸,那就是使用cocoapods創(chuàng)建私有庫。通俗一點講就是:你單獨做某個模塊塞茅,比如登錄亩码、分享模塊,然后寫好之后打包成庫(不打也行)野瘦,并將其通過cocoapods進行私有化管理描沟。主工程如果要引用這個模塊直接通過cocoapods進行管理,這就跟平時通過cocoapods管理第三方庫類似了缅刽,非常的方便。接下來開始整個流程介紹蠢络。
創(chuàng)建私有庫
1衰猛、在終端上移動到你想創(chuàng)建pod庫工程的路徑,直接先cd到了桌面刹孔,并執(zhí)行pod庫的創(chuàng)建啡省。命令如下pod lib create XXXX
2、回車后髓霞,系統(tǒng)會問你幾個問題:
1.選擇創(chuàng)建哪個平臺應用
.What platform do you want to use?? [ iOS / macOS ]
2.哪種開發(fā)語言
What language do you want to use?? [ Swift / ObjC ]
3.在你的項目中是否創(chuàng)建一個demo工程卦睹,為了方便測試,我選擇了Yes
Would you like to include a demo application with your library? [ Yes / No ]
4.測試框架選擇哪一個我選了none
Which testing frameworks will you use? [ Specta / Kiwi / None ]
5.要不要做視圖測試,注意方库,這里要想集成成功结序,最好選No,我在導入的時候把這里改成none才算ok了
Would you like to do view based testing? [ Yes / No ]
6.你的類名前綴,指定后所有創(chuàng)建的問題都會加上
What is your class prefix?
完成后的終端圖片纵潦,在創(chuàng)建好后徐鹤,系統(tǒng)會自動開啟xcode打開項目.
3垃环、給創(chuàng)建的項目中的Example安裝一下cocoapod,這步操作主要是為了更新一下,防止后續(xù)測試出問題
cd到Example工程目錄下
cd /Users/goviewtech/Desktop/MyDemoPrintTest/Example
開始安裝cocoapod
pod install --no-repo-update
4返敬、給Example安裝好cocoapds之后遂庄,打開項目進行編譯測試一下,通過后進行下一步操作
5劲赠、隨便copy一段測試代碼涛目,我是將代碼文件copy到它的Class文件夾中的。
6凛澎、編輯后綴名為podspec的配置文件霹肝,使用文本編輯打開就可以了,
s.version:版本號预厌,默認為0.1.0阿迈,這個看你個人喜號更改,但是要記住這個編號
s.summary:簡要說明 轧叽,這個一定要更改苗沧,不然待會提交會報錯,
s.homepage:項目主頁炭晒,要寫成自己的待逞,隨便什么網(wǎng)站都可以
s.source:來源庫: 需要填寫一個git私有庫,github网严,碼云都可以的识樱。我用的是碼云,因為我剛好有賬戶震束,而且別人說github是收費的怜庸。
7、這里演示去碼云上創(chuàng)建git私有庫垢村。注意:這里最好不要勾選創(chuàng)建READMD.md文件割疾,因為后面將本地文件上傳的時候會有沖突,我也是圖個自在嘉栓。
這個圖上的私有庫是上一個demo創(chuàng)建的宏榕,這里就不在繼續(xù)創(chuàng)建了。
8侵佃、在配置.podspec文件時麻昼,將s.source中的路徑替換為剛剛創(chuàng)建的git私有庫路徑,以下圖片是上一個demo創(chuàng)建的馋辈,請注意抚芦。
9、再次來到Example文件中,進行pod 更新操作
pod update --no-repo-update
10燕垃、更新后枢劝,再次打開Example項目,下圖可以正常import創(chuàng)建的文件
你們可以將demo跑起來看看能否正常運行。注意卜壕,請直接寫如創(chuàng)建的類名您旁,因為沒有提示
11、驗證pod配置文件
在提交到git倉庫前需要驗證
前往demo路徑
cd /Users/goviewtech/Desktop/MyDemoPrintTest
輸入驗證命令
pod lib lint
只要出現(xiàn)passed validation即表明通過驗證
12轴捎、將demo項目上傳到git私有庫中
添加遠程地址,即上面創(chuàng)建碼云項目的地址,xxxx是碼云的用戶名鹤盒,MyDemoPrintTest就是你創(chuàng)建的git倉庫名稱
git remote add origin https://gitee.com/xxxx/MyDemoPrintTest.git
添加文件
git add .
提交本地,并寫描述
git commit -a -m "第一次提交 版本為0.0.1"
# --allow-unrelated-histories
# git pull origin maste會失敗 ,提示:fatal: refusing to merge unrelated histories
原因是遠程倉庫origin上的分支master和本地分支master被Git認為是不同的倉庫侦副,所以不能直接合并侦锯,需要添加 --allow-unrelated-histories
git pull origin master --allow-unrelated-histories
推送到碼云的項目的master分支上
git push origin master
提交版本號
git tag 0.0.1
push到遠程分支
git push origin 0.0.1
提交成功后的圖片
Sepc管理庫,解釋如下:
假如我們~/.cocoapods/repos操作進入文件后秦驯,里面有有一個master文件夾尺碰,那個里面全部都是cocoapods公共第三方庫,因此我們需要新建一個新的庫文件译隘,與master同級即可亲桥。仔細想一想,cocoapods的遠程庫文件其實就是在github上固耘,現(xiàn)在我們電腦上安裝的cocoapods的公共第三方配置文件已經(jīng)全部在里面题篷。同理...我們也得建立一個非公共的遠程庫,且clone下到我們電腦本地厅目,其實就是創(chuàng)建的與master同級的文件番枚,到時候里面全部都是非公開的第三方配置文件。
看一下最終效果圖:
現(xiàn)在開始創(chuàng)建Sepc遠程git倉庫损敷,創(chuàng)建的原理和上面同步葫笼,注意,這時候創(chuàng)建一定要帶一個README.md文件拗馒,不然后面會無法提交路星,這個暫時沒去深究
下面是在碼云上創(chuàng)建的sepc遠程git倉庫
接下來在終端執(zhí)行以下命令,可以理解為clone到本地倉庫
pod repo add MyPrivateSpecs https://gitee.com/mayouming/MY_Specs.git
其中MyPrivateSpecs
就是本地非公開第三方庫的文件夾瘟忱,名字為隨便取的奥额,后面的鏈接就是對應的遠程git倉庫了苫幢。
以上命令執(zhí)行完畢后访诱,就會在~/.cocoapods/repos目錄下創(chuàng)建MyPrivateSpecs文件夾,
最終操作韩肝,將之前的demo項目與MyPrivateSpecs關聯(lián)起來触菜,其實就是往文件夾中添加了私有庫文件的配置文件。
pod repo push MyPrivateSpecs MyDemoPrintTest.podspec
這個MyDemoPrintTest.podspec
就是你之前配置的文件哀峻,叫什么名字看你自己的涡相,文中只是演示哲泊。
操作完成后,git遠程倉庫就長如下這個樣子
至此催蝗,私有庫發(fā)布就已經(jīng)結(jié)束了切威,現(xiàn)在我們可以隨便找個安裝好cocoapods的項目測試一下,當然你新建也是可以的丙号。
podfile中的書寫如下:
然后安裝即可:
pod install --no-repo-update
現(xiàn)在就可以像普通cocoapdos一樣進行第三方管理了先朦。
后續(xù)截圖就不一一截了,至此講解結(jié)束犬缨。
期間有碰到幾個問題:
Failed to connect to proxy.server.com port 8080: Operation timed out
喳魏,一開始我也以為是網(wǎng)絡問題,后來我將git網(wǎng)絡代理清除即可:
查看是否使用了代理git config --global http.proxy
取消代理git config --global --unset http.proxy
OK!謝謝怀薛,終于寫完刺彩,也算做一個記錄吧!后續(xù)操作也將繼續(xù)更新枝恋。创倔。。
后續(xù)鼓择,私有庫的更新操作...
1三幻、將更新的內(nèi)容代碼copy到class里面
2、cd 到example目錄下pod install 一下呐能,進行安裝測試念搬,如果嫌慢可以這樣:pod install --no-repo-update
3、提交代碼:先cd .. 回到上一層目錄摆出,也就是cd 到TestCode目錄下
$git add .
$git commit -a -m "版本更新"
[master e38226a] 版本更新
$git tag -a '0.0.2' -m "私
create mode 100644 TestCode/Classes/YMLoginTestController.h
create mode 100644 TestCode/Classes/YMLoginTestController.m
$git pull origin master --allow-unrelated-histories
From https://gitee.com/mayouming/TestCode
* branch master -> FETCH_HEAD
Already up to date.
$git push origin master
///版本號要最終和podspec中的版本號保持一致
$git tag -a '0.0.2' -m "私有庫第二個版本"
git push --tags
4朗徊、提交完成后,在碼云中就會顯示最新提交的版本0.0.2
5偎漫、#####修改podspec文件爷恳,將版本號修改至0.0.2,保持提交版本一致
6象踊、驗證一下文件温亲,
pod spec lint --private
private可傳可不傳
7、更新本地私有的cocoapdos庫杯矩,也就是前面建立的MySpecs文件栈虚。
pod repo push MySpecs TestCode.podspec
在cocoapods文件中也出現(xiàn)了0.0.2的版本
在碼云的遠程庫中也添加成功了