如何創(chuàng)建私有 CocoaPods 倉庫

公共 CocoaPods

打開隱藏目錄持搜,可以使用命令:

//打開隱藏的命令:
defaults write com.apple.finder AppleShowAllFiles -bool true
//關閉隱藏的命令:
defaults write com.apple.finder AppleShowAllFiles -bool false

接著需要重啟一下 Finder吉殃, 可以按住 option + 右鍵 Finder 圖標選擇重啟辞居。然后打開隱藏目錄 .cocoapods (這個目錄在你的個人目錄底下, ~/.cocoapods/Users/[username]/.cocoapods)

p1

可以看到上圖, .cocoapods 目錄下的 repos 其實是 repository (倉庫)的縮寫寨腔。 repos 中存放的時倉庫的集合。這里的 master 就是 CocoaPods 官方建立的倉庫率寡,也就是我們所謂的公共庫迫卢。

specs 目錄下存放的就是所有提交到 CocoaPods 的開源庫的 podspec 文件的集合。
其結構如下圖所示:

p2

其組成方式:

specName -- version -- specName.podspec

( master 里現在是 specName.podspec.json冶共,這個 .json 文件就是 podspec 文件加了個后綴乾蛤。我們可以采用 pod ipc spec 這個命令來將 spec 文件轉換成 .json)

那這個文件夾是如何來得呢?其實捅僵,這個文件夾是在你安裝了 CocoaPods 后家卖,第一次執(zhí)行 pod install 時, CocoaPods 通過命令 pod setup 來建立的(這條命令會自動執(zhí)行)庙楚。

上述是官方的 repo 上荡,私有庫的話可以看下我們前面的翻譯或者查看官方文檔,但是官方文檔有一些過程寫的不是特別詳細馒闷,自己實現的時候遇到了一些坑酪捡,特此梳理一下過程,按照官方文檔內容實現一個私有的 spec repo 纳账。根據官方的原理逛薇,我們只需要創(chuàng)建一個和 master 相類似結構的目錄就可以實現私有的 spec repo,當然你可以 fork 一個官方的 repo疏虫,但是它包含了太多沒有必要地庫在里面永罚,這在編譯倉庫的時候需要浪費大量的時間啤呼,所以我們只要自己重新創(chuàng)建一個就可以了。

1.創(chuàng)建一個私有的 Spec Repo

在你的 git 服務器上創(chuàng)建一個 repo呢袱。這里你可以在 github 或者你自己的 git 服務器上實現官扣。公司內部使用的話這里推薦大家使用私有的倉庫,但是 github 的私有倉庫是要收費的 $7/month (壕請無視 - -!)产捞。大部分公司都是有自己的git服務器醇锚,不過一般只能在公司內網使用,或者可以選擇Gitlab,Coding, Bitbucket任意一種坯临。我們以在 github 上創(chuàng)建為例:

p3

如圖所示焊唬,我們在 github 上創(chuàng)建一個空的倉庫,命名為 O2Specs 看靠,這個倉庫是用來存放我們自己所有的私有庫的 spec 文件赶促,就如同官方的 https://github.com/CocoaPods/Specs 是用來存放所有官方的 specs 文件一樣。

然后我們就可以執(zhí)行:

pod repo add REPO_NAME SOURCE_URL

其中的 REPO_NAME 是我們要添加的私有 repo 的名稱(這里我們待會填的是: O2Specs)挟炬,后面是倉庫的 git 地址鸥滨。這里做的其實是創(chuàng)建的工作,也就是在 ~/.cocoapods/repo 目錄下添加了一個以你的私有 repo 為名的文件夾谤祖,但是并沒有添加 spec 文件婿滓。

在終端執(zhí)行命令:

pod repo add O2Specs https://github.com/marklin2012/O2Specs.git

這里用的是 https 地址,當然你也可以用 git 地址粥喜,不過這樣有可能失敗凸主。如果失敗,很大因素是你 githubssh 在本地沒有配置好额湘,配置方法可以看這里:Generating SSH keys卿吐,成功后可以看得到 .cocoapods 目錄如下圖所示:

p4

至此,我們已經在本地得到我們自己的私有倉庫 O2Specs 锋华,這是一個空的倉庫嗡官。

2.添加私有的 Repo 安裝到你的 CocoaPods

這個步驟需要我們事先完成 CocoaPods 依賴庫的搭建,具體可以查看我們另外一篇教程:制作 CocoaPods 依賴庫毯焕。如果這里你想先看看效果衍腥,也可以直接從 github 上 clone 示例工程繼續(xù)下面的操作。

讓我們進入到上面 clone 的示例工程目錄中(或者你自己搭建的依賴庫目錄中):

p5

打開工程的 podspec 文件:

Pod::Spec.new do |s|
  s.name         = "O2View"             #名稱
  s.version      = "0.0.1"              #版本號
  s.summary      = "Just testing"       #簡短介紹
  s.description  = <<-DESC
                    私有Pods測試
                    * Markdown 格式
                   DESC

  s.homepage     = "http://aotu.io/"
  # s.screenshots  = "www.example.com/screenshots_1.gif"
  s.license      = "MIT"                #開源協(xié)議
  s.author             = { "linyi31" => "linyi@jd.com" }

  s.source       = { :git => "https://github.com/marklin2012/O2View.git" }
  ## 這里不支持ssh的地址纳猫,只支持HTTP和HTTPS紧阔,最好使用HTTPS
  ## 正常情況下我們會使用穩(wěn)定的tag版本來訪問,如果是在開發(fā)測試的時候续担,不需要發(fā)布release版本擅耽,直接指向git地址使用
  ## 待測試通過完成后我們再發(fā)布指定release版本物遇,使用如下方式
  #s.source       = { :git => "http://EXAMPLE/O2View.git", :tag => s.version }
  
  s.platform     = :ios, "9.0"          #支持的平臺及版本,這里我們呢用swift起趾,直接上9.0
  s.requires_arc = true                 #是否使用ARC

  s.source_files  = "O2View/*.swift"    #OC可以使用類似這樣"Classes/**/*.{h,m}"

  s.frameworks = 'UIKit', 'QuartzCore', 'Foundation'    #所需的framework,多個用逗號隔開
  s.module_name = 'O2View'              #模塊名稱

  # s.dependency "JSONKit", "~> 1.4"    #依賴關系训裆,該項目所依賴的其他庫边琉,如果有多個可以寫多個 s.dependency

end

這個文件本質上是一個 ruby 文件变姨,這是我們事先已經實現好的依賴庫的 podspec 文件定欧,如果前面步驟都正常的話砍鸠,也就是說我們認為這個 podspec 是合法的話爷辱,就可以直接將這些內容 push 到我們本地的 repo 中耍属。為了避免錯誤巩检,我們可以再驗證一下兢哭,命令行輸入:

pod lib lint

運行之后可能會得到下面的警告:

 -> O2View (0.0.1)
    - WARN  | source: Git sources should specify a tag.

[!] O2View did not pass validation, due to 1 warning (but you can use `--allow-warnings` to ignore it) and All results apply only to public specs, but you can use `--private` to ignore them if linting the specification for a private pod..
You can use the `--no-clean` option to inspect any issue.

由于我們的示例工程還沒有生成正式的 release 版本迟螺, github 上并沒有任何 tag,所以我們剛才填寫 .podspec 文件填寫 git 地址的時候沒有填寫指定 tag (上面文件的注釋中有提到)锉桑,解決方法我們可以先執(zhí)行忽略警告的命令:

pod lib lint --allow-warnings

如果成功會出現如下輸出:

 -> O2View (0.0.1)
    - WARN  | source: Git sources should specify a tag.

O2View passed validation.

到此民轴,我們的 O2View.podspec 就符合規(guī)范了后裸。

3.添加你的 Podspec 到你的 repo

在前面驗證通過的基礎上浪谴,我們接著執(zhí)行命令:

pod repo push O2Specs O2View.podspec

執(zhí)行完苟耻,如果失敗會有相對應的警告和錯誤提示梁呈,只要按照警告和錯誤的詳細信息進行修改和完善即可蘸秘。成功的情況應該可以在終端看到類似的輸出:

Validating spec
 -> O2View (0.0.1)
    - WARN  | source: Git sources should specify a tag.

Updating the `O2Specs' repo

Already up-to-date.

Adding the spec to the `O2Specs' repo

 - [Add] O2View (0.0.1)

Pushing the `O2Specs' repo

To https://github.com/marklin2012/O2Specs.git
   9f32092..8d0ced5  master -> master

再進入到 .cocoapods 的目錄中醋虏,可以看到已經發(fā)生了變化:

p6

同時寻咒,我們還發(fā)現 O2Specsgithub 倉庫也已經發(fā)生了變化:

p7

按照平時使用 CocoaPods 的習慣颈嚼,我們添加依賴庫之前會先搜索一下庫毛秘,讓我們執(zhí)行一下命令:

pod search O2View

哈哈阻课,可以看到已經建立成功了叫挟!

-> O2View (0.0.1)
   Just testing
   pod 'O2View', '~> 0.0.1'
   - Homepage: http://aotu.io/
   - Source:   https://github.com/marklin2012/O2View.git
   - Versions: 0.0.1 [O2Specs repo]

4.測試私有 pod

看到前面的搜索結果限煞,小伙伴們是不是開始有點激動了抹恳?讓我們建立一個普通的工程,命名為 TestPodDemo署驻,然后在終端 cd 到其目錄路徑下,添加一個 Podfile 文件:

pod init

建立后修改 Podfile 文件內容如下:

use_frameworks!

target 'TestPodDemo' do

pod ‘O2View’

end

執(zhí)行:

pod install

我們得到如下提示:

Updating local specs repositories
Analyzing dependencies
[!] Unable to find a specification for `O2View`

[!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes in your editor of choice.

找不到 O2View 旺上? 額- -宣吱!洒试。。垒棋。剛才 search 明明可以找到這個依賴庫的叼架,為什么現在找不到了呢?

別著急!其實原因是你在 Podfile 中沒有指定路徑衣撬,當你執(zhí)行 pod install 的時候乖订,CocoaPods 默認只會在 master 下搜索,而我們的 spec 是存在我們私有的 O2Specs 目錄下的具练。所以解決方式很簡單乍构,就是引入搜索地址即可,在 Podfile 的頂部添加如下兩行代碼:

source 'https://github.com/CocoaPods/Specs.git'     #官方倉庫地址
source ‘https://github.com/marklin2012/O2Specs.git’     #私有倉庫地址

這里必須添加兩個地址扛点,默認情況下哥遮,你如果不添加 source ,系統(tǒng)會默認使用官方倉庫地址陵究,但是當你添加了 source 之后眠饮,系統(tǒng)就不會自動搜索官方地址,所以這兩句都必須添加铜邮,否則其他基于官方的依賴庫都不能使用了仪召。

再次執(zhí)行 pod install ,我們就可以看到很順利的安裝成功了:

Updating local specs repositories
Analyzing dependencies
Downloading dependencies
Using O2View (0.0.1)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

恭喜松蒜!這樣一來我們就可以使用這個私有庫了扔茅!

發(fā)布穩(wěn)定的依賴庫版本

前面我們提到過,我們的這個實例依賴庫 O2View 沒有生成穩(wěn)定的 release 版本秸苗。當我們調試完內容之后召娜,一般都是要發(fā)布穩(wěn)定版本的,更新之后再繼續(xù)發(fā)布新版本难述。我們可以使用命令行或者在 github 頁面手動生成萤晴,這里為了方便我們使用命令行吐句,首先在終端中 cd 到之前的依賴庫 O2View 的目錄中胁后,然后輸入如下命令:

git tag '0.0.1'
git push --tags
git push origin master

這樣我們就得到了一個穩(wěn)定的 release 版本 0.0.1

p8

這里我用的版本號是 0.0.1 基于研發(fā)版本,關于版本號的一些規(guī)范可以參考:語義化版本 2.0.0

對于我們的 podspec 文件嗦枢,我們也需要將 s.source 做一下小小的改動:

s.source       = { :git => "https://github.com/marklin2012/O2View.git", :tag => version }

這樣我們使用這個依賴庫的時候就能對應上版本號攀芯,并且知道在 github 中使用穩(wěn)定的 release 版本代碼。太棒了文虏!

最后只需要再重復 push 一下我們的 Podfile 就可以侣诺!

接下來做什么殖演?

好了,到這里我們已經完全掌握如何創(chuàng)建一個本地私有的 CocoaPods 了年鸳!我們完全可以把我們項目中得代碼拆出來好好的封裝一些 pods趴久, 好好使用這個黑魔法!

祝大家玩得愉快搔确!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末彼棍,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子膳算,更是在濱河造成了極大的恐慌座硕,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涕蜂,死亡現場離奇詭異华匾,居然都是意外死亡,警方通過查閱死者的電腦和手機机隙,發(fā)現死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門蜘拉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人有鹿,你說我怎么就攤上這事诸尽。” “怎么了印颤?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵您机,是天一觀的道長。 經常有香客問我年局,道長际看,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任矢否,我火速辦了婚禮仲闽,結果婚禮上,老公的妹妹穿的比我還像新娘僵朗。我一直安慰自己赖欣,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布验庙。 她就那樣靜靜地躺著顶吮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粪薛。 梳的紋絲不亂的頭發(fā)上悴了,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音,去河邊找鬼湃交。 笑死熟空,一個胖子當著我的面吹牛,可吹牛的內容都是我干的搞莺。 我是一名探鬼主播息罗,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼才沧!你這毒婦竟也來了阱当?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤糜工,失蹤者是張志新(化名)和其女友劉穎弊添,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體捌木,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡油坝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了刨裆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澈圈。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖帆啃,靈堂內的尸體忽然破棺而出瞬女,到底是詐尸還是另有隱情,我是刑警寧澤努潘,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布诽偷,位于F島的核電站,受9級特大地震影響疯坤,放射性物質發(fā)生泄漏报慕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一压怠、第九天 我趴在偏房一處隱蔽的房頂上張望眠冈。 院中可真熱鬧,春花似錦菌瘫、人聲如沸蜗顽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雇盖。三九已至,卻和暖如春宫患,著一層夾襖步出監(jiān)牢的瞬間刊懈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工娃闲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虚汛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓皇帮,卻偏偏與公主長得像卷哩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子属拾,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容