CocoaPods|自定義Pod的發(fā)布和使用

Version

Time Version Description
2020-03-30 0.0.1 初版提交
image-20210330092354599.png

Preface

pod的原義是豆莢,cocoa原義是可可豆.所以CocoaPods的本義就是很多的可可豆的豆莢,也就是幫助我們管理可可豆豆莢的意思.

一個App可以看做是一份炒青豆,里面包含了很多的豆子,是將豆子有效管理起來,形成的一個藝術(shù)品.

所以,一個pod,就是一個豆子,一個組件,他實現(xiàn)的是一個基本的功能.更重要的是,具有復用性.我們創(chuàng)造出一個pod,就可以在其他app中隨時使用,提高我們的效率,而不是在每個app中反反復復造一樣的組件.

你能管理好的組件越多,你就能實現(xiàn)更多的功能,開發(fā)出更有用的app.

管理好自己的組件,是一個真正的碼者必須掌握的技能,而對于iOS開發(fā),幫助我們管理組件的工具,就是CocoaPods.

1 本文目標

二維碼,QuickResponseCode,簡稱QrCode,是日常生活中不可分割的一部分.

本文將創(chuàng)建一個簡單的二維碼工具,旨在闡述如何發(fā)布自己的組件(Pod),并在項目中使用.

記錄了3個Pod的發(fā)布過程,這三個pod,一個發(fā)布為公有Pod,一個發(fā)布為私有Pod,一個發(fā)布為開發(fā)Pod.

這三個pod為:

GaoQrCodeManager,將成為公有庫Pod,用來實現(xiàn)圖片和String的互相轉(zhuǎn)換.

GaoStdListViewController,將成為私有庫Pod,通用的列表展示頁面,這樣不用每次都寫一樣的列表頁面.

GaoGeometryManager,將成為本地的測試Pod,筆者喜歡用代碼進行布局,這個類是用來方便計算控件的frame的.

2 CocoaPods管理Pod的原理

1,組件.

即一個pod,實現(xiàn)了一個基本功能,代碼可以復用.

比如,AFNetworking,SDWebImage,就是比較出名的組件.

2,組件源代碼倉庫.

組件的源代碼需要發(fā)布到一個遠程的倉庫中,并且需要打好標記.

比如AFNetworking的組件源代碼倉庫,就是

https://github.com/AFNetworking/AFNetworking.git

3,項目App.

我們正在開發(fā)的App,需要引入一些組件來加快開發(fā)效率.

4,podspec文件.

是CocoaPods管理的核心文件.該文件記錄了組件的組件源代碼倉庫,使用的文件有哪些,使用的資源有哪些.

將podspec文件,發(fā)布到公有倉庫,則該pod成為公共倉庫

將podsepc文件,發(fā)布到私有倉庫,則該pod成為私有倉庫

將podspec文件,僅僅保存到本地,成為開發(fā)pod

5,本地PodSpec倉庫

6,遠程Podspec倉庫

7,podfile文件.

指定了當前項目App需要依賴哪些組件以及對應的版本.

8,項目依賴組件.

項目App中依賴的所有組件.

9,安裝組件.

當我們首次安裝組件,或者有組件新增或者刪除時,我們使用命令pod install來讓項目依賴的組件進行更新.

10,更新組件.

當項目依賴組件的僅僅是版本有變化時,我們使用命令pod update來更新項目的組件.

3 發(fā)布開發(fā)Pod

3.1 將組件源代碼上傳到github

a,本地準備組件源代碼

b,在Github上新建存放組件源代碼的倉庫,勾選生成一個MIT文件.

c,將本地的源代碼文件夾上傳到遠程倉庫

# 初始化本地倉庫
git init

# 提交本地文件到本地倉庫
git add .
git commit . -m "first init"

# 關(guān)聯(lián)本地和遠程倉庫
git remote add origin https://github.com/GikkiAres/GaoGeometryMaster.git
# 本地master分支,關(guān)聯(lián)遠程的main分支
git branch --set-upstream-to=origin/main master
# 將遠程的ReadMe文件pull下來
git pull --allow-unrelated-histories
# 將本地的代碼提交到遠程
 git push -u origin master:main

d,打一個版本標簽

我這里打的最初版本標簽為0.0.1(0.0.0這樣的標簽驗證不通過,本來想用的...)

git tag 0.0.1
git push origin 0.0.1

3.2 創(chuàng)建podspec文件.

在組件源代碼目錄中,創(chuàng)建podspec文件,但是這個文件并不需要提交到遠程倉庫中.

pod spec create GaoGeometryManager

3.3 編寫podspec文件

編寫的規(guī)則這里不展開討論

3.4 驗證podspec文件

驗證pod文件是否ok

pod spec lint GaoGeometryManager.podspec --verbose

如果驗證不通過,則修改源代碼或者podspec文件直到通過驗證.

3.5 項目中使用開發(fā)pod

在項目的podfile中引入開發(fā)pod:

target 'GaoQrCodeDemoAlpha' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for Lib
   pod 'GaoGeometryManager', :path => '/Users/gikkiares/Desktop/MP_MyProject/MP06_MyLibProject/MP0601_iOS/29_ViewPosition/GaoGeometryManager/GaoGeometryManager_Master_Shared/GaoGeometryManager.podspec'

end

由于是開發(fā)Pod,需要指定本地podspec文件路徑

安裝組件

pod install
image-20210328113537325.png

可以看到,在Pods的DevelopmentPods中,已經(jīng)加入了我們的庫了.

4 發(fā)布私有Pod

前面的步驟和前面基本相同,只是在podspec文件處理的時候,需要上傳到自己的一個私有倉庫中去.

4.1 將組件源代碼上傳到github

a,本地準備組件源代碼

b,在Github上新建存放組件源代碼的倉庫,勾選生成一個MIT文件.

c,將本地的源代碼文件夾上傳到遠程倉庫

# 初始化本地倉庫
git init

# 提交本地文件到本地倉庫
git add .
git commit . -m "first init"

git branch -M main

# 關(guān)聯(lián)本地和遠程倉庫
git remote add origin https://github.com/GikkiAres/GaoStdListViewController.git
# 本地master分支,關(guān)聯(lián)遠程的main分支
git branch --set-upstream-to=origin/main master
# 將遠程的ReadMe文件pull下來
git pull --allow-unrelated-histories
# 將本地的代碼提交到遠程
 git push -u origin master:main

d,打一個版本標簽

我這里打的最初版本標簽為0.0.1(0.0.0這樣的標簽驗證不通過,本來想用的...)

git tag 0.0.1
git push origin 0.0.1

4.2 創(chuàng)建podspec文件.

在組件源代碼目錄中,創(chuàng)建podspec文件,但是這個文件并不需要提交到遠程倉庫中.

pod spec create GaoStdListViewController

4.3 編寫podspec文件

編寫的規(guī)則這里不展開討論

4.4 驗證podspec文件

驗證pod文件是否ok

pod spec lint GaoStdListViewController.podspec --verbose

如果驗證不通過,則修改源代碼或者podspec文件直到通過驗證.

4.5 建立pod私有倉庫

就是要里創(chuàng)建一個自己倉庫,用來存放podspec文件的.

直接在github建立一個倉庫就可以了.

我這里直接建立一個遠程倉庫:

https://github.com/GikkiAres/GaoRepo

遠程私有倉庫克隆到本地:

pod repo add GaoRepo https://github.com/GikkiAres/GaoRepo

4.6 將podspec文件推送到pod私有倉庫

所謂的私有,只是指podspec文件存放的倉庫,其遠端是自己的創(chuàng)建的倉庫,而非cocoapod官方的倉庫.

如果pod依賴了其他庫,需要添加--user-libraries

pod repo push GaoRepo GaoStdListViewController.podspec  --allow-warnings --verbose --use-libraries

這一步就是將podsepc文件,從本地上傳到了自己的pod私有倉庫.

image-20210329102047762.png

可以看到,我的私有倉庫中已經(jīng)多了這個庫.

另一方面,在私有倉庫的本地端中,也同步了這個庫:

image-20210329102427384.png

5 發(fā)布公有pod

發(fā)布公有pod的方法和發(fā)布私有的方法大致相同,只是最終podspec上傳的倉庫遠端,是cocopod的官方倉庫.

5.1 將組件源代碼上傳到github

a,本地準備組件源代碼

b,在Github上新建存放組件源代碼的倉庫,勾選生成一個MIT文件.

c,將本地的源代碼文件夾上傳到遠程倉庫

# 初始化本地倉庫
git init

# 提交本地文件到本地倉庫
git add .
# git commit . -m "first init"有什么區(qū)別?
git commit -m "first init"

git branch -M main

# 關(guān)聯(lián)本地和遠程倉庫
git remote add origin https://github.com/GikkiAres/GaoQrCodeManager.git
# 本地master分支,關(guān)聯(lián)遠程的main分支
git branch --set-upstream-to=origin/main main
# 將遠程的ReadMe文件pull下來
git pull --allow-unrelated-histories
# 將本地的代碼提交到遠程
 git push -u origin 

d,打一個版本標簽

我這里打的最初版本標簽為0.0.1(0.0.0這樣的標簽驗證不通過,本來想用的...)

git tag 0.0.1
git push origin 0.0.1

5.2 創(chuàng)建podspec文件.

在組件源代碼目錄中,創(chuàng)建podspec文件,但是這個文件并不需要提交到遠程倉庫中.

pod spec create GaoQrCodeManager

5.3 編寫podspec文件

編寫的規(guī)則這里不展開討論

5.4 驗證podspec文件

驗證pod文件是否ok

pod spec lint GaoQrCodeManager.podspec --verbose

如果驗證不通過,則修改源代碼或者podspec文件直到通過驗證.

5.5 將podspec文件推送到pod公有倉庫

pod公有倉庫地址是:

https://github.com/CocoaPods/Specs

我們使用以下命令提交到該倉庫:

pod trunk push GaoQrCodeManager.podspec  --allow-warnings --verbose

上傳成功的提示:

image-20210329110542566.png

上傳成功后,下面會顯示我們剛剛上傳了一個pod.

image-20210329110851274.png

他會提示我們一個地址:

https://raw.githubusercontent.com/CocoaPods/Specs/303a02ee2d00c1699e8d029b1673b8df9cddd6d5/Specs/4/9/3/GaoQrCodeManager/0.0.1/GaoQrCodeManager.podspec.json

我們根據(jù)后面的'Specs/4/9/3'可以在對應的目錄中找到我們的podspec文件.

image-20210329111032756.png

6 項目App安裝組件

a,編寫podfile文件

# 指定倉庫地址
source 'https://cdn.cocoapods.org'
source 'https://github.com/GikkiAres/GaoRepo'


target 'GaoQrCodeDemoAlpha' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for Lib
  # 開發(fā)Pod
  pod 'GaoGeometryManager', :path => '/Users/gikkiares/Desktop/MP_MyProject/MP06_MyLibProject/MP0601_iOS/29_ViewPosition/GaoGeometryManager/GaoGeometryManager_Master_Shared/GaoGeometryManager.podspec'
    # 私有Pod
    pod 'GaoStdListViewController'
    # 共用pod
    pod 'GaoQrCodeManager'
    
end

b,第一次安裝,以及導入組件的有改動時,使用命令pod install來更新安裝組件.

3,完成后,就可以使用了.

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

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

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