前言
折騰了兩個多小時,踩了幾個坑以后,終于是制作并完成了自己的第一個支持CocoaPods的開源庫了。很簡單的一個小工具,一個簡易的彈窗。這個不是用view加在keyWindow的方式,采用的是控制器的方式,感興趣的可以下載看下。這個不是這次的主題,所以不做說明 ??
創建流程
大致流程:
- 創建一個工程
- 將該工程托管到GitHub
- 創建擴展名為podspec的文件
- 編輯podspec文件
- 校驗
- 發布
聽起來好像是So~~~~~ easy,不過我花了兩個小時搞定(之前也試過,失敗了,后來沒時間就沒弄了)
這次我整理了下大概的坑,后續的步驟講解中會說下這些:
1.托管的時候一定要加上tag
2.幾個必填的關鍵項
3.一定要學會google~
O__O "…廢話太多了,開始正文
一、創建工程并且將代碼托管到GitHub
這個實現方式大家可以根據自己的習慣來,我一般用的是命令的方式寫的;
- 在GitHub上創建倉庫的流程這個大家搜下就可以
- 創建完以后 按照箭頭指示獲取鏈接
-
cd 工程路徑
(Tip:在終端里面輸入cd 然后將文件夾拖進來就可以了) - 然后執行
git remote add origin 獲取的鏈接
- 一般我會在這里pull一遍
git pull origin master
git add .
git commit -m'文字說明'
-
git tag 'v0.0.1'
這里tag我不知道是不是一定要加v反正我加了就對了 Orz git push --tags
-
git push origin master
到這兒基本上第一步就完成了,不過最好刷新檢查一下git倉庫頁面。需要注意的是查看一下tag有沒有加上,成功的話會顯示的,如下圖:
二、創建、配置本地podspec文件
- 在終端中執行:
pod spec create xxx(名字隨便你取啦,一般是你庫的名字)
完成以后會在對應的路徑下生成一個擴展名為.podspec的文件
- 選擇一個編輯器(我用的sublime)打開,會看到下面的樣子,這里截取了一部分:
其中主要用到的內容包括
s.name = "FKSimpleAlertController"http://名字,一般和podspec文件名保持一致
s.version = "0.0.1"http://版本號 這個版本號需要和剛才提交GitHub的tag值一樣,并且不用加上'v'
s.summary = "簡易彈窗"http://描述,這個隨便自己怎么寫
s.description = "An alertController such as UIAlertController"http://這個隨便,可以不寫
s.homepage = "https://github.com/ForAllKid/FKSimpleAlertController"http://項目主頁,一般是GitHub的鏈接地址
s.license = "MIT"http://這個~
s.author = { "ForKid" => "xxxxxx@qq.com" }//這個一般自動就生成了
s.platform = :ios, "8.0"http://支持的平臺和版本,這個一定要填 ??????
s.source = { :git => "https://github.com/ForAllKid/FKSimpleAlertController.git", :tag => "v#{s.version}" }//還記得剛才git中copy的地址么?這里要注意下#簽名有個'v'??
s.source_files = "FKSimpleAlertControllerDemo/FKSimpleAlertController/Classes/*.{h,m}"http://這里的路徑自己填上去 按照層級寫就行了
//下面的看情況,用了多個framew就是用下面的,一個使用上面的
# s.framework = "Foundation"
s.frameworks = "Foundation", "UIKit"
s.requires_arc = true//是否支持ARC
踩坑點:
- 名字沒有保持一致
- 版本號不一致
- 發現上面的除了summary和description以外,其他的都是坑 Orz
當然這里是看不出來有沒有錯的~ 接下來這一步可以檢查有沒有錯
- 終端輸入
pod spec lint xxx.podspec
錯誤情況是這樣:
恩~ 鮮紅的文字,很強勢!
其實呢主要看這一行就夠了
這里是說遠程倉庫沒有對應的tag ~改下就好了,按照之前加tag的步驟
然后重新執行
正確的是這樣:
這里很容易出錯,多查一查就搞定了,實在不行,runloop ~
成功以后就基本完成了,但是你發現你無法pod search。。。
原因嘛,引用下其他人說的:
以上的方法,使用pod search 是搜不到你的庫的,因為這只是你私有的庫而已。
在你本地,前往~/.cocoapods/repos/master/Specs,你會看到cocoapod所有公有的開源庫配置,這個通過cocoapod官方在github的specs來管理,地址為https://github.com/CocoaPods/Specs 。
說到這里,你會想把這個庫fork分支下來,clone到你本地,把自己的Test.podspec加入,然后add、commit、 push,最后在github上pull request來和官方的主分支合并,可是你會發現請求馬上被自動關閉。
Why!!!
雖然一開始使用GitHub Pull Requests來整理所有公共pods效果很好。但是,隨著Pod數量的增加,這個工作對于spec維護人員Keith Smiley來說變得十分繁雜。甚至一些沒有通過$ pod lint的spec也被提交上來,造成repo無法build。
CocoaPods 0.33中加入了Trunk服務。CocoaPods Trunk服務的引入,解決了很多類似的問題。CocoaPods作為一個集中式的服務,使得分析和統計平臺數據變得十分方便。下面來說說怎么分布CocoaPod。
所以還要搞事情。
要想使用Trunk服務,首先你需要注冊自己的電腦。這很簡單,只要你指明你的郵箱地址(spec文件中的)和名稱即可。
pod trunk register xxxx@qq.com 'lupeihong' --description='macbook air'
完成之后,我們就可以開始 trunk push 了提交我們的podspec文件。
pod trunk push Test.podspec
剩下的就是等待了
當完成以后會顯示這個
然后你可以創建一個工程,然后用pod試試。
完~