cocoaPods:公有庫私有庫

1、創建依賴庫

依賴庫說白了就是存放第三方代碼的庫,而 cocoapods 本質就是第三方庫維護和導入的便利性工具。依賴庫也叫 pod 庫,通常都是發佈在公共的代碼存放網站,上供別人下載和使用,好比 github 上的 AF、MJRefesh等。html

而公司中不少時候並不像泄露代碼,可是又須要使用組件化的框架,這個時候就會把本身的代碼發佈到私有倉庫上,這種 pod 庫通常稱爲私有庫。其本質和 AF、MJRefesh 等沒有任何區別,惟一的區別就是一個公開,一個不公開。ios

1.在git上建立工程

通常而言,依賴庫的創建能夠直接使用公開類服務器如github中的倉庫,也能夠是私有服務器,好比 gitlab。這裏使用 gitlab 做爲演示 git

建立依賴庫

2.使用git管理工程

直接使用sourceTree新增一個倉庫便可: github

使用sourceTree拉去依賴庫

3.將代碼上傳到依賴庫中

若是初始化中勾選使用readMe初始化,那麼工程中就有一個README.md文件; 這一步只須要將代碼賦值到改工程中提交便可,這裏以修改README.md文件作演示: 緩存

update

2、建立spec倉庫

spec 倉庫的概念至關於一個映射,能夠理解成商品的清單。由於 pod 庫會有不少,每一個 pod 庫都會有一個本身的代碼存放地址,若是想要導入不少 pod 庫,挨個在 podfile 上添加地址,這是不現實的,也很不方便。bash

spec 倉庫就是存放了全部的 pod 庫的代碼地址和信息,在使用特定的 pod 庫時,直接在這個倉庫中查找到其對應的代碼下載地址進行下載,並根據 pod 庫的一些配置信息進行相對應的配置,這些過程全都是自動化腳本實現的,關鍵文件有:podfile、spec文件、spec倉庫。服務器

咱們使用 cocoapods 時,第一次pod update時都會下載 spec 倉庫,倉庫很大,因此第一次會很慢。本質就是下載 github.com/CocoaPods/S… 中的內容到本地,並且在咱們電腦中能夠直接找到這個 spec 庫的內容,具體地址就不貼出來了,很方便就能找到。框架

1.在git上建立spec倉庫

這一步和上一步中建立依賴庫是同一個操做,只是 spec 庫的惟一做用就是用來存儲私有庫對應的spec。在pod時,source 須要設置spec對應的地址,也就是如今要建立的這個倉庫的地址。和共有庫(好比AF、SDWebimage等)的惟一區別就是共有庫的spec文件是存儲在cocoapod的master分支中的,私有庫的spec文件存儲在私有倉庫中; ide

specRepo

2.使用git管理spec倉庫

同理,使用sourceTree直接拉取,略。svn

3、依賴庫和spec庫的整合連接

1.依賴庫生成spec文件

初始化spec的命令:

pod spec create specName
複製代碼

create spec

2.spec文件的配置

基礎格式:

Pod::Spec.new do |s|
...
end
複製代碼

解釋: 將spec略縮成s來表達 步驟: 1.填寫基本信息(Spec Metadata)

s.name         = "XKQuote"
  s.version      = "0.0.1"
  s.summary      = "the summary of Spec."
  s.description  = "description of the Spec."
  s.homepage     = "http://EXAMPLE/XKQuote"
複製代碼

2.Author Metadata

s.author             = { "caoxk" => "289722789@qq.com" }
複製代碼

備註:這裏的做者和郵箱(聯繫方式)必須和下面的License保持一致 3.Spec License 格式:

s.license      = { :type => "MIT", :file => "LICENSE" }
複製代碼

通常使用MIT License:

create License(1)
create License(2)
建立完成後的樣式:
MIT License

備註:license能夠理解成一種版權信息,甚至能夠理解成就是一串單純的字符串,建立方法能夠直接建立空文件而後複製字符串,也能夠再gitlab上建立 4.Platform Specifics(平臺信息)

s.platform     = :ios, "8.0"

  # When using multiple platforms
  # s.ios.deployment_target = "5.0"
  # s.osx.deployment_target = "10.7"
  # s.watchos.deployment_target = "2.0"
  # s.tvos.deployment_target = "9.0"
複製代碼

5.Source Location(源地址)

s.source       = { :git => "http://EXAMPLE/XKQuote.git", :tag => "#{s.version}" }
複製代碼

所支持的key: :git => :tag, :branch, :commit, :submodules :svn => :folder, :tag, :revision :hg => :revision :http => :flatten, :type, :sha256, :sha1 其中,git、svn、hg、http是來源渠道。另外,"url地址",這個至關因而默認的key。 咱們例子中gitlab中依賴庫的地址便可填寫:

s.source       = { :git => "https://gitlab.com/caoxk289722789/xkquote", :tag => "#{s.version}" }
複製代碼

備註:

  • source和homePage沒有關係。homePage只是做者告訴讀者的一個非必要性信息(其實Metadata中最重要的幾個就是name、version、author)
  • s.version == s.version.to_s ??? 6.Source Code(很重要) 源文件選項,也就是告訴cocoapods你須要複製到項目中的文件有哪些 語法:
// 源文件(要拷貝的文件)
  s.source_files  = "Classes", "Classes/**/*.{h,m}"
  // 排除在外的文件
  s.exclude_files = "Classes/Exclude"
  // 頭文件(若是沒有則會暴露全部的頭文件,具體怎麼用還要再試試)
  s.public_header_files = "Classes/**/*.h"
複製代碼

例子: 文件的結構:

source file

寫法:

s.source_files  = "QLCrashGuardDemo/QLCrashGuardSupportFiles/**/*.{h,m}"
複製代碼

本例子中直接使用README來作演示:

image.png
寫法:

s.source_files  = "SourceFiles/*.{h,m}"
#s.exclude_files = "Classes/Exclude"
#s.public_header_files = "Classes/**/*.h"
複製代碼

備註: *:表示全部格式的文件 7.Resources 主要是添加資源文件,好比圖片等 8.Project Linking 主要是添加framework 9.Project Settings(重點) 主要是添加依賴

3.驗證spec文件

命令:

pod spec lint(須要在對應的路徑下運行)
複製代碼

如圖:

image.png
驗證後的警告能夠不修改,報錯是必須修改的,按照提示修改報錯知道驗證經過便可; 經過後的樣式:
image.png

備註 1.添加tag時,要推送到遠端,否則仍然找不到和version對應的tag 2.及時推送了tag,有時候多是緩存的緣由讓然會致使更新不及時,此時新增一個全新的tag再驗證便可

按照模板填寫便可 官方文檔:guides.cocoapods.org/syntax/pods… 幾個重點地方:

4.添加spec倉庫到本地

這一步就是下載spec倉庫到本地,至關於第一次 pod update時,cocoapods會自動下載github.com/CocoaPods/S… 的內容到本地,這一次是咱們本身手動下載咱們本身的 spec 索引到本地。

命令:

pod repo add specFileName(spec倉庫的名稱) spec(倉庫的地址)
複製代碼

image.png

5.將依賴庫的spec文件push到spec倉庫

本地有了 spec 索引,可是其實這個 spec 索引中尚未咱們即將使用到的私有庫的信息,也就是沒有源代碼的下載地址,這個時候須要把咱們私有庫的 podspec 文件 push 到 spec 庫中,從而創建索引,這樣咱們 pod 的時候就能夠先去 spec 庫中找到這個私有庫,而後提取裏面存儲的私有庫的 podspec 文件,利用文件中的 source 地址下載源碼,而且根據 podspec 文件中的配置命令對源碼和工程進行相應的配置,這樣就大功告成,可使用咱們本身的私有庫了。

命令以下:

pod repo push XKQuote(spec repo的名稱) XKQuote.podspec(spec文件名)
複製代碼

添加並push以後會見到以下效果:

image.png

這裏說一下,若是是直接 push 到公有庫,也就是 github 上的 cocopods 的spec 倉庫,直接使用 trunk 命令便可,以下:

pod trunk push XXX.podspec
複製代碼

4、在項目中導入依賴庫

pod

備註: 1.須要添加對應spec repo的地址,否則會找不到對應的依賴庫 2.pod update以前要確保已經add了spec repo

pod成功的結果:

image.png

5、pod中使用本地路徑:

好比:

pod 'BaseBusiness', :path => '../../BaseBusiness'
複製代碼

幾個特性: 1.本地沒有spec repo都沒問題,依據的是本地path中對應的spec 2.spec不用每次都push,修改後立馬生效 3.直接使用本地的source_files中設置的文件,不拷貝,會創建索引,因此在工程中修改後會影響到源文件,若是有git,也會有git關聯,因此很適合開發階段來使用。

總結: cocoapod的本質是分爲兩個倉庫,確切的說分爲量種倉庫。能夠形象的理解成海港中有不少倉庫,一種是存儲貨物的倉庫,而在一個辦公室裏面,有一個關於這些貨物信息的清單。依賴庫至關於貨物倉庫,spec repo至關於清單倉庫。每次pod update,先根據source下載貨物清單,再根據pod xxx中具體須要哪一種貨物去清單找尋找對應的spec,瞭解這個貨物的信息和配置後再進行pod,其實pod的作了什麼操做,具體見下一章節 ios中的project、workspace、libary、framwork

更多文章
相關文章
相關標籤/搜索