認識公有庫和私有庫
- 公有庫:開源自己封裝的庫供別人使用,且往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,依次回答終端問題。
設定完成後終端會輸出
成功後會建立出一個pod_test工程,目錄結構如下:
- 3.新增庫檔案。
將編寫好的庫檔案拉入pod_test/classes中,刪掉ReplaceMe.m檔案。
然後cd Example資料夾下,終端執行pod install或pod update,目錄結構如下:
開啟pod_test.xcworkspace,其Pod目錄的虛擬目錄Development Pods/pod_test下就有庫檔案了。
- 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的內容如下:
關於欄位的含義:
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完成。
後續操作產生公有庫
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