公共 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
)
可以看到上圖吨艇, .cocoapods 目錄下的 repos 其實是 repository (倉庫)的縮寫苍柏。 repos 中存放的時倉庫的集合画切。這里的 master 就是 CocoaPods 官方建立的倉庫,也就是我們所謂的公共庫长踊。
specs 目錄下存放的就是所有提交到 CocoaPods 的開源庫的 podspec 文件的集合功舀。
其結構如下圖所示:
其組成方式:
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)建為例:
如圖所示赡矢,我們在 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 地址,不過這樣有可能失敗耸棒。如果失敗荒澡,很大因素是你 github 的 ssh 在本地沒有配置好,配置方法可以看這里:Generating SSH keys与殃,成功后可以看得到 .cocoapods 目錄如下圖所示:
至此单山,我們已經在本地得到我們自己的私有倉庫 O2Specs ,這是一個空的倉庫幅疼。
2.添加私有的 Repo 安裝到你的 CocoaPods 中
這個步驟需要我們事先完成 CocoaPods 依賴庫的搭建米奸,具體可以查看我們另外一篇教程:制作 CocoaPods 依賴庫。如果這里你想先看看效果爽篷,也可以直接從 github 上 clone 示例工程繼續(xù)下面的操作悴晰。
讓我們進入到上面 clone 的示例工程目錄中(或者你自己搭建的依賴庫目錄中):
打開工程的 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ā)生了變化:
同時,我們還發(fā)現(xiàn) O2Specs 的 github 倉庫也已經發(fā)生了變化:
按照平時使用 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:
這里我用的版本號是 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须蜗, 好好使用這個黑魔法!
祝大家玩得愉快!