製作CocoaPods公有庫和私有庫

奔跑的鴻發表於2022-03-11

認識公有庫和私有庫

  • 公有庫:開源自己封裝的庫供別人使用,且往cocoaPods的官方Repo倉庫(即CocoaPods Master Repo)中新增自己庫的索引,該庫索引是以*.podspec.json檔案形式存在。
  • 私有庫:私有庫不在cocoaPods的官方Repo倉庫中,而是在自建的spec repo中,庫索引是以*.podspec檔案形式存在,自建的spec repo放在路徑~/.cocoapods/repos下,與master同級,其連結的遠端倉庫可以是公開的,也可以是私有的。

私有庫連結私有倉庫的例子:公司專案放在公司內網搭建的git伺服器中,有些功能在多個專案中都會用到,這就需要抽成庫。為了便於維護和升級,使用cocoaPods來管理。由於置於內網git伺服器中,這些庫只有在公司內網才能安裝。

私有庫連結公開倉庫的例子:阿里巴巴有一個叫阿里百川的開放平臺,提供了淘寶聯盟SDK,將SDK製作成了私有庫,整合在自建的阿里雲Repo倉庫中,這樣既能提供給其他開發者使用,又能避免混亂地釋出在cocoaPods的官方Repo倉庫中。

  • Spec Repo表示Repo倉庫(映象源),是集合所有公開庫的.podspec.json檔案(索引檔案)的git倉庫。
    當使用Cocoapods時它會被clone到本地的~/.cocoapods/repos目錄下,進入目錄後可以看到master資料夾,它就是官方的Spec Repo本地倉庫。
    因此建立CocoaPods私有庫就需要有類似master的私有Spec Repo,讓它關聯遠端git倉庫。

搭建私有庫和公有庫

  • 私有庫和公有庫前面搭建步驟是相同的,只在釋出時操作不同。
相同步驟
  • 1.github上新建空白專案pod_test。倉庫網址為https://github.com/xxx/pod_test,該倉庫連結我們的自定義庫pod_test。
  • 2.建立Pods工程。
    命令pod lib create pod_test,依次回答終端問題。
製作CocoaPods公有庫和私有庫

設定完成後終端會輸出

製作CocoaPods公有庫和私有庫

成功後會建立出一個pod_test工程,目錄結構如下:

製作CocoaPods公有庫和私有庫
  • 3.新增庫檔案。
    將編寫好的庫檔案拉入pod_test/classes中,刪掉ReplaceMe.m檔案。
    然後cd Example資料夾下,終端執行pod install或pod update,目錄結構如下:
製作CocoaPods公有庫和私有庫

開啟pod_test.xcworkspace,其Pod目錄的虛擬目錄Development Pods/pod_test下就有庫檔案了。

製作CocoaPods公有庫和私有庫
  • 4.提交pods庫到github上。
    由於pod lib建立pod_test工程時預設已經準備了LICENSE、README.md、.gitignore三個檔案,若在github上建立新建空白專案pod_test時勾選了這三個檔案,則git pull時會產生衝突。解決方式:將pod_test工程目錄下與github專案衝突的檔案刪除。
    此外,pod_test目錄下預設準備了.git倉庫,會影響與github倉庫的同步,刪除掉。
    cd到pod_test目錄下
git init
git remote add origin https://github.com/xxx/pod_test
git pull origin main
git add .
git commit -m "第一次提交專案" 
git push origin master:main
  • 5.配置Pods工程的.podspec檔案。主要是s.version、s.summary、s.source的編輯。
    pod_test.podspec的內容如下:
製作CocoaPods公有庫和私有庫

關於欄位的含義:

s.name :pod search 搜尋的關鍵詞,注意這裡一定要和.podspec的名稱一樣
s.version :版本號,每一個版本對應一個tag
s.summary : 簡介
s.homepage : 專案主頁地址
s.license : 許可證
s.author : 作者
s.social_media_url : 社交網址
s.source : 專案的地址
s.source_files : 需要包含的原始檔
s.resources: 資原始檔
s.requires_arc : 是否支援ARC
s.dependency :依賴庫
s.ios.deployment_target = '8.0' : 支援的pod最低版本

s.source_files = 'pod_test/Classes/**/*',這裡**表示匹配所有子目錄,*表示匹配所有檔案。

  • 6.打標籤,推送到遠端。
git add .
git commit -m '設定podspec檔案'
git push origin master:main     #提交到遠端倉庫
git tag 0.0.1    #這裡的版本號必須和podspec中的s.version值相同
git push --tags

tag必須要打上,CocoaPods進行倉庫版本管理時,就是通過.podspec檔案中s.version的值到git遠端倉庫上找與之相同的tag標籤的版本。
補充:

打tag時加註釋的寫法:git tag 0.0.1 -m '寫註釋'
檢視所有tag內容:git tag -l -n
  • 7.驗證.podspec檔案的格式是否正確,必須打完tag才能驗證。
    cd到pod_test目錄,執行命令
pod spec lint --allow-warnings 或
pod lib lint pod_test.podspec --allow-warnings

pod spec相對於pod lib會更為精確,pod lib相當於只驗證一個本地倉庫,pod spec會同時驗證本地倉庫和遠端倉庫。
終端列印"pod_test passed validation"即為驗證成功。
至此,算是搭建了本地的自定義庫,接下來發布階段的操作決定了最後是私有庫還是公有庫。

後續操作產生私有庫

8.建立私有的Spec Repo。
github上新建空白專案mySpecs,網址https://github.com/xxx/mySpecs.git,作為Repo倉庫,本地生成私有的Spec Repo工作目錄:

pod repo add mySpecs https://github.com/xxx/mySpecs.git

那麼在路徑~/.cocoapods/repos下就會有mySpecs本地倉庫。
9.把pod_test.podspec提交到自建的Spec Repo倉庫:

pod repo push mySpecs pod_test.podspec

之後mySpecs本地倉庫裡面多了pod_test庫的索引,同時會push同步到https://github.com/xxx/mySpecs.git。
至此,私有庫pod_test完成。

製作CocoaPods公有庫和私有庫

後續操作產生公有庫

8.把pod_test.podspec提交到官方Spec Repo倉庫:

pod trunk push pod_test.podspec --allow-warnings

若顯示"pod_test successfully published"就表示成功釋出到官方Spec Repo倉庫了。
若報錯沒有註冊CocoaPods賬號,則註冊一個,命令:

pod trunk register gitHub_email 'user_name' --verbose

然後到郵箱中收取郵件來點選驗證註冊,之後再執行一次pod trunk push pod_test.podspec --allow-warnings即可。
至此,公有庫pod_test完成。
提交之後cocoaPods官網更新會延遲,耐心等待半小時,然後將其更新到本地master spec repo:

pod repo update
rm ~/Library/Caches/CocoaPods/search_index.json
pod search pod_test    #重新下載search_index.json

相關文章