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

原文
如何創(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)

pp1.jpeg

可以看到上圖吨艇, .cocoapods 目錄下的 repos 其實是 repository (倉庫)的縮寫苍柏。 repos 中存放的時倉庫的集合画切。這里的 master 就是 CocoaPods 官方建立的倉庫,也就是我們所謂的公共庫长踊。

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

pp2.jpeg

其組成方式:

specName -- version -- specName.podspec

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

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

上述是官方的 repo 瘫絮,私有庫的話可以看下我們前面的翻譯或者查看官方文檔涨冀,但是官方文檔有一些過程寫的不是特別詳細,自己實現(xiàn)的時候遇到了一些坑麦萤,特此梳理一下過程鹿鳖,按照官方文檔內容實現(xiàn)一個私有的 spec repo 扁眯。根據(jù)官方的原理,我們只需要創(chuàng)建一個和 master 相類似結構的目錄就可以實現(xiàn)私有的 spec repo翅帜,當然你可以 fork 一個官方的 repo姻檀,但是它包含了太多沒有必要地庫在里面,這在編譯倉庫的時候需要浪費大量的時間涝滴,所以我們只要自己重新創(chuàng)建一個就可以了绣版。

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

在你的 git 服務器上創(chuàng)建一個 repo。這里你可以在 github 或者你自己的 git 服務器上實現(xiàn)歼疮。公司內部使用的話這里推薦大家使用私有的倉庫,但是 github 的私有倉庫是要收費的 $7/month (壕請無視 - -T映椤)。大部分公司都是有自己的git服務器韩脏,不過一般只能在公司內網使用缩麸,或者可以選擇Gitlab,Coding, Bitbucket任意一種。我們以在 github 上創(chuàng)建為例:

pp3.jpeg

如圖所示赡矢,我們在 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 目錄如下圖所示:

pp4.jpeg

至此单山,我們已經在本地得到我們自己的私有倉庫 O2Specs ,這是一個空的倉庫幅疼。

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

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

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

pp5.jpeg

打開工程的 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 文件,這是我們事先已經實現(xiàn)好的依賴庫的 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

如果成功會出現(xiàn)如下輸出:

 -> 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ā)生了變化:

pp6.jpeg

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

pp7.jpeg

按照平時使用 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 明明可以找到這個依賴庫的咕村,為什么現(xiàn)在找不到了呢?

別著急!其實原因是你在 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

pp8.jpeg

這里我用的版本號是 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须蜗, 好好使用這個黑魔法!

祝大家玩得愉快!

參考文章:
如何創(chuàng)建私有 CocoaPods 倉庫

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末明肮,一起剝皮案震驚了整個濱河市菱农,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柿估,老刑警劉巖循未,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秫舌,居然都是意外死亡的妖,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門足陨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫂粟,“玉大人,你說我怎么就攤上這事墨缘⌒呛纾” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵镊讼,是天一觀的道長宽涌。 經常有香客問我,道長狠毯,這世上最難降的妖魔是什么护糖? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任褥芒,我火速辦了婚禮嚼松,結果婚禮上,老公的妹妹穿的比我還像新娘锰扶。我一直安慰自己献酗,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布坷牛。 她就那樣靜靜地躺著罕偎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪京闰。 梳的紋絲不亂的頭發(fā)上颜及,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音蹂楣,去河邊找鬼俏站。 笑死,一個胖子當著我的面吹牛痊土,可吹牛的內容都是我干的肄扎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼犯祠!你這毒婦竟也來了旭等?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤衡载,失蹤者是張志新(化名)和其女友劉穎搔耕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體月劈,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡度迂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了猜揪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惭墓。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖而姐,靈堂內的尸體忽然破棺而出腊凶,到底是詐尸還是另有隱情,我是刑警寧澤拴念,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布钧萍,位于F島的核電站,受9級特大地震影響政鼠,放射性物質發(fā)生泄漏风瘦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一公般、第九天 我趴在偏房一處隱蔽的房頂上張望万搔。 院中可真熱鬧,春花似錦官帘、人聲如沸瞬雹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酗捌。三九已至,卻和暖如春涌哲,著一層夾襖步出監(jiān)牢的瞬間胖缤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工阀圾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哪廓,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓稍刀,卻偏偏與公主長得像撩独,于是被迫代替她去往敵國和親敞曹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容