CocoaPods(二) 私有庫

CocoaPods庫的種類

創建一個其他人用pod也能夠搜索到的庫。這種庫分為兩種:一種是公有的,所有人都能訪問到;一種是私有需要Podfile中提供source才能使用。
下面是創建私有庫的原理圖

CocoaPods私有庫原理圖.png

想要創建私有庫,首先要搞清楚CocoaPods的原理,其功能是讓創建一個工程導入所有項目需要依賴的庫,然后讓項目依賴這個工程。這樣項目只需要導入這一個工程,就能使用所有需要的第三方庫。簡化了項目的集成的復雜性。詳細的原理可以參考這篇文章

創建私有庫

首先要選擇一個位置用來存放podspec文件,該文件的作用就是記錄你的私有庫的信息,包含版本、位置等。
另外還要有一個位置來存放私有庫的內容,私有庫存放位置信息就被保存在上面的podspec文件中。
所以一共會有兩個倉庫,一個用來保存podspec,另一個用來保存私有庫。
提供倉庫保存的平臺有很多,github、gitlab、碼云等等,由于github私有倉庫收費,故用碼云來創建私有庫。但原理都是一樣的。

1.創建版本記錄倉庫

碼云創建版本描述倉庫

創建成功之后,打開terminal把這個描述倉庫clone到本地。安裝了CocoaPods的電腦都會在用戶根目錄下創建一個.cocoapods文件夾,來存放github上面所有的公開庫記錄倉庫。repos下本來只有master文件夾,另外兩個是創建的記錄倉庫。

cocoapods本地目錄

執行pod repo add testRepo https://gitee.com/zhouzheren/TestRepo.git指令將記錄倉庫添加到本地電腦。

添加記錄倉庫后的repo目錄

打開目錄發現里面只有兩個文件,.git隱藏文件夾和README.md文件。

2.創建代碼庫

創建用來測試的代碼庫

步驟同創建描述倉庫相同,不過需要按照圖中勾選幾項。創建好之后將其clone到本地,添加倉庫名.podspec.swift-version(針對swift)兩個文件。

clone代碼庫

添加一個TestClass類測試私有庫。使用下圖的指令把內容上傳到私有庫。非常重要的一點是完成對TestClass的修改之后,千萬不要忘記去修改.podspec文件中的s.version,要設置高于0.1.0這個版本。當然如果有想要描述的內容,也要在描述項目中去添加。

將添加的文件上傳到私有庫中

完成之后還有一步很重要的操作:添加tag.

給版本添加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文件是合法的,這就算編輯完成了。可以將.podspec文件上傳到描述倉庫。

上傳podspec文件

testRepo是在.cocoapods文件夾里的目錄,TestFramework.podspec版本描述庫文件的名字。
.podspec文件上傳完畢之后,可以使用pod search 私有庫名字在終端搜索這個庫。

3.使用私有庫

首先要編輯Podfile的內容,使用了私有庫的Podfile需要指定source,詳情見下圖。

使用了私有庫的Podfile文件的內容

然后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上傳到描述倉庫。

  1. 每次修改完.podspec文件之后,使用了私有庫的項目需要執行pod update,這樣才能拿到最新的私有庫內容。當然如果Podfile文件中指定了引用私有庫的版本,就不需要update了,除非修改Podfile文件然后updata。

4.多人協同維護私有庫時,更新本地私有庫的repo,pod repo update repo名字

如何刪除一個私有庫呢?
私有庫如何包含圖片等資源文件?
私有庫包含其他私有庫?

問題集合

幫同事上傳.podspec的時候出現這個錯誤。

pod repo push 問題

我的步驟是先幫他打出framework,并把庫放到一級目錄下面,然后修改.podspec文件中的版本號到0.1.1,然后把所有的內容push到代碼庫中并貼上tag0.1.1。
之后忽然發現s.ios.vendored_frameworks = "ZLLBanner.framework"少了一個下劃線,應該是s.ios.vendored_frameworks = "ZLL_Banner.framework"。重新修改了.podspec文件并push。

pod lib lint成功,但Push失敗

懷疑是貼上tag之后,又傳了代碼導致的問題。于是撤銷0.1.1的tag。在最新的一次提交上貼tag。最后就成功了。

.podspec文件push成功
常用命令集合
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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容