CocoaPods庫(kù)的種類
創(chuàng)建一個(gè)其他人用pod也能夠搜索到的庫(kù)贸人。這種庫(kù)分為兩種:一種是公有的,所有人都能訪問(wèn)到褒颈;一種是私有需要Podfile中提供source才能使用廓推。
下面是創(chuàng)建私有庫(kù)的原理圖
想要?jiǎng)?chuàng)建私有庫(kù),首先要搞清楚CocoaPods的原理锻煌,其功能是讓創(chuàng)建一個(gè)工程導(dǎo)入所有項(xiàng)目需要依賴的庫(kù)妓布,然后讓項(xiàng)目依賴這個(gè)工程。這樣項(xiàng)目只需要導(dǎo)入這一個(gè)工程宋梧,就能使用所有需要的第三方庫(kù)匣沼。簡(jiǎn)化了項(xiàng)目的集成的復(fù)雜性。詳細(xì)的原理可以參考這篇文章捂龄。
創(chuàng)建私有庫(kù)
首先要選擇一個(gè)位置用來(lái)存放podspec文件释涛,該文件的作用就是記錄你的私有庫(kù)的信息,包含版本倦沧、位置等唇撬。
另外還要有一個(gè)位置來(lái)存放私有庫(kù)的內(nèi)容,私有庫(kù)存放位置信息就被保存在上面的podspec文件中展融。
所以一共會(huì)有兩個(gè)倉(cāng)庫(kù)窖认,一個(gè)用來(lái)保存podspec,另一個(gè)用來(lái)保存私有庫(kù)。
提供倉(cāng)庫(kù)保存的平臺(tái)有很多耀态,github轮傍、gitlab、碼云等等首装,由于github私有倉(cāng)庫(kù)收費(fèi)创夜,故用碼云來(lái)創(chuàng)建私有庫(kù)。但原理都是一樣的仙逻。
1.創(chuàng)建版本記錄倉(cāng)庫(kù)
創(chuàng)建成功之后驰吓,打開(kāi)terminal把這個(gè)描述倉(cāng)庫(kù)clone到本地。安裝了CocoaPods的電腦都會(huì)在用戶根目錄下創(chuàng)建一個(gè).cocoapods文件夾系奉,來(lái)存放github上面所有的公開(kāi)庫(kù)記錄倉(cāng)庫(kù)檬贰。repos下本來(lái)只有master文件夾,另外兩個(gè)是創(chuàng)建的記錄倉(cāng)庫(kù)缺亮。
執(zhí)行pod repo add testRepo https://gitee.com/zhouzheren/TestRepo.git
指令將記錄倉(cāng)庫(kù)添加到本地電腦翁涤。
打開(kāi)目錄發(fā)現(xiàn)里面只有兩個(gè)文件,.git隱藏文件夾和README.md文件萌踱。
2.創(chuàng)建代碼庫(kù)
步驟同創(chuàng)建描述倉(cāng)庫(kù)相同葵礼,不過(guò)需要按照?qǐng)D中勾選幾項(xiàng)。創(chuàng)建好之后將其clone到本地并鸵,添加倉(cāng)庫(kù)名.podspec
鸳粉、.swift-version
(針對(duì)swift)兩個(gè)文件。
添加一個(gè)TestClass類測(cè)試私有庫(kù)园担。使用下圖的指令把內(nèi)容上傳到私有庫(kù)届谈。非常重要的一點(diǎn)是完成對(duì)TestClass的修改之后,千萬(wàn)不要忘記去修改.podspec文件中的s.version弯汰,要設(shè)置高于0.1.0這個(gè)版本艰山。當(dāng)然如果有想要描述的內(nèi)容,也要在描述項(xiàng)目中去添加蝙泼。
完成之后還有一步很重要的操作:添加tag.
tag值與上傳的.podspec文件中s.version保持一致程剥,tag值是用來(lái)區(qū)分同一個(gè)私有庫(kù)不同的版本的劝枣。
2.2編輯.podspec文件
上面clone代碼庫(kù)的圖片中汤踏,包含了一個(gè)指令創(chuàng)建的podspec文件注釋內(nèi)容非常多,可以復(fù)制下面的內(nèi)容來(lái)創(chuàng)建舔腾。
Pod::Spec.new do |s|
s.name = "TestFramework" # 項(xiàng)目名稱
s.version = "0.1.0" # 版本號(hào) 與 你倉(cāng)庫(kù)的tag值對(duì)應(yīng)
s.license = "MIT" # 開(kāi)源證書
s.summary = "私人pod代碼" # 項(xiàng)目簡(jiǎn)介
s.homepage = "https://gitee.com/zhouzheren/TestFramework" # 倉(cāng)庫(kù)的主頁(yè)
s.source = { :git => "https://gitee.com/zhouzheren/TestFramework.git", :tag => "#{0.1.0}" }#你的倉(cāng)庫(kù)地址溪胶,不能用SSH地址
s.source_files = "TestFramework/*/"
s.requires_arc = true # 是否啟用ARC
s.platform = :ios, "7.0" #平臺(tái)及支持的最低版本
s.author = { "蝸牛" => "a595429717@163.com" } # 作者信息
s.social_media_url = "http://www.reibang.com/u/611e4882e4dc" # 個(gè)人主頁(yè)
end
pod spec create TestFramework
命令可以創(chuàng)建TestFramework.podspec文件,但注釋比較的多稳诚,可以精簡(jiǎn)為上面的內(nèi)容哗脖。
名稱 | 作用 |
---|---|
s.name | 是私有庫(kù)的名字,因?yàn)閷懙腄emo是TestFramework,所以使用這個(gè) |
s.version | 當(dāng)前私有庫(kù)版本默認(rèn)值是0.1.0才避,每次修改私有庫(kù)都需要增加這個(gè)值 |
s.summary | 總結(jié)橱夭,你的私有庫(kù)的主要功能是什么 |
s.description | 詳細(xì)的描述,可以寫當(dāng)次修改的內(nèi)容有哪些桑逝,增加了什么功能 |
s.source_files | 私有庫(kù)文件路徑棘劣,會(huì)用到哪些文件 |
s.homepage | 是主頁(yè)的地址,私有庫(kù)的主頁(yè)地址 |
s.source | 私有庫(kù)內(nèi)容clone地址 |
pod lib lint
指令可以測(cè)試編輯的.podspec文件是否正確楞遏。使用這個(gè)命令先要cd到.podspec目錄茬暇。提示了錯(cuò)誤就要根據(jù)提示內(nèi)容修改,當(dāng)修改到?jīng)]有error信息只有warning信息的時(shí)候就可以使用pod lib lint --allow-warnings
指令寡喝。
綠色文字表示.podspec文件是合法的糙俗,這就算編輯完成了≡蓿可以將.podspec文件上傳到描述倉(cāng)庫(kù)巧骚。
testRepo是在.cocoapods文件夾里的目錄,TestFramework.podspec版本描述庫(kù)文件的名字格二。
.podspec文件上傳完畢之后网缝,可以使用pod search 私有庫(kù)名字
在終端搜索這個(gè)庫(kù)。
3.使用私有庫(kù)
首先要編輯Podfile的內(nèi)容蟋定,使用了私有庫(kù)的Podfile需要指定source粉臊,詳情見(jiàn)下圖。
然后cd到對(duì)應(yīng)的工程目錄下驶兜,使用pod install
扼仲,安裝完成pod之后,可以去工程中調(diào)用對(duì)應(yīng)的測(cè)試文件抄淑。如果使用#import不到對(duì)應(yīng)的類屠凶,可以嘗試先cmd+b編譯一下對(duì)應(yīng)的項(xiàng)目,然后再來(lái)#import肆资。
4.如果更新維護(hù)私有庫(kù)
第一步:修改私有庫(kù)內(nèi)容矗愧,修改.podspec文件;將這些修改push到私有庫(kù)中郑原。
第二步:打上tag,tag值保持和.podspec中的version相同唉韭,上傳tag。
第三步:利用pod repo push 本地repo名 .podspec文件
指令更新本地repo,同時(shí)上傳.podspec文件到描述倉(cāng)犯犁。
如果希望把別人更新的repo拉到本地属愤,可以使用pod repo update repo名字
命令。
tips
1.pod install 之后酸役,測(cè)試私有庫(kù)內(nèi)容的時(shí)候住诸,使用#import不到對(duì)應(yīng)的類驾胆,可以先cmd +b 編譯一下項(xiàng)目。
2.podspec文件上傳了兩次贱呐,一次是修改私有庫(kù)的時(shí)候丧诺,修改.podspec,然后一起上傳到私有庫(kù)中奄薇;另一次是給私有庫(kù)打上tag之后锅必,將.podspec上傳到描述倉(cāng)庫(kù)。
- 每次修改完.podspec文件之后惕艳,使用了私有庫(kù)的項(xiàng)目需要執(zhí)行pod update搞隐,這樣才能拿到最新的私有庫(kù)內(nèi)容。當(dāng)然如果Podfile文件中指定了引用私有庫(kù)的版本远搪,就不需要update了劣纲,除非修改Podfile文件然后updata。
4.多人協(xié)同維護(hù)私有庫(kù)時(shí)谁鳍,更新本地私有庫(kù)的repo癞季,pod repo update repo名字
如何刪除一個(gè)私有庫(kù)呢?
私有庫(kù)如何包含圖片等資源文件倘潜?
私有庫(kù)包含其他私有庫(kù)绷柒?
問(wèn)題集合
幫同事上傳.podspec的時(shí)候出現(xiàn)這個(gè)錯(cuò)誤。
我的步驟是先幫他打出framework涮因,并把庫(kù)放到一級(jí)目錄下面废睦,然后修改.podspec文件中的版本號(hào)到0.1.1,然后把所有的內(nèi)容push到代碼庫(kù)中并貼上tag0.1.1养泡。
之后忽然發(fā)現(xiàn)s.ios.vendored_frameworks = "ZLLBanner.framework"
少了一個(gè)下劃線嗜湃,應(yīng)該是s.ios.vendored_frameworks = "ZLL_Banner.framework"
。重新修改了.podspec文件并push澜掩。
懷疑是貼上tag之后,又傳了代碼導(dǎo)致的問(wèn)題肩榕。于是撤銷0.1.1的tag刚陡。在最新的一次提交上貼tag。最后就成功了株汉。
常用命令集合
name | function |
---|---|
git clone 私有庫(kù)地址 | 將server上的倉(cāng)庫(kù)復(fù)制到本地電腦上 |
pod repo add repoName podspec地址 | 在.cocoapods目錄下增加一個(gè)repo |
echo "3.0" > .swifit-version | 創(chuàng)建一個(gè).swift-version文件筐乳,swift版本是3.0 |
pod spec create name.podspec | 創(chuàng)建一個(gè)name.podspec文件 |
git add . | 將當(dāng)前目錄下所有的修改都添加到git緩存 |
git commit -s -m "commit description " | commit這次的修改,并添加描述 |
git push origin master | 將修改的內(nèi)容push到server的master分支上 |
git tag | 查看當(dāng)前目錄的所有tag記錄 |
git tag -m "description " "version" | 給修改增加一個(gè)tag,包含描述信息郎逃,和tag的版本號(hào) |
git push --tags | 將tag push到server倉(cāng)庫(kù)里 |
pod lib lint (--allow-warnings) | 編譯name.podspec文件哥童,檢驗(yàn)內(nèi)容是否合法 |
pod repo push repoName name.podspec | 上傳name.podspec文件到描述倉(cāng)庫(kù)里,并更新本地repo目錄 |
pod search 私有庫(kù)name | 查詢私有庫(kù)信息 |
pod install | 為項(xiàng)目安裝cocoapods |
pod outdated | 查看本地項(xiàng)目中所有已安裝的庫(kù)的版本 |
pod repo update repoName | 更新本地私有庫(kù)的repo |
參考資料
CocoaPods 私有倉(cāng)庫(kù)的創(chuàng)建(超詳細(xì))
實(shí)現(xiàn)CocoaPods的subspec分支功能
使用Cocoapods創(chuàng)建私有podspec
Cocoapods使用私有庫(kù)中遇到的坑
使用私有庫(kù)中遇到的坑
使用Cocoapods創(chuàng)建私有podspec