建立私有cocoapods repo庫 —— Private Pods
CocoaPods不僅是一個將開原始碼新增到專案的很棒的工具,同時也可以做到跨專案分享元件。你使用一個私有的Spec Repo就能做到這些。
只需要幾個簡單步驟就能給你的專案做好一個私有的pods設定:首先為這些pods建立一個程式碼倉庫,然後讓Cocoapods知道在哪裡能找到它,然後新增這些podspecs檔案到這個程式碼倉庫。
使用步驟
Create a Private Spec Repo
如果你需要使用自己的一些pods庫的集合的話,建議你建立私有的spec repo,一個只有你們的這些庫的使用者才能訪問到的私有庫。
你不需要fork Cocoapods/Specs主repo,只需要確認你們的團隊成員都可以正常訪問就行,沒有公開的必要。新增你的私有Repo到你的CocoaPods
$ pod repo add REPO_NAME SOURCE_URL
注意:在你建立本地pods庫的時候,需要檢查你推送到源地址的許可權。
你可以使用下面兩條指令去檢查你的安裝是否完成:
$ cd ~/.cocoapods/repos/REPO_NAME $ pod repo lint .
新增你的Podspec到你的repo
確認你打了適當的tag和version標記,然後執行:$ pod repo push REPO_NAME SPEC_NAME.podspec
執行這個命令的時候,會執行對.podspec檔案的語法檢查,請注意你的podspec檔案配置細節部分。
你的repo的結構應該像下面一樣:. ├── Specs └── [SPEC_NAME] └── [VERSION] └── [SPEC_NAME].podspec
在工程中使用私有repo
私有repo的使用和官方庫一樣,也是基於Podfile的,你可以在你工程的Podfile檔案中指定spec倉庫源地址就可以了:source 'URL_TO_REPOSITORY'
使用示範
建立一個私有的Spec Repo庫
$ cd /opt/git $ mkdir Specs.git $ cd Specs.git $ git init --bare
新增repo到你的CocoaPods
$ pod repo add artsy-specs [email protected]: artsy/Specs.git
檢查安裝是否成功:
$ cd ~/.cocoapods/repos/artsy-specs $ pod repo lint .
新增Podspec到repo
建立Podspeccd ~/Desktop touch Artsy+OSSUIFonts.podspec
Artsy+OSSUIFonts.podspec檔案內容大致如下:
Pod::Spec.new do |s| s.name = "Artsy+OSSUIFonts" s.version = "1.1.1" s.summary = "The open source fonts for Artsy apps + UIFont categories." s.homepage = "https://github.com/artsy/Artsy-OSSUIFonts" s.license = 'Code is MIT, then custom font licenses.' s.author = { "Orta" => "[email protected]" } s.source = { :git => "https://github.com/artsy/Artsy-OSSUIFonts.git", :tag => s.version } s.social_media_url = 'https://twitter.com/artsy' s.platform = :ios, '7.0' s.requires_arc = true s.source_files = 'Pod/Classes' s.resources = 'Pod/Assets/*' s.frameworks = 'UIKit', 'CoreText' s.module_name = 'Artsy_UIFonts' end
儲存Podspec並推送到repo
pod repo push artsy-specs ~/Desktop/Artsy+OSSUIFonts.podspec
如果你的Podspec可用,它就可以被成功新增到repo。你的repo看起來就會變成這樣:
. ├── Specs └── Artsy+OSSUIFonts └── 1.1.1 └── Artsy+OSSUIFonts.podspec
你可以參看這個Podfile的例子去新增自己的repo。
移除私有Repo
$pod repo remove [name]