玩轉iOS開發《建立CocoaPods開發庫》

想了想, 發現本身很久都沒有寫新的文章了, 還有一些朋友跑過來講個人掘金很久沒更新了, 其實不是的, 我一直在維護並更新玩轉iOS開發:本身造的輪子《CLUIKit》玩轉iOS開發:本身造的輪子《CLFoundation》, 只是沒有文章的更新日期, 這個無法看到我更新文章而已, 但願掘金考慮考慮加上個更新時間~~git

請他喝杯星爸爸

若是您以爲挺讚的話, 能夠我喝杯星爸爸, 謝謝啦~github

支付寶

這段時間除了忙着作項目以外, 還有一件事就是製做CocoaPods庫, 這個東西雖然好用, 不研究還好, 一研究就會發現, 真的是.....json

真讓人頭大

搞了一兩天, 搜了N多個百度和谷歌, 也諮詢了不少大佬, 終於搗鼓出來了, 下面就直接上文章, 不那麼多廢話了.vim

建立podspec文件

使用終端找到須要建立CocoaPods開發庫的文件夾ide

cd Project文件夾
複製代碼

1

找到對應的路徑後, 再輸入建立podspec文件的命令post

pod spec create 庫名
複製代碼

2

編輯podspec文件

打開庫名.podspec文件以後, 咱們會看到不少對應的註釋, 按照我的喜歡, 選擇刪掉或者不刪掉, 這裏爲了演示選擇刪掉所有註釋.網站

3

這裏解釋一下各個參數:ui

  • name: 庫名, 必選
  • version: 版本號, 必選
  • summary: 庫的概要
  • description: 庫的描述, 可選
  • homepage: 庫的首頁, 可選
  • license: 開源協議, 若有開源協議必選
  • author: 做者, 必選, 詳情看文章後面的介紹
  • platform: 設置最低支持的系統版本號, 可選
  • source: 資源地址, 必選
  • source_files: 資源文件, 必選
  • exclude_files: 排除文件, 可選
  • requires_arc: 是不是ARC, 可選
  • frameworks: 須要關聯的系統Frameworks
  • dependency: 須要關聯的第三方庫

更詳細的能夠到CocoaPods網站去查詢spa

這裏咱們舉個例子, CLUIKit.podspec的寫法, 這裏只依賴了三個庫, MJRefresh, CLFoundationMasonry.3d

4

上面這種寫法比較適合單一的庫, 好比MJRefresh, CLFoundationMasonry這類型的, 但若是咱們須要拆分出幾個子模塊讓開發者去選擇, 這裏有兩種方案:

  • 開啓多一個Git倉庫, 分開來存儲
  • 經過編寫podspec文件的技巧拆分.

這裏咱們推薦第二種方案.

編寫podspec文件進階

這裏咱們能夠找到最經典的案例就是AFNetworking.podspec, 若是這個庫全都是咱們本身寫的, 那麼能夠參照着來寫:

5

6

但若是咱們是要依賴於第三方的庫或者是Framework, 那這裏可能就不適合了, 好比CLMapKit.podspec, 這裏依賴了GoogleMaps, 而且將來可能還會兼容其餘的地圖庫, 那麼咱們就必須拆分紅N個子模塊, 而且要針對來編寫:

7

  • **subspec: **子模塊的標籤, 名字可自定義
  • static_framework: 靜態庫標籤, 表示咱們依賴的Framework是靜態的.

這裏須要注意一點的就是source_files這個標籤, 在GoogleMap這個子模塊裏, 咱們的寫法要根據咱們的文件層級來編寫, 好比CLMapKit這個庫的GoogleMap模塊, 它的層級就是CLMapKit/GoogleMap/CLGoogleMapViewController, 最後纔到要共享的文件, 因此咱們在這裏要寫成圖上鎖顯示的那樣.

而且針對GoogleMap這個subspec寫上所依賴的庫:

  • dependency: GoogleMaps

若是咱們這個庫裏面須要.Bundle文件, 那咱們就須要加一個Resource標籤:

  • resource: Classese/BundleName.bundle

驗證podspec文件

當咱們寫好了podspec文件以後, 咱們就須要在本地驗證一下:

pod spec lint
複製代碼

8

這個時候咱們沒有看到有任何的error信息, 就已經ok了, 若是咱們不想要警告的話, 能夠帶上--allow-warnings這個關鍵詞.

發佈第三方庫

通過上面咱們的編寫, 以及驗證podspec文件以後, 咱們就能夠準備發佈咱們的庫了, 這裏咱們只講解如何發佈開源的庫, 私有的暫時不去研究先.

建立公共的Git倉庫

首先咱們須要去建立一個Git倉庫, 大多數老鐵選擇的是GitHub, 怎麼建立, 怎麼clone, 這裏就不解釋了, 咱們把代碼上傳上GitHub以後會有一個醬紫的界面:

9

全部代碼文件及podspec文件上傳了以後, 咱們就繼續下一步.

建立Git Tag

以前咱們解釋過在podspec有一個標籤叫作version, 這個標籤是用來標註pod庫的版本號, 這個版本號是不能重疊的, 這裏建議你們這個version版本號和Git Tag保持一致就行了.

在建立Git Tag以前, 咱們首先要去到咱們Clone下來的文件夾內, 而後利用命令建立, 建立Git Tag的命令:

git tag 版本號
複製代碼

建立完成後, 咱們須要把這個Git Tag推到GitHub上, 這個時候咱們須要用到Push命令:

git push origin --tags
複製代碼

切記, 在建立Git Tag以前必定要把全部操做都完成後再進行, 不然會形成Git Tag於內容不一樣步 .

刪除Git Tag

若是咱們須要刪掉本地的Git Tag的話, 咱們可使用刪除命令:

git tag -d 版本號
複製代碼

若是咱們是須要刪除遠程倉庫裏的Git Tag的話, 咱們可使用遠程刪除命令:

git push origin --delete 版本號
複製代碼

這樣子咱們就能夠刪除掉遠程倉庫的Git Tag了.

查詢Git Tag

若是咱們須要查詢已有的本地Git Tag, 那麼咱們可使用查詢命令:

git tag
複製代碼

10

若是咱們是須要查詢遠程倉庫的話, 咱們可使用查詢指定的分支去查看:

git show origin
複製代碼

11

暫時沒找到如何查看遠程倉庫Tag的命令, 只能用上面的方式了.

註冊CocoaPods

發佈前的最後一個操做就是註冊CocoaPods, 咱們可使用下面的命令去註冊:

pod trunk register 郵箱 '暱稱'
複製代碼

12

作完這個操做只有, 你的郵箱會收到一封郵件, 咱們打開了那個連接以後, 若是網站顯示了一張圖, 上面寫着You can go back to your terminal new., 那咱們就能夠繼續下一步操做, 發佈咱們的CocoaPods庫了.

13

發佈CocoaPods

回到咱們的庫首目錄(就是有.podspec文件的那個目錄), 而後使用Trunk命令:

pod trunk push
複製代碼

若是咱們在驗證的時候發現了有幾個Warnings的話, 那咱們就須要加上一個關鍵詞:

pod trunk push --allow-warnings
複製代碼

若是咱們還想看到詳細信息的話, 咱們還能夠加上另外一個關鍵詞:

pod trunk push --allow-warnings --verbose
複製代碼

若是咱們在檢測時發現了圖中的錯誤:

14

那咱們就須要加上另外一個關鍵詞:

pod trunk push --allow-warnings --use-libraries
複製代碼

最後咱們輸入完全部命令, 看到了圖中所示, 那就說明了咱們的庫發推送成功了:

15

查找已發送的庫

當咱們推送完庫以後直接去pod search ProjectName, CocoaPods會提示找不到, 緣由是由於本地的CocoaPods search_index.json文件沒有更新到, 這個時候咱們能夠手動刪除該文件, 再從新去搜索, 就能夠搜索到了.

17

文件路徑通常是在:/Users/您的用戶名/Library/Caches/CocoaPods/

PS: 刪掉再次搜索, 須要一段時間, 請耐心等待.

補充

關於更多的CocoaPods的標籤能夠到CocoaPods Guides裏查詢到, 若是是遇到一些bug能夠到GitHub CocoPods留下你的Issues.

疑問

在研究CocoaPods的時候, 我有一個疑問, 怎麼建立一個podspec文件, 去關聯不一樣的第三方庫, 而且不會引發他們之間的衝突, 比如高德2D地圖高德3D地圖就會引發Framework的衝突.

而且能夠在這個大的podspec裏能夠自由的選擇高德2D地圖高德3D地圖導入到工程裏, 不知道是CocoaPods不支持, 仍是我還沒研究透, 若是能夠的話, 但願老鐵們給我解惑解惑.

相關文章
相關標籤/搜索