? ? ? ?最近在學習CocoaPods公有庫、本地私有庫、遠程私有庫,其中遇到了許多問題,怕過后又忘記了,所以記錄下來幫助自己也幫助他人少走彎路。做iOS 3年多未寫過什么文章,感覺自己都對不起自己的技術(shù)了,新手第一次寫文章,大神不要噴我?,F(xiàn)在面試聽說要求很多,都要GitHub有開源項目,有博客分享過技術(shù)文章...,生活不易呀,為了生存。????
? ? ? ?這文章先說說CocoaPods公有庫,接下來的文章就講講本地私有庫、遠程私有庫。啥叫CocoaPods公有庫?比如我們經(jīng)常用到第三方庫AFNetworking、SDWebImage、MBProgressHUD,本人理解的CocoaPods公有庫就是把自己做好的庫、項目功能模塊上傳到開源倉庫,上傳CocoaPods的開源索引庫repo,通過CocoaPods管理自己的庫或者模塊。這樣管理項目就方便了,直接用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)建遠程倉庫與本地代碼關(guān)聯(lián)
先在GitHub上創(chuàng)建新項目,這里我就直接用例子了,如圖所示:
? ? ? ?這里用的是選擇公有庫,私有的要錢的,最好添加ignore和證書license,證書在后面用到,可以去掉警告。創(chuàng)建成功項目里就只有ignore和license,選擇地址clone項目到桌面。
? ? ? cd到桌面,或者你想要的文件夾,clone項目到本地。
? ? ? ?打開剛才clone的文件夾,我這里就直接用庫,不帶demo的,如果你們想要帶demo的話也是一樣的道理,只是路徑填好就行了。一般在庫里面創(chuàng)建Classes文件夾,名稱隨意,.podspec的資源路徑填好就沒問題,然后把你的庫或者模塊放在Classes文件夾里面,我就用我自己做的一個庫,如圖:
? ? ? 我這邊就把遠程庫和本地代碼關(guān)聯(lián)了,只是沒有把代碼上傳帶遠程倉庫,你們也可以直接在本地創(chuàng)建庫名,然后通過命令?git remote add origin 遠程倉庫地址?關(guān)聯(lián)遠程倉庫 ,這我就不示范了。
三、創(chuàng)建.podspec文件和修改.podspec文件的內(nèi)容
? ? ? ?接著cd到庫,命令執(zhí)行,$ pod spec create PublicLib?// PublicLib是你的庫名稱,這里創(chuàng)建.podspec文件,這個文件就是最重要的。你再去看看你的庫是不是多了一個.podspec文件,如圖:
? ? ? 打開.podspec文件,通過xcode打開,修改相應(yīng)的內(nèi)容,想詳細了解更多的.podspec文件內(nèi)容,請看官網(wǎng)介紹:Specs and the Specs Repo。把不需要的刪除,修改完后如圖:
? ? ? ? .podspec文件內(nèi)容那么多,為啥就只剩這一點點了,#開頭的是注釋的,用不到的,看著有點亂,所以就刪了。
s.name一般不需要修改,它對應(yīng).podspec文件的名字,如果不相同就會報錯;
s.version是你庫的版本號;
s.version庫簡介;
s.description庫描述,這個庫描述一定要比簡介長;
s.homepage遠程倉庫的主頁,對應(yīng)你項目庫的主頁,不是項目地址,不帶.git后綴的;
s.license是證書,剛開始創(chuàng)建遠程項目時選擇的;
s.author作者聯(lián)系名和郵箱;
s.platform支持的平臺,這個必須要的,要不會包錯,包沒有找到頭文件或者沒有找到UIKit;
s.source資源的地址和tag,這里的地址是庫的地址,帶.git的,tag要對應(yīng)遠程的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ǔ)上更改了。這是我查了很久資源才知道的,當時一直報錯。。。
溫馨提示:
? ? ? ?.podspec文件的內(nèi)容配置要根據(jù)你的項目庫來填寫,里面還有許多我沒有用到的,比如資源庫、依賴第三方的庫、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)致編譯報錯,只需要重命名加上即可)
寫法: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'
四、把本地代碼上傳到遠程倉庫和打tag版本
配置好.podspec文件,接著就是把代碼上傳到遠程倉庫,通過
????$ git add . ; ?
????$ git commit -m “XX” ?;?
????$ git push。
打tag,打的tag一定要對應(yīng)版本號,因為.podspec文件配置已經(jīng)寫好跟版本號一樣的,通過
? ? $ git tag '0.0.1' ;?
? ? $ git push --tags;
如圖所示:
五、注冊Cocoapods賬號
? ? ? ?可以先查看你本機有沒有注冊過Cocoapods賬號,通過 $ pod trunk me ,如果沒有信息就證明沒有注冊過,需要注冊。輸入$ pod trunk register 郵箱地址 ‘用戶名’ --description='描述信息' 注冊,然后在你注冊的郵箱收到郵件,打開郵件復(fù)制鏈接打開網(wǎng)頁激活驗證注冊,然后跳到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有顯示庫,是我之前弄的。
六、驗證pod是否能通過
上傳代碼后,然后驗證pod是否能通過:
? ??$ pod lib lint ? 本地驗證?
? ??$ pod spec lint ?本地和遠程驗證
? ??$ pod lib lint --verbose 顯示詳細的檢測過程,出錯時會顯示詳細的錯誤信息
? ??$ pod lib lint --allow-warnings ?允許警告,用來解決存在警告導(dǎo)致不能通過校驗的問題
如果出現(xiàn)綠色字passed validation就是驗證通過,如圖所示:
七、提交pod和檢查庫
pod驗證通過了,就接著執(zhí)行$ pod trunk push xx.podspec --allow-warnings,等幾分鐘,結(jié)果報錯了。
? ? ? ? pod上面已經(jīng)有相應(yīng)的名稱了,所以要更改名稱了。我目錄的文件夾和.podspec文件名和.podspec文件里面的s.name都全部更改了,要不會報錯,如圖:
這次成功了,如果所示:
再執(zhí)行$ pod trunk me 可以看到自己的信息,包括自己的庫,如上圖所示。
然后通過搜索庫看能不能搜索出來,$ pod search XX ,結(jié)果搜不出來,因為是pod的緩存問題,是從緩存的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.上傳到遠程倉庫;
? ??????$ git add . ; ?
? ?? ???$ git commit -m “XX” ?;?
? ??? ??$ git push。
????3.打tag并上傳;
? ??????$ git tag '0.0.2' ;? ??
? ?? ???$ git push --tags;
????4.驗證pod并提交到pod。
?? ??????$?spec repo ? ?//查詢repo
? ??? ???$?pod spec lint --allow-warnings ? ?//遠程本地pod驗證
? ??? ???$?pod trunk push ?PublicLibQiuyh.podspec?--allow-warnings ??//提交pod
? ??? ???$?pod search PublicLibQiuyh ? //查詢庫
第一次寫文章,用了好久的時間,不過有點成就感,嘻嘻?。?!
喜歡點個贊唄?。?!