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

CainLuo發表於2018-05-31

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

請他喝杯星爸爸

如果您覺得挺讚的話, 可以我喝杯星爸爸, 謝謝啦~

支付寶

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

真讓人頭大

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

建立podspec檔案

使用終端找到需要建立CocoaPods開發庫的資料夾

cd Project資料夾
複製程式碼

1

找到對應的路徑後, 再輸入建立podspec檔案的命令

pod spec create 庫名
複製程式碼

2

編輯podspec檔案

開啟庫名.podspec檔案之後, 我們會看到很多對應的註釋, 按照個人喜歡, 選擇刪掉或者不刪掉, 這裡為了演示選擇刪掉全部註釋.

3

這裡解釋一下各個引數:

  • name: 庫名, 必選
  • version: 版本號, 必選
  • summary: 庫的概要
  • description: 庫的描述, 可選
  • homepage: 庫的首頁, 可選
  • license: 開源協議, 如有開源協議必選
  • author: 作者, 必選, 詳情看文章後面的介紹
  • platform: 設定最低支援的系統版本號, 可選
  • source: 資源地址, 必選
  • source_files: 資原始檔, 必選
  • exclude_files: 排除檔案, 可選
  • requires_arc: 是否是ARC, 可選
  • frameworks: 需要關聯的系統Frameworks
  • dependency: 需要關聯的第三方庫

更詳細的可以到CocoaPods網站去查詢

這裡我們舉個例子, CLUIKit.podspec的寫法, 這裡只依賴了三個庫, MJRefresh, CLFoundationMasonry.

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不支援, 還是我還沒研究透, 如果可以的話, 希望老鐵們給我解惑解惑.

相關文章