如何制作自己的Pod庫

1匪傍、創(chuàng)建倉庫:

2、將倉庫克隆本地:

git clone https://github.com/2360219637/CZCTestCode.git

3觉痛、創(chuàng)建.podspes文件析恢,此處命名為CZCTestCode

$ pod spec create CZCTestCode

4、在桌面CZCTestCode目錄中創(chuàng)建工程(此處命名為CZCTestCode)秧饮,創(chuàng)建共享的類

5、編輯podspec文件

項目中不做子目錄分層顯示

Pod::Spec.new do |s|

s.name? ? ? ? = "CZCTestCode"

s.version? ? ? = "1.0.0"

s.summary? ? ? = "一個建立pod倉庫的簡單demo."

s.description? = <<-DESC

這只是一個建立pod倉庫的簡單demo泽篮,并沒有實際的意思盗尸。教學使用。

DESC

s.homepage? ? = "https://github.com/2360219637/CZCTestCode"

s.license? ? ? = { :type => "MIT", :file => "LICENSE" }

s.author? ? ? ? ? ? = { "陳志超" => "2360219637@qq.com" }

s.platform? ? = :ios, "7.0"

s.source? ? ? = { :git => "https://github.com/2360219637/CZCTestCode.git", :tag => s.version }

s.source_files? = "Classes", "CZCTestCode/CZCTestCode/Classes/**/*.{h,m}"

s.requires_arc = true

end

# 遇到的問題: 1)“- ERROR | [iOS] unknown: Encountered an unknown error (undefined method `path' for nil:NilClass) during validation.”

需要把 s.source_files = 'Pod/Classes/**/*’ 改為 s.source_files = 'Pod/Classes/**/*.{c,h,hh,m,mm}'

報錯 ···?error: include of non-modular header inside framework module ···?[-Werror,-Wnon-modular-include-in-framework-module]  

解決辦法:在pod lib lint 或者 pod spec lint 以及 pod repo push ....時候加上 ??--use-libraries pod lib lint --use-libraries #或者 pod spec lint --use-libraries #當然帽撑,在提交的時候也要加上 pod repo push --use-libraries ? (該方法不適用于swift)

項目中做子目錄分層顯示

Pod::Spec.new do |s|

s.name = "ZXCategory"

s.version = "0.0.6"

s.summary = "Custom Category used on iOS."

s.description = <<-DESC Custom Category used on iOS, which implement by Objective-C. DESC

s.homepage = "https://github.com/ZHANGMRXIN/ZXCategory"

s.license = 'MIT'

s.author = { "xinzhang" => "zx270611346@gmail.com" }

s.platform = :ios, '7.0'

s.source = { :git => "https://github.com/ZHANGMRXIN/ZXCategory.git", :tag => s.version }

s.requires_arc = true

# UIView 和 EasyLog 在工程中以子目錄顯示

????s.subspec 'UIView' do |ss|

????????ss.source_files = 'ZXCategory/UIView/*.{h,m}'

????end

????s.subspec 'EasyLog' do |ss|

????????ss.source_files = 'ZXCategory/EasyLog/*.{h,m}'

????end

end

s.source_files = ' '的多種寫法

ss.source_files = 'ZXCategory/UIView/*.{h,m}'

表示ZXCategory/UIView/目錄下的所有.h.m文件

s.source_files = 'ZXCategory/**/ .'

/后面的 . 應是 星號泼各,MarkDowm語法沖突在此不能正常顯示

表示ZXCategory/目錄下所有文件,包括子目錄下所有文件亏拉。 **/.表示遞歸

當有多個文件時扣蜻,應用,隔開

s.source_files ='MMDrawerController/MMDrawerController.{h,m}','MMDrawerController/UIViewController+MMDrawerController*'

6逆巍、上傳git并打tag

//添加文件 并上傳到github上(github上不會顯示出來,需要和后面的幾個配合使用)

$ git add -A && git commit -m"創(chuàng)建版本 1.0.0."

//打上標識

$ git tag'1.0.0'

//將標識push到github中

$ git push --tags

//將內(nèi)容push到github 的master分支上莽使,如果設置了tag锐极,將在對應的tag上顯示內(nèi)容

$ git push origin master

//刪除本地tag

$ git tag -d 1.0.0

//刪除github上面的tag (1.0.0為tag值)

$ git push origin :1.0.0

7、驗證podspec

$ pod spec lint

驗證成功會出現(xiàn)以下提示:

8芳肌、pod主干注冊

pod trunk register 2360219637@qq.com"czc"

9灵再、發(fā)布你的pod

pod trunk push CZCTestCode.podspec

這個過程等待時間較長,成功截圖:

10亿笤、完成翎迁,此時終端可搜索到自己創(chuàng)建的pod庫




補充:::::::::::


記得一次面試有人問我有沒有自己開源一些庫,有是有的净薛,但是確沒有制作成可以通過pods導入的庫汪榔,此乃一大憾事,后來跟著網(wǎng)上很多教程在那里搗鼓了半天肃拜,真的是半天時間痴腌,壓根沒用,今天無意間看到一篇博客爆班,http://www.reibang.com/p/489520b69d8b衷掷,參考了一下,有用柿菩,但并不是最正確的戚嗅,里面有許多你不知道的坑等著你在跳,按照上面的步驟枢舶,基本和我以前看的一樣懦胞,最后還是不行,經(jīng)過倆小時的摸索凉泄,根據(jù)一些報錯來查找原因躏尉,最后終于解決了這個問題,下面是博主剛剛創(chuàng)建的庫:

如果想要看具體功能可以看:https://github.com/codeliu6572/CustomAlertView

在看這個功能前后众,確定你會上傳自己的項目代碼到github胀糜,不會的可以看博主的文章:http://blog.csdn.net/codingfire/article/details/50387183

下面來介紹下如何把自己的庫制作成可以通過pod導入的庫:

上面那篇博客中的內(nèi)容可以看下,為了保證正確蒂誉,博主就重新在下面寫命令:

1.用戶名郵箱注冊教藻,為github的用戶名和綁定郵箱(下面的內(nèi)容替換為自己的):

pod trunkregistercodeliu6572@163.com'codeliu6572'--verbose


如果報錯,一般是pod版本低或者ruby的版本低右锨,這里不再說明解決辦法括堤,自行百度。

2.查看是否注冊成功

pod trunkme

這樣的就代表注冊成功。

3.創(chuàng)建 .podspec文件

這里一定要在工程中創(chuàng)建 .podspec文件悄窃,并把庫文件放在一個文件中讥电,看一下博主的:

LICENSE文件(必不可少)和README.md文件都要有,且必須和庫問價放在一個目錄轧抗。

創(chuàng)建方法:

pod speccreateLHHAlertView

可以通過vim來打開文件操作恩敌,博主一般用電腦的文本編輯打開,打開后看到的內(nèi)容有很多鸦致,博主只保留了基本的信息潮剪,如下:

//特別說明,里面的注釋是博主為了大家知道什么意思加的分唾,實際使用時一定要去掉 Pod::Spec.new do |s|

//文件名

s.name = 'LHHAlertView'

//版本

s.version = '1.0.1'

//描述信息

s.summary = 'A view like UIAlertView on iOS.'

//這里的主頁自己隨便寫


s.homepage = 'http://blog.csdn.net/codingfire'

//作者

s.authors = { 'codeliu6572' => 'codeliu6572@163.com' }

//資源路徑

s.source = { :git => 'https://github.com/codeliu6572/CustomAlertView.git', :tag => '1.0.1' } //ARC模式

s.requires_arc = true

//license抗碰,一般我們用MIT

s.license = 'MIT'

//允許的最低系統(tǒng)使用版本

s.ios.deployment_target = '7.0'

//庫文件路徑

s.source_files = 'LHHAlertView/*'

end

因為這里沒有第三方庫和系統(tǒng)庫的引入,下面有個新的格式:

這里是博主提交的新的庫绽乔,供大家參考弧蝇,每次通過編輯器打開修改時引號都會改變,需要注意折砸,所以每次都需要重新復制正確的引號來替換變更的看疗,小修改可以用vim打開,這樣引號就不會變了睦授,升級版本時两芳,需要打tag,記得從打tag那一步開始去枷,第一次會輸入賬號密碼怖辆,以后會提示授權,允許即可删顶。每次修改后記得一定要同步到github再繼續(xù)下一步操作竖螃。除了下面的一些資源文件導入外,還有第三方的支持逗余,xib等的支持特咆,詳細信息請查看:

https://guides.cocoapods.org/syntax/podspec.html#specification

//特別說明,里面的注釋是博主為了大家知道什么意思加的录粱,實際使用時一定要去掉Pod::Spec.newdo|s|?

s.name? ? ? ? ='LHHTopScrollView'

s.version='1.0.5'

s.summary? ? ? ='A banner for iOS.'

s.homepage? ? ='http://blog.csdn.net/codingfire/article/details/52470802'

s.license? ? ? ="MIT"

s.ios.deployment_target ='7.0'

s.author? ? ? = {'codeliu6572'=>'codeliu6572@163.com'}?

s.source? ? ? = { :git =>'https://github.com/codeliu6572/ScrollVIewBanner.git', :tag =>'1.0.5'}?

s.source_files? ="LHHTopScrollView/*.{h,m}"

s.resources ="LHHTopScrollView/*.png"

//如果有多個腻格,后面加逗號隔開如:'UIKit','XXXXXX'

s.framework? ='UIKit'

s.requires_arc =true

s.dependency'SDWebImage'

end


這里s.source的git地址看下圖:

另外這里再說一個坑:

這里的單引號注意看了啥繁,是不一樣的荒叶,下面的很明顯能看出來和上面圈起來的不同,用上面的那種输虱,博主試了下,打不出來脂凶,那就復制宪睹,否則報錯愁茁,編輯通不過。切記Mげ 6旌堋!

4.驗證編輯是否通過

podliblint LHHAlertView.podspec

以上為通過截圖罪帖,只要按照博主的步驟來促煮,這一步肯定可以通過的。

后來博主在使用時又報錯了整袁,信息如下:

- ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code. You canuse`--verbose`formore information.- ERROR | xcodebuild:? /Users/Codeliu/Desktop/程序/VoiceLight/LHHVoiceLight/VoiceLight.h:11:9: error:'Masonry.h'file not foundwithinclude;use"quotes"instead

第一個錯誤博主怎么找也沒找到菠齿,最后查找到原因是因為博主創(chuàng)建文件時第一次創(chuàng)建錯了,把繼承與NSObject的類手動改成了UIView坐昙,重新創(chuàng)建后不再報錯绳匀;第二個錯誤是因為Masonry在引入時系統(tǒng)提示我這么引入#import,應該是#import"Masonry.h",但是這樣系統(tǒng)報錯炸客,這是因為pods的緣故疾棵,build setting->ALways Search User Path ,設置為YES即刻。

5.打上tag痹仙,并提交到github

這里打tag一定要加上v是尔,否則會出錯

事實證明這里加不加v都沒關系,但是有一點开仰,tag一定要和podspec文件中的tag一摸一樣拟枚。至于有其他的寫法,博主嘗試過但是有問題抖所,也許還有沒常識的梨州,就不亂下結論了,按照博主提供的方法來寫不會有錯田轧。

gittag'v1.0.1'git push--tagstag打錯了并已提交的gittag-dxxx

//刪除本地tag接著

git push origin--deletetagxxx

//刪除遠程tag暴匠,然后重新打tag


提交時會提示輸入賬號密碼,按照自己的github的賬號密碼來輸入傻粘。

成功后:

6.把podspec文件提交到github的庫倉庫中

pod trunkpushLHHAlertView.podspec

//如果有警告 后面加?

--allow-warnings


這一步有可能會因為pods版本低而失敗每窖,根據(jù)提示信息更新pods

成功后截圖:

7.搜索提交的庫

pod search LHHAlertView

然后就看到一開始的那張圖了。

這里再啰嗦幾句弦悉,以博主的這個Demo為例窒典,Demo里面已經(jīng)有了庫文件,但是在Demo同等級的目錄中依然要放一個庫文件稽莉,目前博主成功的文件目錄就是這樣的瀑志,podspec文件一定要和庫文件在一個目錄中,其他注意事項每一步都有介紹,一定要注意劈猪。

總結:要把自己的庫制作成通過pods導入還是有一定難度的昧甘,網(wǎng)上很多方法看著跟博主這里差不多,其實命令都一樣战得,但是卻有明顯的不同充边,那就是細節(jié)部分,比如引號常侦,打tag時的v浇冰,目錄結構等等,稍有不慎就可能通不過編輯聋亡,就說這么多肘习,如果遇到問題,歡迎加群討論杀捻。

后來遇到的坑:

1.通過代碼創(chuàng)建的podspec文件里面都是雙引號井厌,博主用的都是單引號,經(jīng)測試致讥,無影響仅仆,還有UIKIT等庫和第三方庫的引入,以及版本升級垢袱,這一部分已經(jīng)放在這里墓拜;

2.發(fā)現(xiàn)一個問題,如果你在某個庫中用了NSInteger请契,會報警告咳榜,原因是:typedef long NSInteger;類似這種情況的還有別的,如果遇到你可以替換成像這里應該是long爽锥,也可以選擇忽略警告涌韩,比如:pod trunk push ScrollSliderView.podspec –allow-warnings;

3.有時候在push時會遇到這樣的報錯:[!] There was an error pushing a new version to trunk: Net::OpenTimeout 不要驚慌氯夷,僅僅是因為網(wǎng)絡不好沒有push成功臣樱,不妨再試一次。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腮考,一起剝皮案震驚了整個濱河市雇毫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踩蔚,老刑警劉巖棚放,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異馅闽,居然都是意外死亡飘蚯,警方通過查閱死者的電腦和手機馍迄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來孝冒,“玉大人柬姚,你說我怎么就攤上這事∽校” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵搬设,是天一觀的道長穴店。 經(jīng)常有香客問我,道長拿穴,這世上最難降的妖魔是什么泣洞? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮默色,結果婚禮上球凰,老公的妹妹穿的比我還像新娘。我一直安慰自己腿宰,他們只是感情好呕诉,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吃度,像睡著了一般甩挫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椿每,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天伊者,我揣著相機與錄音,去河邊找鬼间护。 笑死亦渗,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的汁尺。 我是一名探鬼主播法精,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼均函!你這毒婦竟也來了亿虽?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤苞也,失蹤者是張志新(化名)和其女友劉穎洛勉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體如迟,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡收毫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年攻走,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片此再。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡昔搂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出输拇,到底是詐尸還是另有隱情摘符,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布策吠,位于F島的核電站逛裤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏猴抹。R本人自食惡果不足惜带族,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蟀给。 院中可真熱鬧蝙砌,春花似錦、人聲如沸跋理。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽薪介。三九已至祠饺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汁政,已是汗流浹背道偷。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留记劈,地道東北人勺鸦。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像目木,于是被迫代替她去往敵國和親换途。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容