CocoaPods 創(chuàng)建自己的公開庫

年底了可支配的時間逐漸變多了...不愛寫文章的我...也出來遛遛...

在這里用一個自己在項目中編寫的小工具來演示向CocoaPods發(fā)布自己的庫,假設(shè)您已對【git】和【cocoapods】略知一二
操作環(huán)境:Macbook OSX Catalina 10.15.2 (19C57)

一個用于發(fā)送POST、GET請求的簡單網(wǎng)絡(luò)代理協(xié)議:RC_NetworkProxy

一、注冊CocoaPods認證信息

要公開發(fā)布Pod庫需要向CocoaPods trunk注冊身份(設(shè)備)認證信息
pod trunk register your-email@xx.com 'username' --description='some description'

  • 郵箱:要替換成自己的郵箱
  • 用戶名:可以寫github的用戶名或其它
  • 填寫無誤注冊后郵箱會收到一個驗證鏈接,點擊鏈接進行確認:
    https://trunk.cocoapods.org/sessions/verify/xxxxx
  • 注冊成功后,終端輸入命令即可查看自己的注冊信息:pod trunk me

注冊信息
- Name: 注冊用戶
- Email: 注冊郵箱
- Since: 注冊時間
- Pods:
- RC_NetworkProxy ... 你的提交過的pods
- Sessions:
- 有效日期,注冊ip地址,注冊時輸入的‘description’

二、創(chuàng)建自己的Pod庫

  • 先在Github上創(chuàng)建一個倉庫然后克隆到本地,也可以在本地添加遠程倉庫然后推送到Github
  • LICENSE文件是必須的
  • README文件也是必不可少,你應(yīng)該知道它的作用是什么

2.1 新建倉庫

  1. 在Github上新建一個倉庫:RC_NetworkProxy
  2. 克隆倉庫到本地:git clone https://github.com/Hymn-RoyCHANG/RC_NetworkProxy.git 這里使用的是Https的方式克隆,你也可以使用SSH方式

2.2 創(chuàng)建Pod

克隆下來后進入'RC_NetworkProxy'目錄,然后執(zhí)行:
pod spec create RC_NetworkProxy
目錄下會生成 RC_NetworkProxy.podspec文件,然后編輯該文件,我用的Sublime Text編輯的。
(如果使用pod lib create RC_NetworkProxy會根據(jù)pod模板生成一個目錄結(jié)構(gòu)包括、源碼、示例、測試等目錄,這里不做介紹)

2.2.1. 添加源碼文件

源碼工程在其它project編寫,所有這里直接把源碼目錄粘貼過來,后續(xù)可以集成到倉庫里這樣更方便。

當前目錄結(jié)構(gòu)如下:

RC_NetworkProxy
├── LICENSE
├── RC_NetworkProxy
│   ├── RC_NetworkProtocol_Help
│   │   ├── RC_HTTPRequest.h
│   │   ├── RC_HTTPRequest.m
│   │   ├── RC_HTTPResponse.h
│   │   ├── RC_HTTPResponse.m
│   │   ├── RC_JSON.h
│   │   ├── RC_JSON.m
│   │   ├── RC_NetworkProtocol.h
│   │   ├── RC_NetworkProtocol.m
│   │   ├── RC_NetworkProtocol_Help.h
│   │   ├── RC_NetworkProxyDefines.h
│   │   └── RC_NetworkProxyDefines.m
│   ├── RC_NetworkProtocol_Imp
│   │   ├── RC_NetworkProtocol_Imp.h
│   │   └── RC_NetworkProtocol_Imp.m
│   ├── RC_NetworkProxy.h
│   └── RC_NetworkProxy.m
├── RC_NetworkProxy.podspec
└── README.md

隱藏的目錄還有.git、.gitignore

2.2.2 編輯podspec文件

'podspec'文件包含了Pod庫的名字、版本、作者、描述、資源文件、支持平臺版本、依賴庫、許可文件等屬性信息。
其中下面的屬性是必須的:
name:庫名稱
version:版本,必須與倉庫的tag對應(yīng)
author:作者,名字,郵箱等
license:許可文件
homepage:庫的主頁,如果Github上的主頁
source:倉庫的遠程地址,install是這里下載,包括,標簽,分支等
summary:對庫的簡短的描述,最大140個字符

查看podspec文件更多屬性、更多寫法

來個示例:

Pod::Spec.new do |spec|
  spec.name = 'RC_NetworkProxy'
  spec.version = '0.1.5'
  spec.ios.deployment_target = '8.0'
  # 倉庫主頁
  spec.homepage = 'https://github.com/Hymn-RoyCHANG/RC_NetworkProxy'
  spec.license = 'MIT'
  # 作者,可以多個
  spec.authors = { 'your name' => 'email@xxx.com' }
  # install時會根據(jù)git地址和指定的tag去下載代碼
  spec.source = { 
                  :git => 'https://github.com/Hymn-RoyCHANG/RC_NetworkProxy.git', 
                  :tag => spec.version
                }
  spec.summary = 'RC_NetworkProxy is a simple network proxy protocol for sending POST and GET etc.'
  # 源文件,把所有要依賴的文件導(dǎo)入進來,這個是物理路徑也就是podspec文件的同級目錄開始查找,可以使用通配符來檢索
  spec.source_files  = 'RC_NetworkProxy/*.{h,m}'
  # 只支持 ARC
  spec.requires_arc = true
  # 依賴的系統(tǒng)框架
  spec.frameworks  = 'Foundation'
  
  # 常用的 AFNetworking install下來你會發(fā)現(xiàn)有子目錄,就是通過‘subspec’來實現(xiàn)的
  spec.subspec 'RC_NetworkProtocol_Help' do |shelp|
    # 源文件
    shelp.source_files = 'RC_NetworkProxy/RC_NetworkProtocol_Help/*.{h,m}'
  end
  
  spec.subspec 'RC_NetworkProtocol_Imp' do |simp|
    # 這個是外部資源依賴,有多個依賴就要寫多個‘dependency’
    simp.ios.dependency 'AFNetworking', '~> 3.2.1'
    # 這個是依賴的Spec內(nèi)部的子Spec,這個不是物理路徑,相當于內(nèi)部的引用,‘RC_NetworkProxy’ 下的 ‘RC_NetworkProtocol_Help’
    simp.ios.dependency 'RC_NetworkProxy/RC_NetworkProtocol_Help'

    simp.source_files = 'RC_NetworkProxy/RC_NetworkProtocol_Imp/*.{h,m}'
  end
end
  • 如果不引入‘subspec’,那么所有‘ spec.source_files’引入的文件在pod install后將全部放入同一個文件夾‘RC_NetworkProxy’下,對于有潔癖的人來說是無法接受的
  • 如果使用了‘subspec’就要保證所有‘subspec’不能互相依賴否則無法通過驗證也無法提交的,在設(shè)計編寫代碼時要注意。比如:
    shelp.dependency 'RC_NetworkProxy/RC_NetworkProtocol_Imp'
    simp.dependency 'RC_NetworkProxy/RC_NetworkProtocol_Help'
    --------
    這種互相依賴的情況就會報錯:
    - ERROR | [iOS] unknown: Encountered an unknown error (There is a circular dependency between RC_NetworkProxy/RC_NetworkProtocol_Imp and RC_NetworkProxy/RC_NetworkProtocol_Help) during validation.
  • 針對‘podspec’的編寫可以參考其它倉庫的編寫,比如'AFNetworking'、'SDWebImage'等
  • 官方建議把沒用的注釋都去掉

2.3 提交到遠程倉庫

到這里準備的差不多了,將本地倉庫目錄下的所有文件推送的遠程:

  1. 在提交前git需要知道提交人的信息:nameemail
    如果沒有設(shè)置的話需要設(shè)置一下:
  • git config --local user.name 'xxxx'
  • git config --local user.email 'xxx@xxx.com'
    這是針對當前git倉庫的設(shè)置,如果是全局設(shè)置則 將 '--local' 換成 '--global'
  1. 提交文件、打版本:
  • pod add .
  • pod commit -m "your description"
  • git push -u origin master (本地只有master也可以直接推送:git push
  • git tag 0.1.0,一定要打個tag且要和'podspec'文件中的'version'對應(yīng)
  • git push origin 0.1.0,將tag推送到遠程(推送所有tag:git push --tags

如果不是克隆倉庫到本地則在'push'到遠程倉庫之前需要把本地和遠程關(guān)聯(lián)在一起:git remote add origin https://github.com/Hymn-RoyCHANG/RC_NetworkProxy.git
然后再'push'和打標簽

2.4 驗證podspec文件

驗證有兩種方式:

  • pod lib lint 本地驗證不會聯(lián)網(wǎng)
  • pod spec lint 本地和遠程驗證,會聯(lián)網(wǎng)

我們是發(fā)布自己的庫到CocoaPods所以使用第二種方式:
pod spec lint RC_NetworkProxy.podspec --allow-warnings --verbose

如果出現(xiàn)podspec的警告或者錯誤則無法通過驗證

  • --allow-warnings:忽略所有警告
  • --verbose:驗證時的詳細信息,如果有錯誤或者警告會更方便查明原因

如果驗證通過則打印如下:

RC_NetworkProxy.podspec passed validation.

三、發(fā)布Pod庫到CocoaPods

提交所有文件到遠程倉庫、打好tag和驗證無誤后將我們的庫提交給'CocoaPods'
pod trunk push RC_NetworkProxy.podspec
等待一段時間...

Updating spec repo `trunk`

--------------------------------------------------------------------------------
 ??  Congrats

 ??  RC_NetworkProxy (0.1.5) successfully published
 ??  January 9th, 20:43
 ??  https://cocoapods.org/pods/RC_NetworkProxy
 ??  Tell your friends!
--------------------------------------------------------------------------------

看到這段文字就說明成功了~~~

如果驗證通過,提交報錯則要看當前的'podspec'文件設(shè)置的版本是不是和之前提交的版本有沖突,如果不是版本問題可以在提交時加上參數(shù)選項查看細節(jié):
pod trunk push RC_NetworkProxy.podspec --allow-warnings --verbose

四、Pod搜索不到

  • 提交成功后如果搜索不到,需要執(zhí)行:
    git repo update
  • 如果緩存索引的問題需要刪除該索引:
    rm -f ~/Library/Caches/CocoaPods/search_index.json

搜索:
pod search RC_NetworkProxy

-> RC_NetworkProxy (0.1.5)
   RC_NetworkProxy is a simple network proxy protocol for sending POST and GET etc.
   pod 'RC_NetworkProxy', '~> 0.1.5'
   - Homepage: https://github.com/Hymn-RoyCHANG/RC_NetworkProxy
   - Source:   https://github.com/Hymn-RoyCHANG/RC_NetworkProxy.git
   - Versions: 0.1.5, 0.1.4, 0.1.3, 0.1.2, 0.1.1, 0.1.0 [trunk repo]
   - Subspecs:
     - RC_NetworkProxy/RC_NetworkProtocol_Help (0.1.5)
     - RC_NetworkProxy/RC_NetworkProtocol_Imp (0.1.5)

五、到這里就完了嗎?

......???

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

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