? ? ? ?最近在學(xué)習(xí)CocoaPods公有庫屋确、本地私有庫纳击、遠(yuǎn)程私有庫,其中遇到了許多問題攻臀,怕過后又忘記了焕数,所以記錄下來幫助自己也幫助他人少走彎路。做iOS 3年多未寫過什么文章刨啸,感覺自己都對不起自己的技術(shù)了堡赔,新手第一次寫文章,大神不要噴我∩枇現(xiàn)在面試聽說要求很多善已,都要GitHub有開源項(xiàng)目,有博客分享過技術(shù)文章...离例,生活不易呀换团,為了生存。????
? ? ? ?這文章先說說CocoaPods公有庫粘招,接下來的文章就講講本地私有庫、遠(yuǎn)程私有庫偎球。啥叫CocoaPods公有庫洒扎?比如我們經(jīng)常用到第三方庫AFNetworking、SDWebImage衰絮、MBProgressHUD袍冷,本人理解的CocoaPods公有庫就是把自己做好的庫、項(xiàng)目功能模塊上傳到開源倉庫猫牡,上傳CocoaPods的開源索引庫repo胡诗,通過CocoaPods管理自己的庫或者模塊。這樣管理項(xiàng)目就方便了,直接用CocoaPods安裝即可煌恢。
一骇陈、安裝cocoapod或更新cocoapods
需要安裝新版的cocoapods,舊版的cocoapods可能不支持瑰抵,會導(dǎo)致下面的步驟出錯你雌,所以先要更新cocoapods。我是用最新的1.5.0 beta版二汛,如圖:
我這里就不說安裝cocoapods或者更新cocoapods了婿崭,請大家網(wǎng)上搜一下教程。
更新cocoapods的簡單步驟:
$ sudo gem update --system// 先更新gem肴颊;
$ sudo gem install cocoapods// 安裝cocoapods
$ pod setup//設(shè)置
如果gem升級失敗氓栈,可能是ruby版本過低導(dǎo)致的,安裝RVM來升級ruby婿着。
二授瘦、創(chuàng)建遠(yuǎn)程倉庫與本地代碼關(guān)聯(lián)
先在GitHub上創(chuàng)建新項(xiàng)目,這里我就直接用例子了祟身,如圖所示:
? ? ? ?這里用的是選擇公有庫奥务,私有的要錢的,最好添加ignore和證書license袜硫,證書在后面用到氯葬,可以去掉警告。創(chuàng)建成功項(xiàng)目里就只有ignore和license婉陷,選擇地址clone項(xiàng)目到桌面帚称。
? ? ? cd到桌面,或者你想要的文件夾秽澳,clone項(xiàng)目到本地闯睹。
? ? ? ?打開剛才clone的文件夾,我這里就直接用庫担神,不帶demo的楼吃,如果你們想要帶demo的話也是一樣的道理,只是路徑填好就行了妄讯。一般在庫里面創(chuàng)建Classes文件夾孩锡,名稱隨意,.podspec的資源路徑填好就沒問題亥贸,然后把你的庫或者模塊放在Classes文件夾里面躬窜,我就用我自己做的一個庫,如圖:
? ? ? 我這邊就把遠(yuǎn)程庫和本地代碼關(guān)聯(lián)了炕置,只是沒有把代碼上傳帶遠(yuǎn)程倉庫荣挨,你們也可以直接在本地創(chuàng)建庫名男韧,然后通過命令?git remote add origin 遠(yuǎn)程倉庫地址?關(guān)聯(lián)遠(yuǎn)程倉庫 ,這我就不示范了默垄。
三此虑、創(chuàng)建.podspec文件和修改.podspec文件的內(nèi)容
? ? ? ?接著cd到庫,命令執(zhí)行厕倍,$ pod spec create PublicLib?// PublicLib是你的庫名稱寡壮,這里創(chuàng)建.podspec文件,這個文件就是最重要的讹弯。你再去看看你的庫是不是多了一個.podspec文件况既,如圖:
? ? ? 打開.podspec文件,通過xcode打開组民,修改相應(yīng)的內(nèi)容棒仍,想詳細(xì)了解更多的.podspec文件內(nèi)容,請看官網(wǎng)介紹:Specs and the Specs Repo臭胜。把不需要的刪除莫其,修改完后如圖:
? ? ? ? .podspec文件內(nèi)容那么多,為啥就只剩這一點(diǎn)點(diǎn)了耸三,#開頭的是注釋的乱陡,用不到的,看著有點(diǎn)亂仪壮,所以就刪了憨颠。
s.name一般不需要修改,它對應(yīng).podspec文件的名字积锅,如果不相同就會報(bào)錯爽彤;
s.version是你庫的版本號;
s.version庫簡介缚陷;
s.description庫描述适篙,這個庫描述一定要比簡介長;
s.homepage遠(yuǎn)程倉庫的主頁箫爷,對應(yīng)你項(xiàng)目庫的主頁嚷节,不是項(xiàng)目地址,不帶.git后綴的虎锚;
s.license是證書硫痰,剛開始創(chuàng)建遠(yuǎn)程項(xiàng)目時(shí)選擇的;
s.author作者聯(lián)系名和郵箱翁都;
s.platform支持的平臺碍论,這個必須要的谅猾,要不會包錯柄慰,包沒有找到頭文件或者沒有找到UIKit鳍悠;
s.source資源的地址和tag,這里的地址是庫的地址坐搔,帶.git的藏研,tag要對應(yīng)遠(yuǎn)程的tag;
s.source_files資源文件概行,通過這路徑找到對應(yīng)的文件蠢挡;
s.public_header_files暴露的.h文件,用到靜態(tài)庫凳忙;
s.requires_arc是否支持ARC业踏;
s.ios.vendored_libraries靜態(tài)庫路徑,我這里用到了靜態(tài)庫涧卵。
? ? ? ? ?這里如果沒有填寫正確勤家,會遇到很多坑,文件路徑一定要填寫好柳恐,如果我這里不是直接Classes文件夾伐脖,而是Classes文件夾在Lib文件里面,Lib文件是跟.podspec文件同目錄的乐设,那么路徑就要Lib/Classes/**/讼庇;還有這里你有沒有發(fā)現(xiàn)我的靜態(tài)庫.a文件跟.h文件名字不一樣,那是我后來改的近尚,如果用到了系統(tǒng)外的就要以lib開頭的.a蠕啄,所以我就在原來的基礎(chǔ)上更改了。這是我查了很久資源才知道的肿男,當(dāng)時(shí)一直報(bào)錯介汹。。舶沛。
溫馨提示:
? ? ? ?.podspec文件的內(nèi)容配置要根據(jù)你的項(xiàng)目庫來填寫嘹承,里面還有許多我沒有用到的,比如資源庫如庭、依賴第三方的庫叹卷、frame框架、系統(tǒng)的庫等等坪它。這些都需要你們到官網(wǎng)看看介紹骤竹,或者看其他人的介紹,這我就不一一介紹了往毡。
這些在別人文章找到的:
vendored_frameworks:配置需要引用的非系統(tǒng)框架
寫法:vendored_frameworks ='Frameworks/LibFramework.framework'
frameworks:配置依賴的系統(tǒng)框架
寫法:frameworks ='AVFoundation','CoreGraphics','Security','SystemConfiguration'
vendored_libraries:配置需要引用的非系統(tǒng)靜態(tài)庫(要注意蒙揣,這里的.a靜態(tài)庫名字必須要帶lib前綴,如果引用的靜態(tài)庫名字沒lib前綴會導(dǎo)致編譯報(bào)錯开瞭,只需要重命名加上即可)
寫法:vendored_libraries ='Classes/libQYHKeyBoardManager.a'
libraries:配置依賴的系統(tǒng)庫(要注意懒震,這里的寫法需要忽略lib前綴)
寫法:libraries ='c++','sqlite3','stdc++.6.0.9','z'
resources:配置資源文件(.bundle罩息,.png,.txt等資源文件个扰,這些資源文件會被放到mainBundle中瓷炮,要注意避免發(fā)生命名重復(fù)的問題)
寫法:resources ='Resources/QYHKeyBoard.bundle'
resource_bundles:配置指定bundle的資源文件(可以解決resources導(dǎo)致的命名沖突問題)
寫法:resource_bundles = {'QYHKeyBoardBundle'=> ['Resources/QYHKeyBoard.bundle'],}
dependency:依賴的三方庫
寫法:dependency 'AFNetworking','~>3.1.0'
四、把本地代碼上傳到遠(yuǎn)程倉庫和打tag版本
配置好.podspec文件递宅,接著就是把代碼上傳到遠(yuǎn)程倉庫娘香,通過
????$ git add . ; ?
????$ git commit -m “XX” ?;?
????$ git push。
打tag,打的tag一定要對應(yīng)版本號办龄,因?yàn)?podspec文件配置已經(jīng)寫好跟版本號一樣的,通過
? ? $ git tag '0.0.1' ;?
? ? $ git push --tags;
如圖所示:
五烘绽、注冊Cocoapods賬號
? ? ? ?可以先查看你本機(jī)有沒有注冊過Cocoapods賬號,通過 $ pod trunk me 俐填,如果沒有信息就證明沒有注冊過诀姚,需要注冊。輸入$ pod trunk register 郵箱地址 ‘用戶名’ --description='描述信息' 注冊玷禽,然后在你注冊的郵箱收到郵件赫段,打開郵件復(fù)制鏈接打開網(wǎng)頁激活驗(yàn)證注冊,然后跳到pod官網(wǎng)提示pod trunk push矢赁。
????$ pod trunk me //查看有沒有注冊糯笙,有的話就是相關(guān)的注冊賬號的信息
????$ pod trunk register ?郵箱地址 ?‘用戶名’ --description='描述信息' ?//注冊Cocoapods賬號
????$ pod trunk push xx.podspec --allow-warnings //提交到pod,最后用到
如圖是本人自己操作的撩银,pod trunk me有顯示庫给涕,是我之前弄的。
六额获、驗(yàn)證pod是否能通過
上傳代碼后够庙,然后驗(yàn)證pod是否能通過:
? ??$ pod lib lint ? 本地驗(yàn)證?
? ??$ pod spec lint ?本地和遠(yuǎn)程驗(yàn)證
? ??$ pod lib lint --verbose 顯示詳細(xì)的檢測過程,出錯時(shí)會顯示詳細(xì)的錯誤信息
? ??$ pod lib lint --allow-warnings ?允許警告抄邀,用來解決存在警告導(dǎo)致不能通過校驗(yàn)的問題
如果出現(xiàn)綠色字passed validation就是驗(yàn)證通過耘眨,如圖所示:
七、提交pod和檢查庫
pod驗(yàn)證通過了境肾,就接著執(zhí)行$ pod trunk push xx.podspec --allow-warnings剔难,等幾分鐘,結(jié)果報(bào)錯了奥喻。
? ? ? ? pod上面已經(jīng)有相應(yīng)的名稱了偶宫,所以要更改名稱了。我目錄的文件夾和.podspec文件名和.podspec文件里面的s.name都全部更改了环鲤,要不會報(bào)錯纯趋,如圖:
這次成功了,如果所示:
再執(zhí)行$ pod trunk me 可以看到自己的信息,包括自己的庫吵冒,如上圖所示唇兑。
然后通過搜索庫看能不能搜索出來,$ pod search XX ,結(jié)果搜不出來桦锄,因?yàn)槭莗od的緩存問題,是從緩存的repo搜索的蔫耽。把緩存刪除了结耀,通過$?rm ~/Library/Caches/CocoaPods/search_index.json 把緩存刪掉,再$ pod search XX搜重新從網(wǎng)上搜索緩存下來。如圖匙铡,如果能搜到就成功了图甜,直接就可以用pod 安裝管理了。
????$ pod search XX ? ?//搜索庫
????$?rm ~/Library/Caches/CocoaPods/search_index.json ?//刪除pod的緩存
八鳖眼、版本更新
版本更新跟之前的步驟差不多黑毅,這就簡單說一下步驟:
????1.修改.podspec文件中的版本號;
????????s.version? ? ? = "0.0.2" //修改0.0.2版本钦讳,不能是之前的版本矿瘦,要不提交不成功
????2.上傳到遠(yuǎn)程倉庫;
? ??????$ git add . ; ?
? ?? ???$ git commit -m “XX” ?;?
? ??? ??$ git push愿卒。
????3.打tag并上傳缚去;
? ??????$ git tag '0.0.2' ;? ??
? ?? ???$ git push --tags;
????4.驗(yàn)證pod并提交到pod。
?? ??????$?spec repo ? ?//查詢r(jià)epo
? ??? ???$?pod spec lint --allow-warnings ? ?//遠(yuǎn)程本地pod驗(yàn)證
? ??? ???$?pod trunk push ?PublicLibQiuyh.podspec?--allow-warnings ??//提交pod
? ??? ???$?pod search PublicLibQiuyh ? //查詢庫
第一次寫文章琼开,用了好久的時(shí)間易结,不過有點(diǎn)成就感,嘻嘻9窈颉8愣!
下次就是寫本地私有庫和遠(yuǎn)程私有庫了...
喜歡點(diǎn)個贊唄Tⅰp兄住!