前言
? ?在項目的開發(fā)過程中我們經常會使用到很多的第三方框架,通過CocoaPods我們可以非常容易的去管理這些第三方庫,至于CocoaPods如何使用,這不是我們今天討論的重點,這里我就不再贅述了,不太明白的小伙伴們可以參考這篇文章:用CocoaPods做iOS程序的依賴管理
? ?今天我們討論的重點是如何將屬于我們自己寫的組件或者是庫開源出去,用戶通過一句 ?pod install ?就可以集成我們寫的框架呢? 不著急,下面我將帶領大家一步步的將屬于自己的pods發(fā)布到CocoaPods中,下面我就簡單的以一個小Demo來做演示
工作原理
從網上看到一張?zhí)貏e好的圖 這里就直接拿過來用了

一.上傳項目到代碼托管平臺
? ?首先我們需要在第三方代碼托管平臺上創(chuàng)建一個屬于我們自己的Repository,假如名稱為GZPCode,創(chuàng)建好之后將我們的庫上傳到github上,并且打上tag,這個非常重要。將tag push到github上之后我們就可以在release 文件中看到一個0.1.0的版本了,注意這里一定要先將我們的庫commit 之后在打tag,否則的話會出問題
二.注冊trunk
如果不知道我們曾經有沒有注冊過trunk,那么可以使用下面的命令向trunk服務器查詢自己的注冊信息:
pod trunk me

否則我們可以通過下面的命令去注冊trunk:
pod trunk register zswangzp@163.com 'gzp' ?--verbose
大家在注冊的時候需要將郵箱和用戶名替換成自己的即可,--verbose參數是為了便于輸出在注冊過程中的調試信息。執(zhí)行上面的語句后,你的郵箱將會受到一封帶有驗證鏈接的郵件,如果沒有請去垃圾箱找找,有可能被屏蔽了。點擊郵件的鏈接就完成了trunk注冊流程。

點擊郵箱中的鏈接則會跳轉到下圖所示的界面,表明已經注冊成功了

三.配置PodSpec,并且推送到CocoaPods服務器
1、添加podspec描述文件
首先在我們框架的同級目錄下創(chuàng)建一個名稱為 GZPCode 的PodSpec的文件,代碼如下
pod spec create GZPCode
至于pod spec文件,它是用來描述我們的框架的一些具體信息的,比如框架的作者、版本、下載地址等信息。我們在 pod install ?安裝第三方框架的時候就是根據這個文件中的下載地址去Clone 具體代碼的。通過上面這個命令我們就創(chuàng)建了一個GZPCode.podspec 文件,用XCode 打開這個文件 我們可以看到它里面有非常多的信息,這里我們講解幾個必要的:
Pod::Spec.new do |s|
s.name ? ? ? ? = "GZPCode" ?#項目名稱
s.version ? ? ?= "0.1.0" ? ?#項目版本
s.summary ? ? ?= "GZPCode. 框架的簡單描述" #框架的簡單描述
s.description ?= <<-DESC
框架的具體描述,這里的信息要長一些不然會報錯的。。。。。。。。。。
DESC
s.homepage ? ? = "https://github.com/Guanzhangpeng/GZPCode" #該框架在github上的主頁地址
s.license ? ? ?= "MIT" ? #協(xié)議
s.author ? ? ? ? ? ? = { "gzp" => "zswangzp@163.com" } ?#作者
s.platform ? ? = :ios, "8.0" ?#最低適配的版本
s.source ? ? ? = { :git => "https://github.com/Guanzhangpeng/GZPCode.git", :tag => "#{s.version}" } #源代碼的具體地址
s.source_files ?= "Classes", "Category/**/*.{h,m}" #框架相對于spec文件的路徑
s.exclude_files = "Classes/Exclude"
s.requires_arc = true ? ? #支持arc
end
2、將podspec文件通過trunk推送給CocoaPods服務器
相信上面的注釋已經寫的很詳細了,編輯完podspec文件后,需要驗證一下這個文件是否可用,如果有任何WARNING或者ERROR都是不可以通過的,它就不能被添加到Spec Repo中,不過是可以存在的,當然我們也可以通過 --allow-warnings 來屏蔽警告
pod spec lint GZPCode.podspec
當看到 ?GZPCode.podspec passed validation. ?之后 就表明已經驗證通過了,那么接下來我們就可以通過trunk推送pod spec文件到CocoaPod官方庫中了. ?CocoaPods/Specs代碼庫的地址是:https://github.com/CocoaPods/Specs
pod trunk push GZPCode.podspec ? ?
上面的代碼幫我們做了下面幾件事情:
1、驗證你的podspec文件是否合法。在trunk方式之前我們一般用“pod lib lint”命令進行驗證。
2、上傳podspec文件到trunk服務器(其實最終也會自動添加到https://github.com/CocoaPods/Specs中,只是使用trunk方式省去了以前先fork在pull request的繁瑣操作)
3、將你上傳的podspec文件轉成json格式文件
執(zhí)行上面的push操作,就相當于你把你的源代碼提交給CocoaPods團隊審核了,一般需要幾秒鐘或者幾分鐘就可以完成了。當我們看到下面這個界面就表示我們的GZPCode.podspec 文件已經成功的上傳到了CocoaPod官方庫中了。

四.更新本地pod索引庫
? ? 經過上面的步驟后我們已經成功的將spec文件上傳到了CocoaPod官方庫中了,但是我們本地的pod索引庫還不是最新的,所以這個時候我們需要通過? pod setup? 將遠程的CocoaPods 索引庫更新到我們本地。pod setup其實在做這么一件事:Cocoapods在將https://github.com/CocoaPods/Specs 的信息下載到你電腦的~/.cocoapods目錄下并進行文件比對,總數據大小大約在300MB左右,再加上服務器在國外,因此速度會比較慢。在執(zhí)行過程中你也可以新開一個Terminal窗口,cd到~/.cocoapods目錄,用du -sh *來查看下載進度。第一次會比較慢,第一次以后只需要幾秒鐘即可完成。
五.測試使用
完成上面的步驟后我們可以來測試下 看看我們的框架是否可以通過 CocoaPods來集成了,首先我們在終端上 搜索下我們的框架 ?pod search GZPCode,很遺憾 沒有搜索到,而且給我們一個紅色的提示
[!] Unable to find a pod with name, author, summary, or description matching `GZPCode`
這是因為什么原因呢?其實原因很簡單,這是因為我們本地索引庫的檢索文件 search_index.json 緩存造成的結果,我們將索引緩存路徑 ~/Library/Caches/CocoaPods/ 下的這個json文件 刪除后再次搜索就可以搜索到了

是不是很神奇? 下面你就可以通過 pod的命令來集成這個框架了。
謝謝大家,歡迎討論。