前言
做iOS開發(fā)3、4年了攒岛,看了很多別人的庫赖临,也有很多自己的組件,類灾锯,在新啟一個項目時兢榨,不免要拿以前的東西來用,以前一直是保存在自己電腦的挠进,需要用哪個直接copy色乾,很不友好,而且有些東西不太好找领突,根據(jù)項目有不同的變動的話就會有很多的版本出來等等等吧暖璧,總之很多原因【基于此呢澎办,就想做自己的私有庫,這個東西呢金砍,其實早就知道了局蚀,但是人比較懶,一直也沒有去搞恕稠,前段時間搞了一下琅绅,但是遇到一些問題,再加上比較忙就擱下了鹅巍,這次卷土重來也是遇到很多問題千扶,還好最后成功了料祠,把自己遇到的問題做個記錄吧。
先附上一張成功圖片
創(chuàng)建私有Spec Repo
先來說第一步澎羞,什么是Spec Repo髓绽?它是所有的Pods的一個索引,
就是一個容器妆绞,所有公開的Pods都在這個里面顺呕,它實際是一個Git倉庫remote端在GitHub上,但是當(dāng)你使用了Cocoapods后它會被clone到本地的~/.cocoapods/repos目錄下括饶,可以進(jìn)入到這個目錄看到master文件夾就是這個官方的Spec Repo了株茶。這個master目錄的結(jié)構(gòu)是這個樣子的
├── Specs
└── [SPEC_NAME]
└── [VERSION]
└── [SPEC_NAME].podspec
因此我們需要創(chuàng)建一個類似于master的私有Spec Repo。首先創(chuàng)建一個 Git倉庫图焰,這個倉庫你可以創(chuàng)建私有的也可以創(chuàng)建公開的忌卤,需要注意的就是如果項目中有其他同事共同開發(fā)的話,你還要給他這個Git倉庫的權(quán)限楞泼。
1.創(chuàng)建一個 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
此時如果成功的話進(jìn)入到~/.cocoapods/repos目錄下就可以看到gr_repos這個目錄了。至此第一步創(chuàng)建私有Spec Repo完成笤闯。
2.創(chuàng)建Pod項目工程文件
如果是有現(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
之后終端會出現(xiàn)四個問題:1浦马,選用哪種語言时呀;2.是否需要一個例子工程;3.選擇一個測試框架晶默;4.是否基于View測試谨娜。
選擇完這4個問題,自動執(zhí)行pod install命令創(chuàng)建項目并生成依賴磺陡。向Pod文件夾中添加庫文件和資源趴梢,并配置podspec文件,把模塊的共有組件放入Pod/Classes中币他,然后進(jìn)入Example文件夾執(zhí)行pod update命令坞靶,再打開項目工程可以看到,剛剛添加的組件已經(jīng)在Pods子工程下Development Pods/PodTestLibrary中了蝴悉,然后編輯demo工程彰阴,測試組件,我并沒有使用提供的測試框架進(jìn)行測試拍冠,這里就先不介紹了尿这。
$ cd /Users/dujinxin/github/JXView-Swift/Example/
$ pod update
注意:這里需要注意的是每當(dāng)你向Pod中添加了新的文件或者以后更新了podspec的版本都需要重新執(zhí)行一遍pod update命令簇抵。
測試無誤后需要將該項目添加并推送到遠(yuǎn)端倉庫,并編輯podspec文件妻味。通過Cocoapods創(chuàng)建出來的目錄本身就在本地的Git管理下正压,如果我們托管到遠(yuǎn)端服務(wù)器,那么我們需要做的就是給它添加遠(yuǎn)端倉庫责球,同樣去GitHub或其他的Git服務(wù)提供商那里創(chuàng)建一個私有的倉庫焦履,拿到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ù)提示來操作,對命令行不熟的栖博,可以通過git客戶端來操作
因為podspec文件中獲取Git版本控制的項目還需要tag號屑宠,所以我們要打上一個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文件后,需要驗證一下這個文件是否可用
$ pod lib lint
注意:如果有任何WARNING或者ERROR都是不可以的仇让,它就不能被添加到Spec Repo中典奉,Xcode允許警告存在,所以可以通過命令“$ pod lib lint --allow-warnings”屏蔽警告丧叽,如果出現(xiàn)Error但是提示信息不足卫玖,可以通過命令“$ pod lib lint --verbose”以獲取更多錯誤信息。
如果驗證不通過踊淳,根據(jù)提示修改podspec假瞬,直到再次驗證通過如下:
podspec更多設(shè)置可以參考官方實例http://guides.cocoapods.org/syntax/podspec.html,想了解更多跟項目相關(guān)的設(shè)置迂尝,還可以上GitHub參考知名第三庫的podspec
4.向Spec Repo提交podspec
向Spec Repo提交podspec需要完成兩點一個是podspec必須通過驗證無誤脱茉,再一個就是刪掉無用的注釋(這個不是必須的,為了規(guī)范還是刪掉吧)垄开。
$ pod repo push gd_repos JXView.podspec? #前面是本地Repo名字 后面是podspec名字
之前沒有發(fā)布過pods的琴许,這一步不成功,需要先注冊Trunk
CocoaPods 0.33中加入了Trunk服務(wù)说榆。CocoaPods Trunk服務(wù)的引入虚吟,解決了很多類似的問題。CocoaPods作為一個集中式的服務(wù)签财,使得分析和統(tǒng)計平臺數(shù)據(jù)變得十分方便串慰。要想使用Trunk服務(wù),首先你需要注冊自己的電腦唱蒸。這很簡單邦鲫,只要你指明你的郵箱地址(spec文件中的)和名稱即可。
$ pod trunk register 123456@qq.com 'zhangsan' --description='macbook air'
后面可以加上 –verbose可選參數(shù),為了便于輸出注冊過程中的調(diào)試信息庆捺,然后順利的話你會收到一份郵件古今,需要點擊驗證。驗證成功后滔以,我們就可以開始 trunk push 了提交我們的podspec文件捉腥。
$ pod trunk push JXView.podspec
pod trunk push 命令會首先驗證你本地的podspec文件(是否有錯誤),之后會上傳spec文件到trunk你画,最后會將你上傳的podspec文件轉(zhuǎn)換為需要的json文件抵碟,再去看我們的Spec Repo遠(yuǎn)端倉庫,也有了一次提交坏匪,這個podspec也已經(jīng)被Push上去了拟逮。至此,我們的這個組件庫就已經(jīng)制作添加完成了适滓。
注意:可以使用以下命令查看自己的注冊信息“$ pod trunk me”敦迄。當(dāng)然,如果你的pod是由多人維護(hù)的凭迹,你也可以添加其他維護(hù)者“$ pod trunk add-owner ARAnalytics kyle@cocoapods.org”
5.查看和使用我們自己的庫
使用pod search命令就可以查到我們自己的庫了.
$ pod search JXView
在完成這一系列步驟之后罚屋,我們就可以在正式項目中使用這個私有的Pod了只需要在項目的Podfile里增加以下一行代碼即可
$ pod 'JXView', '~> 0.0.5'
然后執(zhí)行pod update,更新庫依賴嗅绸,我們自己的庫文件已經(jīng)出現(xiàn)在Pods子項目中的Pods子目錄下了沿后,而不再是Development Pods。
至此我們的pods私有庫就制作完成了朽砰,在制作過程中遇到的問題可以參考http://www.reibang.com/writer#/notebooks/8215347/notes/16219131
參考:https://guides.cocoapods.org/making/using-pod-lib-create.html