??由來(lái):你有自己的SDK可供人下載使用,通過(guò)Github,你雖然可以實(shí)現(xiàn)Github上的上傳與管理(可見(jiàn)文章:[用github上傳并管理自己的項(xiàng)目]),然而現(xiàn)在你想將該SDK上傳給cocoapods以供別人pod導(dǎo)入,更新和使用.
<一>準(zhǔn)備工作:
確保你的客戶(hù)端安裝有Github桌面版并登錄,在網(wǎng)頁(yè)登錄上你的Github賬號(hào). 并準(zhǔn)備好你需要上傳的SDK文件內(nèi)容.打開(kāi)終端以備開(kāi)始.
<二>詳細(xì)過(guò)程:
1.0 ?SDK的創(chuàng)建目的,就是滿(mǎn)足別人的需求,以幫助他人或者自己在開(kāi)發(fā)項(xiàng)目時(shí)可以通過(guò)有效的第三方來(lái)更好更快的完善,開(kāi)發(fā)項(xiàng)目.所以,在完成核心代碼的編寫(xiě)后,按照比較的合理的操作方式,你有必要寫(xiě)一份用來(lái)展示自己SDK核心,主要作用的Demo,以幫助他人更好的認(rèn)識(shí),學(xué)習(xí)它.所以,如果此時(shí)你已經(jīng)完成了這個(gè)步驟,那么,此時(shí)的Demo文件的框架結(jié)構(gòu)應(yīng)該是下圖所示的:

2.0 ?可以暫時(shí)把文件放起,進(jìn)入真正的創(chuàng)建Github代碼倉(cāng)庫(kù)并關(guān)聯(lián)Cocoapods的階段.其初期的過(guò)程更是對(duì)[用github上傳并管理自己的項(xiàng)目]的重復(fù).進(jìn)入Github個(gè)人主頁(yè),點(diǎn)擊Repositories然后點(diǎn)擊New進(jìn)入倉(cāng)庫(kù)創(chuàng)建界面:

3.0 ?根據(jù)下圖詳細(xì)提示,對(duì)倉(cāng)庫(kù)進(jìn)行編寫(xiě),在這里注意一點(diǎn)->※為了方便,也是規(guī)范整體結(jié)構(gòu),你要保證這里的 Repository name 要和后面的 .podspec 文件里的文件名,還有你的核心文件的文件名相一致:

4.0 ?倉(cāng)庫(kù)創(chuàng)建成功的初始模樣就如下圖所示,然后點(diǎn)擊右上方 Clone or download 下的Open in Desktop 將整個(gè)倉(cāng)庫(kù)下載到Github桌面版并打開(kāi):

5.0 ?下圖所示下載到桌面并打開(kāi)后的大體模樣,直到目前為止,你已經(jīng)有了兩個(gè)文件,1??你之前所放起的Demo文件;2??你新創(chuàng)建并下載,而且將會(huì)是最終提交的文件YourSDK.接下來(lái),你就需要將兩個(gè)文件合并,實(shí)際上就是需要將Demo文件的主題部分手動(dòng)拖動(dòng)到新的 YourSDK 文件中就可以:

6.0? 具體合并過(guò)程可見(jiàn)下圖,在這里有個(gè)要點(diǎn)需要作出特別說(shuō)明->在原Demo文件中,核心文件夾名為 YourSDKFiles ,在拖動(dòng)到Y(jié)ourSDK文件夾時(shí),我將其更改為同名文件 YourSDK ,那么問(wèn)題來(lái)了,在Demo里面的 YourSDKFiles 還是存在的,但是里面的東西卻不能顯示了,所以在這里,需要重新打開(kāi)Demo文件,并重新導(dǎo)入一遍核心文件? YourSDK .

7.0 ?一切準(zhǔn)備妥當(dāng),接下來(lái),就需要將新的 YourSDK 上傳并異步更新到Github上去,在未提交界面,請(qǐng)注意一點(diǎn)->必須寫(xiě)入 Summary 或者 Description 兩者中的任意一項(xiàng),點(diǎn)擊 commit 完成后,在點(diǎn)擊 Sync 異步更新:

8.0 ?提交完成后,回到網(wǎng)頁(yè)界面并刷新,獲取到最新的倉(cāng)庫(kù)模樣,即如下圖所示:

9.0 ?其實(shí),以上幾個(gè)步驟就是我在上一節(jié)所說(shuō)的用 Github 上傳并管理自己項(xiàng)目的步驟,那么,接下來(lái)的步驟就是真正讓你的倉(cāng)庫(kù)與Cocoapods關(guān)聯(lián)的關(guān)鍵所在.
首先,將一點(diǎn)核心的文件,那就是一個(gè)叫 .podspec 的文件,通過(guò)下圖的比對(duì),一個(gè)倉(cāng)庫(kù)能不能實(shí)現(xiàn)與Cocoapods的關(guān)聯(lián),關(guān)鍵之處就在于一個(gè)屬于該倉(cāng)庫(kù)的 .podspec 文件;
所以,接下來(lái)的所有操作基本就是圍繞 .podspec 文件來(lái)進(jìn)行的了:

10.0 ?先來(lái)自己辨識(shí)下這個(gè)文件,直接點(diǎn)擊打開(kāi)別人已經(jīng)完成的 .podspec 文件(我點(diǎn)開(kāi)的是MJ大神MJRefresh框架里podspec文件),看一下里面的秘密.
注意->1??直接看里面的內(nèi)容即可,第一行中的東西每個(gè)podspec文件并無(wú)差異, 往下看, s.name ,這個(gè)就是上面我所說(shuō)的要與 Repository name 保持一致的SDK名.
注意->2??在接下來(lái)的操作中,我將會(huì)直接拷貝別人的podspec文件,并根據(jù)自己的內(nèi)容進(jìn)行合理修改.但是,通過(guò)終端,你也可以通過(guò)指令進(jìn)行創(chuàng)建:
pod spec create YourSDK.podspec
并用一下指令對(duì)其進(jìn)行修改等操作,之后將會(huì)提到:
vi? YourSDK.podspec

11.0 ?保持podspec與整體文件和核心文件的命名一致, 在終端中 cd 該文件,找到后 進(jìn)行如下操作,進(jìn)入到podspec文件里:
vi? YourSDK.podspec

12.0 ?進(jìn)入到主podspec界面后,如下圖,點(diǎn)擊鍵盤(pán)上的 i (insert) 就可以開(kāi)始對(duì)其進(jìn)行刪除或者輸入的操作.命名,版本號(hào),摘要,描述,網(wǎng)頁(yè)地址,證書(shū),平臺(tái),作者信息,源地址,資源文件,arc的選擇等等.依次根據(jù)實(shí)際情況依次修改填寫(xiě).
注意->如果在終端創(chuàng)建,會(huì)有更多的可供選項(xiàng),內(nèi)容更多,很多東西對(duì)我們正在希望得到的作用并無(wú)太多幫助,盡量將其簡(jiǎn)化即可.
在修改完成并確認(rèn)無(wú)誤后,點(diǎn)擊 Esc 鍵,然后輸入 :w 保存, :q 退出:

13.0 ? 在完成保存并退出后,首先要做的就是打標(biāo)簽,將 tag push 到Github上.通過(guò)以下四步即可:
git tag '0.0.1'
git add *
git commit -m 'add tag'
git push origin 0.0.1

14.0 ?接下來(lái),在創(chuàng)建完善podspec并給Github打完標(biāo)簽后,就可以把該倉(cāng)庫(kù)作為分支推送給Cocoapods.
有以下操作->1??對(duì)打上的標(biāo)簽與podspec標(biāo)記的標(biāo)簽進(jìn)行比驗(yàn)證,通過(guò)以下指令進(jìn)行:
pod lib lint
如果成功,會(huì)返回一句如下結(jié)構(gòu)的信息:
-> YourSDK (0.0.1)
2??執(zhí)行下圖中 pod trunk push 命令,真正執(zhí)行分支的推送操作.當(dāng)顯示 has been pushed 時(shí),即證明推送成功.
3??返回到網(wǎng)頁(yè)界面,刷新該倉(cāng)庫(kù).點(diǎn)擊 Brand:master ,再找到 Tags 并點(diǎn)擊,就會(huì)發(fā)現(xiàn)你所打的標(biāo)簽號(hào).

15.0 ?返回到終端,在終端里執(zhí)行如下指令
pod search YourSDK
如下圖,即證明,此時(shí)你已經(jīng)成功關(guān)聯(lián)你的SDK到Cocoapods.

<三>常見(jiàn)錯(cuò)誤:
在這個(gè)操作中,其實(shí)有一些坑的,而且,這些坑都比較集中的出現(xiàn)在執(zhí)行 pod trunk push 也就是推送分支的過(guò)程中.接下來(lái),我將我所遇到的一些常見(jiàn)坑給大家填一下,有不周之處,望各位指正.
1.0 ?錯(cuò)誤1??:核心文件沒(méi)有正確匹配
- ERROR | [iOS] file patterns: The `source_files` pattern did not match any file.
? ? ? ?解決1??:手動(dòng)導(dǎo)入

2.0 ?錯(cuò)誤2??:由于警告,未通過(guò)認(rèn)證
YourSDK did not pass validation ,due to 1 wanrings (but you can use --allow-warnings to ignore them)
? ? ? ?解決2??:重新執(zhí)行下面指令
pod trunk push YourSDK.podspec? --allow-warnings
<四>補(bǔ)充:
整個(gè)過(guò)程其實(shí)還是比較容易理解的,就是將Github上的東西拿一份給Cocoapods托管,重點(diǎn)和難點(diǎn)就是在建立連接的部分.不過(guò),這個(gè)過(guò)程的順利進(jìn)行,需要你對(duì)Github上的文件結(jié)構(gòu)有充分的認(rèn)識(shí),還需要較為熟練的使用Github桌面版(Github Desktop).
同時(shí),還有一點(diǎn)必須說(shuō)明,這個(gè)過(guò)程在Cocoapods亦或者Github,還有終端的操作上,所用到的東西其實(shí)十分有限的,需要平時(shí)的積累,觀察與總結(jié).
如果能十分有譜的使用某一管理工具對(duì)自己的工作成果或者學(xué)習(xí)成果,進(jìn)行有效的管理,引導(dǎo)的話(huà),這對(duì)你之后的工作和學(xué)習(xí)都是大有裨益的,很多操作中將會(huì)起到事半功倍的效果.
諸君共勉!