想了想, 發現本身很久都沒有寫新的文章了, 還有一些朋友跑過來講個人掘金很久沒更新了, 其實不是的, 我一直在維護並更新玩轉iOS開發:本身造的輪子《CLUIKit》和玩轉iOS開發:本身造的輪子《CLFoundation》, 只是沒有文章的更新日期, 這個無法看到我更新文章而已, 但願掘金考慮考慮加上個更新時間~~git
若是您以爲挺讚的話, 能夠我喝杯星爸爸, 謝謝啦~github
這段時間除了忙着作項目以外, 還有一件事就是製做CocoaPods
庫, 這個東西雖然好用, 不研究還好, 一研究就會發現, 真的是.....json
搞了一兩天, 搜了N
多個百度和谷歌, 也諮詢了不少大佬, 終於搗鼓出來了, 下面就直接上文章, 不那麼多廢話了.vim
使用終端找到須要建立CocoaPods
開發庫的文件夾ide
cd Project文件夾
複製代碼
找到對應的路徑後, 再輸入建立podspec
文件的命令post
pod spec create 庫名
複製代碼
打開庫名.podspec
文件以後, 咱們會看到不少對應的註釋, 按照我的喜歡, 選擇刪掉或者不刪掉, 這裏爲了演示選擇刪掉所有註釋.網站
這裏解釋一下各個參數:ui
更詳細的能夠到CocoaPods網站去查詢spa
這裏咱們舉個例子, CLUIKit.podspec的寫法, 這裏只依賴了三個庫, MJRefresh, CLFoundation和Masonry.3d
上面這種寫法比較適合單一的庫, 好比MJRefresh, CLFoundation和Masonry這類型的, 但若是咱們須要拆分出幾個子模塊讓開發者去選擇, 這裏有兩種方案:
Git
倉庫, 分開來存儲podspec
文件的技巧拆分.這裏咱們推薦第二種方案.
這裏咱們能夠找到最經典的案例就是AFNetworking.podspec, 若是這個庫全都是咱們本身寫的, 那麼能夠參照着來寫:
但若是咱們是要依賴於第三方的庫或者是Framework
, 那這裏可能就不適合了, 好比CLMapKit.podspec, 這裏依賴了GoogleMaps
, 而且將來可能還會兼容其餘的地圖庫, 那麼咱們就必須拆分紅N
個子模塊, 而且要針對來編寫:
Framework
是靜態的.這裏須要注意一點的就是source_files這個標籤, 在GoogleMap
這個子模塊裏, 咱們的寫法要根據咱們的文件層級來編寫, 好比CLMapKit這個庫的GoogleMap
模塊, 它的層級就是CLMapKit/GoogleMap/CLGoogleMapViewController
, 最後纔到要共享的文件, 因此咱們在這裏要寫成圖上鎖顯示的那樣.
而且針對GoogleMap
這個subspec
寫上所依賴的庫:
若是咱們這個庫裏面須要.Bundle
文件, 那咱們就須要加一個Resource標籤:
當咱們寫好了podspec
文件以後, 咱們就須要在本地驗證一下:
pod spec lint
複製代碼
這個時候咱們沒有看到有任何的error
信息, 就已經ok
了, 若是咱們不想要警告的話, 能夠帶上--allow-warnings
這個關鍵詞.
通過上面咱們的編寫, 以及驗證podspec
文件以後, 咱們就能夠準備發佈咱們的庫了, 這裏咱們只講解如何發佈開源的庫, 私有的暫時不去研究先.
Git
倉庫首先咱們須要去建立一個Git
倉庫, 大多數老鐵選擇的是GitHub
, 怎麼建立, 怎麼clone
, 這裏就不解釋了, 咱們把代碼上傳上GitHub
以後會有一個醬紫的界面:
全部代碼文件及podspec
文件上傳了以後, 咱們就繼續下一步.
以前咱們解釋過在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 -d 版本號
複製代碼
若是咱們是須要刪除遠程倉庫裏的Git Tag
的話, 咱們可使用遠程刪除命令:
git push origin --delete 版本號
複製代碼
這樣子咱們就能夠刪除掉遠程倉庫的Git Tag
了.
若是咱們須要查詢已有的本地Git Tag
, 那麼咱們可使用查詢命令:
git tag
複製代碼
若是咱們是須要查詢遠程倉庫的話, 咱們可使用查詢指定的分支去查看:
git show origin
複製代碼
暫時沒找到如何查看遠程倉庫
Tag
的命令, 只能用上面的方式了.
發佈前的最後一個操做就是註冊CocoaPods
, 咱們可使用下面的命令去註冊:
pod trunk register 郵箱 '暱稱'
複製代碼
作完這個操做只有, 你的郵箱會收到一封郵件, 咱們打開了那個連接以後, 若是網站顯示了一張圖, 上面寫着You can go back to your terminal new.
, 那咱們就能夠繼續下一步操做, 發佈咱們的CocoaPods
庫了.
回到咱們的庫首目錄(就是有.podspec文件的那個目錄), 而後使用Trunk
命令:
pod trunk push
複製代碼
若是咱們在驗證的時候發現了有幾個Warnings
的話, 那咱們就須要加上一個關鍵詞:
pod trunk push --allow-warnings
複製代碼
若是咱們還想看到詳細信息的話, 咱們還能夠加上另外一個關鍵詞:
pod trunk push --allow-warnings --verbose
複製代碼
若是咱們在檢測時發現了圖中的錯誤:
那咱們就須要加上另外一個關鍵詞:
pod trunk push --allow-warnings --use-libraries
複製代碼
最後咱們輸入完全部命令, 看到了圖中所示, 那就說明了咱們的庫發推送成功了:
當咱們推送完庫以後直接去pod search ProjectName
, CocoaPods
會提示找不到, 緣由是由於本地的CocoaPods search_index.json
文件沒有更新到, 這個時候咱們能夠手動刪除該文件, 再從新去搜索, 就能夠搜索到了.
文件路徑通常是在:/Users/您的用戶名/Library/Caches/CocoaPods/
PS: 刪掉再次搜索, 須要一段時間, 請耐心等待.
關於更多的CocoaPods
的標籤能夠到CocoaPods Guides裏查詢到, 若是是遇到一些bug
能夠到GitHub CocoPods留下你的Issues
.
在研究CocoaPods
的時候, 我有一個疑問, 怎麼建立一個podspec
文件, 去關聯不一樣的第三方庫, 而且不會引發他們之間的衝突, 比如高德2D地圖
和高德3D地圖
就會引發Framework
的衝突.
而且能夠在這個大的podspec
裏能夠自由的選擇高德2D地圖
和高德3D地圖
導入到工程裏, 不知道是CocoaPods
不支持, 仍是我還沒研究透, 若是能夠的話, 但願老鐵們給我解惑解惑.