制作 CocoaPods 依賴(lài)庫(kù)

學(xué)會(huì)使用別人的 Pods 依賴(lài)庫(kù)以后, 你一定對(duì)創(chuàng)建自己的依賴(lài)庫(kù)很有興趣吧,現(xiàn)在我們就來(lái)嘗試一下,以一個(gè)簡(jiǎn)單 O2View 為例自己創(chuàng)建一個(gè) Pods 依賴(lài)庫(kù),這里我會(huì)使用 Swift 2.0 來(lái)寫(xiě)這個(gè)例子。

1.創(chuàng)建自己的 github 倉(cāng)庫(kù)

CocoaPods 是托管在 github 上的,所有的 Pods 也都是托管在 github 上,因此我們首先需要?jiǎng)?chuàng)建一個(gè)屬于自己的 github 倉(cāng)庫(kù),如下圖所示:

p1

上圖中標(biāo)識(shí)出了6處地方

  1. Repository name: 倉(cāng)庫(kù)名稱(chēng),這里寫(xiě)上我們的依賴(lài)庫(kù)名字 O2View ,必填。
  2. Description: 倉(cāng)庫(kù)的描述信息,可選。
  3. Public or Private: 倉(cāng)庫(kù)的公開(kāi)性,開(kāi)源的話(huà)選 Public 。 如果是公司內(nèi)部使用的話(huà)這里推薦大家使用私有的倉(cāng)庫(kù),但是 github 的私有倉(cāng)庫(kù)是要收費(fèi)的 $7/month (壕請(qǐng)無(wú)視 - -?。?。大部分公司都是有自己的git服務(wù)器,不過(guò)一般只能在公司內(nèi)網(wǎng)使用,或者可以選擇Gitlab,Coding, Bitbucket任意一種。
  4. Initialize: 是否默認(rèn)創(chuàng)建一個(gè) README 文檔,一個(gè)完整的庫(kù)都會(huì)有這個(gè)說(shuō)明文檔,這里最好勾選一下。不過(guò)如果忘記的話(huà)也不要緊,后面手動(dòng)創(chuàng)建也是可以的。
  5. .gitignore: 忽略項(xiàng)文件,記錄一些想忽略的文件類(lèi)型,凡是該文件包含的文件類(lèi)型, git 都不會(huì)將其納入到版本管理中??葱枰x擇就行。
  6. license: 正規(guī)的倉(cāng)庫(kù)都有一個(gè) license 文件, Pods 依賴(lài)庫(kù)對(duì)這個(gè)文件要求比較嚴(yán)格,需要有這個(gè)文件。這里最好讓 github 自動(dòng)創(chuàng)建一個(gè),不過(guò)后續(xù)手動(dòng)創(chuàng)建也行。我們這次先使用 MIT 類(lèi)型的 license。

上面各項(xiàng)根據(jù)大家需要填寫(xiě)完畢后,點(diǎn)擊 Create repository 按鈕即可,創(chuàng)建成功后如下所示:

p2

2.clone 倉(cāng)庫(kù)到本地

為了方便向倉(cāng)庫(kù)中刪減內(nèi)容,需要將倉(cāng)庫(kù) clone 到本地,這里有多種操作方式,可以選擇你喜歡的一種,但是為了方便這邊選擇使用命令行。首先需要切換到你想在本地存儲(chǔ)的目錄,然后再 clone ,假設(shè)你放在用戶(hù)的根目錄上:

cd ~
git clone https://github.com/marklin2012/O2View.git

完成后,我們進(jìn)入到 ~/O2View 目錄中應(yīng)該可以看到目錄結(jié)構(gòu)如下:

|____LICENSE
|____README.md

其實(shí)還有一個(gè)隱藏的 .git 文件,后續(xù)我們的所有文件都在這個(gè)目錄底下進(jìn)行。

3.向本地倉(cāng)庫(kù)中添加創(chuàng)建 Pods 依賴(lài)庫(kù)所需的文件

1)主類(lèi)文件

創(chuàng)建 Pods 依賴(lài)庫(kù)就是為了方便別人使用我們的成果,比如我想共享給大家的O2View類(lèi),那這個(gè)類(lèi)自然必不可少,我們把這個(gè)類(lèi)放入一個(gè) O2View 的目錄中:

p3

順便看看 O2View.swift 主要內(nèi)容:

import UIKit

public class O2View: UIView {
    
    public override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = UIColor.redColor()
    }

    required public init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
}

2).podspec 文件

每個(gè) Pods 依賴(lài)庫(kù)必須有且僅有一個(gè)名稱(chēng)和依賴(lài)庫(kù)名保持一致,后綴名為 .podspec 的描述文件。這里我們依賴(lài)庫(kù)的描述文件名稱(chēng)應(yīng)該為 O2View.podspec

創(chuàng)建這個(gè)文件有兩種途徑:

  1. 復(fù)制已有的 podspec 文件然后修改對(duì)應(yīng)的參數(shù)。
  2. 執(zhí)行命令行創(chuàng)建。

我們使用命令行:

pod spec create O2View

創(chuàng)建出 O2View.podspec 文件后,我們打開(kāi)可以發(fā)現(xiàn),該文件是 ruby 文件,里面有很多的內(nèi)容,但是大多數(shù)都是我們不需要的,所以我們只需要根據(jù)項(xiàng)目的情況保留關(guān)鍵的一些內(nèi)容就行:

Pod::Spec.new do |s|
  s.name         = "O2View"             #名稱(chēng)
  s.version      = "0.0.1"              #版本號(hào)
  s.summary      = "Just testing"       #簡(jiǎn)短介紹
  s.description  = <<-DESC
                    私有Pods測(cè)試
                    * Markdown 格式
                   DESC

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

  s.source       = { :git => "https://github.com/marklin2012/O2View.git" }
  ## 這里不支持ssh的地址,只支持HTTP和HTTPS,最好使用HTTPS
  ## 正常情況下我們會(huì)使用穩(wěn)定的tag版本來(lái)訪問(wèn),如果是在開(kāi)發(fā)測(cè)試的時(shí)候,不需要發(fā)布release版本,直接指向git地址使用
  ## 待測(cè)試通過(guò)完成后我們?cè)侔l(fā)布指定release版本,使用如下方式
  #s.source       = { :git => "http://EXAMPLE/O2View.git", :tag => version }
  
  s.platform     = :ios, "9.0"          #支持的平臺(tái)及版本,這里我們呢用swift,直接上9.0
  s.requires_arc = true                 #是否使用ARC

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

  s.frameworks = 'UIKit', 'QuartzCore', 'Foundation'    #所需的framework,多個(gè)用逗號(hào)隔開(kāi)
  s.module_name = 'O2View'              #模塊名稱(chēng)

  # s.dependency "JSONKit", "~> 1.4"    #依賴(lài)關(guān)系,該項(xiàng)目所依賴(lài)的其他庫(kù),如果有多個(gè)可以寫(xiě)多個(gè) s.dependency

end

3)Demo 工程

為了快速教會(huì)別人使用我們的 Pods 依賴(lài)庫(kù),通常需要提供一個(gè) demo 工程。我們創(chuàng)建了一個(gè)名為 O2ViewDemo 的工程來(lái)演示 O2View 的使用,如下圖所示:

p4

4)README.md

使用 github 的人應(yīng)該都熟悉這個(gè)文件,它使一個(gè)成功的 github 倉(cāng)庫(kù)必不可少的一部分,使用 markdown 對(duì)倉(cāng)庫(kù)進(jìn)行詳細(xì)說(shuō)明。

5)LICENSE 文件

CocoaPods 強(qiáng)制要求所有的 Pods 依賴(lài)庫(kù)都必須有 license 文件,否則驗(yàn)證不會(huì)通過(guò)。 license 文件有很多中,詳情可以參考 tldrlegal。前面我們已經(jīng)選擇創(chuàng)建了一個(gè) MIT 類(lèi)型的 license。

以上的5個(gè)文件是創(chuàng)建 Pods 依賴(lài)庫(kù)所需的基礎(chǔ)文件,當(dāng)然 Demo 工程沒(méi)有添加也沒(méi)關(guān)系。添加完這些內(nèi)容后,我們本地倉(cāng)庫(kù)目錄就變成這個(gè)樣子:

p5

4.提交修改到 github

經(jīng)過(guò)前面步驟,我們已將在本地的 git 倉(cāng)庫(kù)添加了不少文件,現(xiàn)在我們只要將他們提交到 github 上就可以。在此之前我們需要對(duì)剛才添加的 pod 進(jìn)行一下驗(yàn)證:

pod lib lint

運(yùn)行之后可能會(huì)得到下面的警告:

 -> 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.

由于我們現(xiàn)在還沒(méi)有正式生成 release 版本, github 上并沒(méi)有任何 tag,所以我們剛才填寫(xiě) .podspec 文件填寫(xiě) git 地址的時(shí)候沒(méi)有填寫(xiě)指定 tag (上面文件的注釋中有提到),解決方法我們可以先執(zhí)行忽略警告的命令:

pod lib lint --allow-warnings

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

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

O2View passed validation.

當(dāng)調(diào)試完成了之后,我們需要在 github 上把我們的代碼生成相應(yīng)穩(wěn)定的 release 版本,到時(shí)候我們?cè)倩貋?lái)添加指定 tag 發(fā)布就 Ok 了。

驗(yàn)證成功之后,我們只要把代碼提交到 github 倉(cāng)庫(kù),就可以了,參考命令:

git add -A && git commit -m "add pod files"

git push origin master

這里主要是 git 的范疇,不做過(guò)多敘述。如果前面操作都沒(méi)有問(wèn)題的話(huà),github 上應(yīng)該能看到類(lèi)似如下內(nèi)容:

p6

5.接下來(lái)做什么?

經(jīng)過(guò)前面的步驟,我們的 CocoaPods 依賴(lài)庫(kù)就已經(jīng)準(zhǔn)備好了,但是現(xiàn)在你還不能在你的工程中使用它。如果你想成為一個(gè)真正可用的依賴(lài)庫(kù),還需要最后一步操作:將剛才生產(chǎn)的 podspec 文件提交到 官方的 CocoaPods Specs 中。

沒(méi)錯(cuò),我們平時(shí)用的能用 pod search 搜到的依賴(lài)庫(kù)都會(huì)把它上傳到這個(gè)倉(cāng)庫(kù)中, 也就是說(shuō)只有將我們的 podspec 文件上傳到這里,才能成為一個(gè)真正的依賴(lài)庫(kù),別人才能用!

按照 github 的規(guī)則,要想向別人的庫(kù)中添加文件,就要先 fork 別人的倉(cāng)庫(kù),做相應(yīng)的修改,再 pullrequest 給倉(cāng)庫(kù)的原作者,等到作者審核通過(guò),進(jìn)行 meger 之后就可以了!

流程大概就是這個(gè)樣子,具體可以參考:CocoaPods Guides,我們就先不展開(kāi)詳細(xì)的敘述了(后面會(huì)添加關(guān)于這部分的文章)。

除了官方的 specs 之外,我們還可以把 podspec 文件提交到私有的倉(cāng)庫(kù)中,詳見(jiàn)我們博客的另一篇文章:創(chuàng)建私有的 CocoaPods repo spec 。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容