前言
做iOS開發(fā)3、4年了,看了很多別人的庫,也有很多自己的組件,類,在新啟一個(gè)項(xiàng)目時(shí),不免要拿以前的東西來用,以前一直是保存在自己電腦的,需要用哪個(gè)直接copy,很不友好,而且有些東西不太好找,根據(jù)項(xiàng)目有不同的變動(dòng)的話就會(huì)有很多的版本出來等等等吧,總之很多原因。基于此呢,就想做自己的私有庫,這個(gè)東西呢,其實(shí)早就知道了,但是人比較懶,一直也沒有去搞,前段時(shí)間搞了一下,但是遇到一些問題,再加上比較忙就擱下了,這次卷土重來也是遇到很多問題,還好最后成功了,把自己遇到的問題做個(gè)記錄吧。
先附上一張成功圖片
創(chuàng)建私有Spec Repo
先來說第一步,什么是Spec Repo?它是所有的Pods的一個(gè)索引,
就是一個(gè)容器,所有公開的Pods都在這個(gè)里面,它實(shí)際是一個(gè)Git倉庫remote端在GitHub上,但是當(dāng)你使用了Cocoapods后它會(huì)被clone到本地的~/.cocoapods/repos目錄下,可以進(jìn)入到這個(gè)目錄看到master文件夾就是這個(gè)官方的Spec Repo了。這個(gè)master目錄的結(jié)構(gòu)是這個(gè)樣子的
├── Specs
└── [SPEC_NAME]
└── [VERSION]
└── [SPEC_NAME].podspec
因此我們需要?jiǎng)?chuàng)建一個(gè)類似于master的私有Spec Repo。首先創(chuàng)建一個(gè) Git倉庫,這個(gè)倉庫你可以創(chuàng)建私有的也可以創(chuàng)建公開的,需要注意的就是如果項(xiàng)目中有其他同事共同開發(fā)的話,你還要給他這個(gè)Git倉庫的權(quán)限。
1.創(chuàng)建一個(gè) Git倉庫
創(chuàng)建完成之后在Terminal中執(zhí)行如下命令
#pod repo add [Private Repo Name] [GitHub HTTPS clone URL]
$ pod repo add gd_repos https://github.com/dujinxin/JXView-Swift.git
此時(shí)如果成功的話進(jìn)入到~/.cocoapods/repos目錄下就可以看到gr_repos這個(gè)目錄了。至此第一步創(chuàng)建私有Spec Repo完成。
2.創(chuàng)建Pod項(xiàng)目工程文件
如果是有現(xiàn)成的模塊組件,并且在Git的版本管理下,可以跳過這一步。如果從零開始,使用Cocoapods進(jìn)行創(chuàng)建,可以參考https://guides.cocoapods.org/making/using-pod-lib-create.html
我第一次成功是參考別人用以下方式創(chuàng)建(JXView為例):
$ mkdir JXView
$ cd JXView
$ pod lib create JXView
之后終端會(huì)出現(xiàn)四個(gè)問題:1,選用哪種語言;2.是否需要一個(gè)例子工程;3.選擇一個(gè)測(cè)試框架;4.是否基于View測(cè)試。
選擇完這4個(gè)問題,自動(dòng)執(zhí)行pod install命令創(chuàng)建項(xiàng)目并生成依賴。向Pod文件夾中添加庫文件和資源,并配置podspec文件,把模塊的共有組件放入Pod/Classes中,然后進(jìn)入Example文件夾執(zhí)行pod update命令,再打開項(xiàng)目工程可以看到,剛剛添加的組件已經(jīng)在Pods子工程下Development Pods/PodTestLibrary中了,然后編輯demo工程,測(cè)試組件,我并沒有使用提供的測(cè)試框架進(jìn)行測(cè)試,這里就先不介紹了。
$ cd /Users/dujinxin/github/JXView-Swift/Example/
$ pod update
注意:這里需要注意的是每當(dāng)你向Pod中添加了新的文件或者以后更新了podspec的版本都需要重新執(zhí)行一遍pod update命令。
測(cè)試無誤后需要將該項(xiàng)目添加并推送到遠(yuǎn)端倉庫,并編輯podspec文件。通過Cocoapods創(chuàng)建出來的目錄本身就在本地的Git管理下,如果我們托管到遠(yuǎn)端服務(wù)器,那么我們需要做的就是給它添加遠(yuǎn)端倉庫,同樣去GitHub或其他的Git服務(wù)提供商那里創(chuàng)建一個(gè)私有的倉庫,拿到HTTP地址,然后cd到JXView目錄,執(zhí)行一下步驟:
$ git add .
$ git commit -s -m "Initial Commit of Library"
$ git remote add origin https://github.com/dujinxin/JXView-Swift.git? #添加遠(yuǎn)端倉庫
$ git push origin master? ? #提交到遠(yuǎn)端倉庫 ?
注:如果推送遠(yuǎn)端倉庫失敗,可以根據(jù)提示來操作,對(duì)命令行不熟的,可以通過git客戶端來操作
因?yàn)閜odspec文件中獲取Git版本控制的項(xiàng)目還需要tag號(hào),所以我們要打上一個(gè)tag
$ git tag -m "first release" "0.0.1"
$ git tag -m "release JXView with podspec" "v0.0.5"
$ git push --tags? ? #推送tag到遠(yuǎn)端倉庫
3.編輯podspec文件
編輯完podspec文件后,需要驗(yàn)證一下這個(gè)文件是否可用
$ pod lib lint
注意:如果有任何WARNING或者ERROR都是不可以的,它就不能被添加到Spec Repo中,Xcode允許警告存在,所以可以通過命令“$ pod lib lint --allow-warnings”屏蔽警告,如果出現(xiàn)Error但是提示信息不足,可以通過命令“$ pod lib lint --verbose”以獲取更多錯(cuò)誤信息。
如果驗(yàn)證不通過,根據(jù)提示修改podspec,直到再次驗(yàn)證通過如下:
podspec更多設(shè)置可以參考官方實(shí)例http://guides.cocoapods.org/syntax/podspec.html,想了解更多跟項(xiàng)目相關(guān)的設(shè)置,還可以上GitHub參考知名第三庫的podspec
4.向Spec Repo提交podspec
向Spec Repo提交podspec需要完成兩點(diǎn)一個(gè)是podspec必須通過驗(yàn)證無誤,再一個(gè)就是刪掉無用的注釋(這個(gè)不是必須的,為了規(guī)范還是刪掉吧)。
$ pod repo push gd_repos JXView.podspec? #前面是本地Repo名字 后面是podspec名字
之前沒有發(fā)布過pods的,這一步不成功,需要先注冊(cè)Trunk
CocoaPods 0.33中加入了Trunk服務(wù)。CocoaPods Trunk服務(wù)的引入,解決了很多類似的問題。CocoaPods作為一個(gè)集中式的服務(wù),使得分析和統(tǒng)計(jì)平臺(tái)數(shù)據(jù)變得十分方便。要想使用Trunk服務(wù),首先你需要注冊(cè)自己的電腦。這很簡(jiǎn)單,只要你指明你的郵箱地址(spec文件中的)和名稱即可。
$ pod trunk register 123456@qq.com 'zhangsan' --description='macbook air'
后面可以加上 –verbose可選參數(shù),為了便于輸出注冊(cè)過程中的調(diào)試信息,然后順利的話你會(huì)收到一份郵件,需要點(diǎn)擊驗(yàn)證。驗(yàn)證成功后,我們就可以開始 trunk push 了提交我們的podspec文件。
$ pod trunk push JXView.podspec
pod trunk push 命令會(huì)首先驗(yàn)證你本地的podspec文件(是否有錯(cuò)誤),之后會(huì)上傳spec文件到trunk,最后會(huì)將你上傳的podspec文件轉(zhuǎn)換為需要的json文件,再去看我們的Spec Repo遠(yuǎn)端倉庫,也有了一次提交,這個(gè)podspec也已經(jīng)被Push上去了。至此,我們的這個(gè)組件庫就已經(jīng)制作添加完成了。
注意:可以使用以下命令查看自己的注冊(cè)信息“$ pod trunk me”。當(dāng)然,如果你的pod是由多人維護(hù)的,你也可以添加其他維護(hù)者“$ pod trunk add-owner ARAnalytics kyle@cocoapods.org”
5.查看和使用我們自己的庫
使用pod search命令就可以查到我們自己的庫了.
$ pod search JXView
在完成這一系列步驟之后,我們就可以在正式項(xiàng)目中使用這個(gè)私有的Pod了只需要在項(xiàng)目的Podfile里增加以下一行代碼即可
$ pod 'JXView', '~> 0.0.5'
然后執(zhí)行pod update,更新庫依賴,我們自己的庫文件已經(jīng)出現(xiàn)在Pods子項(xiàng)目中的Pods子目錄下了,而不再是Development Pods。
至此我們的pods私有庫就制作完成了,在制作過程中遇到的問題可以參考http://www.lxweimin.com/writer#/notebooks/8215347/notes/16219131
參考:https://guides.cocoapods.org/making/using-pod-lib-create.html