CocoaPods庫的種類
創建一個其他人用pod也能夠搜索到的庫。這種庫分為兩種:一種是公有的,所有人都能訪問到;一種是私有需要Podfile中提供source才能使用。
下面是創建私有庫的原理圖
想要創建私有庫,首先要搞清楚CocoaPods的原理,其功能是讓創建一個工程導入所有項目需要依賴的庫,然后讓項目依賴這個工程。這樣項目只需要導入這一個工程,就能使用所有需要的第三方庫。簡化了項目的集成的復雜性。詳細的原理可以參考這篇文章。
創建私有庫
首先要選擇一個位置用來存放podspec文件,該文件的作用就是記錄你的私有庫的信息,包含版本、位置等。
另外還要有一個位置來存放私有庫的內容,私有庫存放位置信息就被保存在上面的podspec文件中。
所以一共會有兩個倉庫,一個用來保存podspec,另一個用來保存私有庫。
提供倉庫保存的平臺有很多,github、gitlab、碼云等等,由于github私有倉庫收費,故用碼云來創建私有庫。但原理都是一樣的。
1.創建版本記錄倉庫
創建成功之后,打開terminal把這個描述倉庫clone到本地。安裝了CocoaPods的電腦都會在用戶根目錄下創建一個.cocoapods文件夾,來存放github上面所有的公開庫記錄倉庫。repos下本來只有master文件夾,另外兩個是創建的記錄倉庫。
執行pod repo add testRepo https://gitee.com/zhouzheren/TestRepo.git
指令將記錄倉庫添加到本地電腦。
打開目錄發現里面只有兩個文件,.git隱藏文件夾和README.md文件。
2.創建代碼庫
步驟同創建描述倉庫相同,不過需要按照圖中勾選幾項。創建好之后將其clone到本地,添加倉庫名.podspec
、.swift-version
(針對swift)兩個文件。
添加一個TestClass類測試私有庫。使用下圖的指令把內容上傳到私有庫。非常重要的一點是完成對TestClass的修改之后,千萬不要忘記去修改.podspec文件中的s.version,要設置高于0.1.0這個版本。當然如果有想要描述的內容,也要在描述項目中去添加。
完成之后還有一步很重要的操作:添加tag.
tag值與上傳的.podspec文件中s.version保持一致,tag值是用來區分同一個私有庫不同的版本的。
2.2編輯.podspec文件
上面clone代碼庫的圖片中,包含了一個指令創建的podspec文件注釋內容非常多,可以復制下面的內容來創建。
Pod::Spec.new do |s|
s.name = "TestFramework" # 項目名稱
s.version = "0.1.0" # 版本號 與 你倉庫的tag值對應
s.license = "MIT" # 開源證書
s.summary = "私人pod代碼" # 項目簡介
s.homepage = "https://gitee.com/zhouzheren/TestFramework" # 倉庫的主頁
s.source = { :git => "https://gitee.com/zhouzheren/TestFramework.git", :tag => "#{0.1.0}" }#你的倉庫地址,不能用SSH地址
s.source_files = "TestFramework/*/"
s.requires_arc = true # 是否啟用ARC
s.platform = :ios, "7.0" #平臺及支持的最低版本
s.author = { "蝸牛" => "a595429717@163.com" } # 作者信息
s.social_media_url = "http://www.lxweimin.com/u/611e4882e4dc" # 個人主頁
end
pod spec create TestFramework
命令可以創建TestFramework.podspec文件,但注釋比較的多,可以精簡為上面的內容。
名稱 | 作用 |
---|---|
s.name | 是私有庫的名字,因為寫的Demo是TestFramework,所以使用這個 |
s.version | 當前私有庫版本默認值是0.1.0,每次修改私有庫都需要增加這個值 |
s.summary | 總結,你的私有庫的主要功能是什么 |
s.description | 詳細的描述,可以寫當次修改的內容有哪些,增加了什么功能 |
s.source_files | 私有庫文件路徑,會用到哪些文件 |
s.homepage | 是主頁的地址,私有庫的主頁地址 |
s.source | 私有庫內容clone地址 |
pod lib lint
指令可以測試編輯的.podspec文件是否正確。使用這個命令先要cd到.podspec目錄。提示了錯誤就要根據提示內容修改,當修改到沒有error信息只有warning信息的時候就可以使用pod lib lint --allow-warnings
指令。
綠色文字表示.podspec文件是合法的,這就算編輯完成了。可以將.podspec文件上傳到描述倉庫。
testRepo是在.cocoapods文件夾里的目錄,TestFramework.podspec版本描述庫文件的名字。
.podspec文件上傳完畢之后,可以使用pod search 私有庫名字
在終端搜索這個庫。
3.使用私有庫
首先要編輯Podfile的內容,使用了私有庫的Podfile需要指定source,詳情見下圖。
然后cd到對應的工程目錄下,使用pod install
,安裝完成pod之后,可以去工程中調用對應的測試文件。如果使用#import不到對應的類,可以嘗試先cmd+b編譯一下對應的項目,然后再來#import。
4.如果更新維護私有庫
第一步:修改私有庫內容,修改.podspec文件;將這些修改push到私有庫中。
第二步:打上tag,tag值保持和.podspec中的version相同,上傳tag。
第三步:利用pod repo push 本地repo名 .podspec文件
指令更新本地repo,同時上傳.podspec文件到描述倉。
如果希望把別人更新的repo拉到本地,可以使用pod repo update repo名字
命令。
tips
1.pod install 之后,測試私有庫內容的時候,使用#import不到對應的類,可以先cmd +b 編譯一下項目。
2.podspec文件上傳了兩次,一次是修改私有庫的時候,修改.podspec,然后一起上傳到私有庫中;另一次是給私有庫打上tag之后,將.podspec上傳到描述倉庫。
- 每次修改完.podspec文件之后,使用了私有庫的項目需要執行pod update,這樣才能拿到最新的私有庫內容。當然如果Podfile文件中指定了引用私有庫的版本,就不需要update了,除非修改Podfile文件然后updata。
4.多人協同維護私有庫時,更新本地私有庫的repo,pod repo update repo名字
如何刪除一個私有庫呢?
私有庫如何包含圖片等資源文件?
私有庫包含其他私有庫?
問題集合
幫同事上傳.podspec的時候出現這個錯誤。
我的步驟是先幫他打出framework,并把庫放到一級目錄下面,然后修改.podspec文件中的版本號到0.1.1,然后把所有的內容push到代碼庫中并貼上tag0.1.1。
之后忽然發現s.ios.vendored_frameworks = "ZLLBanner.framework"
少了一個下劃線,應該是s.ios.vendored_frameworks = "ZLL_Banner.framework"
。重新修改了.podspec文件并push。
懷疑是貼上tag之后,又傳了代碼導致的問題。于是撤銷0.1.1的tag。在最新的一次提交上貼tag。最后就成功了。
常用命令集合
name | function |
---|---|
git clone 私有庫地址 | 將server上的倉庫復制到本地電腦上 |
pod repo add repoName podspec地址 | 在.cocoapods目錄下增加一個repo |
echo "3.0" > .swifit-version | 創建一個.swift-version文件,swift版本是3.0 |
pod spec create name.podspec | 創建一個name.podspec文件 |
git add . | 將當前目錄下所有的修改都添加到git緩存 |
git commit -s -m "commit description " | commit這次的修改,并添加描述 |
git push origin master | 將修改的內容push到server的master分支上 |
git tag | 查看當前目錄的所有tag記錄 |
git tag -m "description " "version" | 給修改增加一個tag,包含描述信息,和tag的版本號 |
git push --tags | 將tag push到server倉庫里 |
pod lib lint (--allow-warnings) | 編譯name.podspec文件,檢驗內容是否合法 |
pod repo push repoName name.podspec | 上傳name.podspec文件到描述倉庫里,并更新本地repo目錄 |
pod search 私有庫name | 查詢私有庫信息 |
pod install | 為項目安裝cocoapods |
pod outdated | 查看本地項目中所有已安裝的庫的版本 |
pod repo update repoName | 更新本地私有庫的repo |
參考資料
CocoaPods 私有倉庫的創建(超詳細)
實現CocoaPods的subspec分支功能
使用Cocoapods創建私有podspec
Cocoapods使用私有庫中遇到的坑
使用私有庫中遇到的坑
使用Cocoapods創建私有podspec