如何制作自己的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文件

項(xiàng)目中不做子目錄分層顯示

Pod::Spec.new do |s|

s.name? ? ? ? = "CZCTestCode"

s.version? ? ? = "1.0.0"

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

s.description? = <<-DESC

這只是一個(gè)建立pod倉庫的簡單demo,并沒有實(shí)際的意思。教學(xué)使用。

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}'

報(bào)錯(cuò) ···?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 ....時(shí)候加上 ??--use-libraries pod lib lint --use-libraries #或者 pod spec lint --use-libraries #當(dāng)然,在提交的時(shí)候也要加上 pod repo push --use-libraries ? (該方法不適用于swift)

項(xiàng)目中做子目錄分層顯示

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/**/ .'

/后面的 . 應(yīng)是 星號,MarkDowm語法沖突在此不能正常顯示

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

當(dāng)有多個(gè)文件時(shí),應(yīng)用,隔開

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

6、上傳git并打tag

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

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

//打上標(biāo)識

$ git tag'1.0.0'

//將標(biāo)識push到github中

$ git push --tags

//將內(nèi)容push到github 的master分支上,如果設(shè)置了tag,將在對應(yīng)的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、驗(yàn)證podspec

$ pod spec lint

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

8、pod主干注冊

pod trunk register 2360219637@qq.com"czc"

9、發(fā)布你的pod

pod trunk push CZCTestCode.podspec

這個(gè)過程等待時(shí)間較長,成功截圖:

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




補(bǔ)充:::::::::::


記得一次面試有人問我有沒有自己開源一些庫,有是有的,但是確沒有制作成可以通過pods導(dǎo)入的庫,此乃一大憾事,后來跟著網(wǎng)上很多教程在那里搗鼓了半天,真的是半天時(shí)間,壓根沒用,今天無意間看到一篇博客,http://www.lxweimin.com/p/489520b69d8b,參考了一下,有用,但并不是最正確的,里面有許多你不知道的坑等著你在跳,按照上面的步驟,基本和我以前看的一樣,最后還是不行,經(jīng)過倆小時(shí)的摸索,根據(jù)一些報(bào)錯(cuò)來查找原因,最后終于解決了這個(gè)問題,下面是博主剛剛創(chuàng)建的庫:

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

在看這個(gè)功能前,確定你會(huì)上傳自己的項(xiàng)目代碼到github,不會(huì)的可以看博主的文章:http://blog.csdn.net/codingfire/article/details/50387183

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

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

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

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


如果報(bào)錯(cuò),一般是pod版本低或者ruby的版本低,這里不再說明解決辦法,自行百度。

2.查看是否注冊成功

pod trunkme

這樣的就代表注冊成功。

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

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

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

創(chuàng)建方法:

pod speccreateLHHAlertView

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

//特別說明,里面的注釋是博主為了大家知道什么意思加的,實(shí)際使用時(shí)一定要去掉 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

因?yàn)檫@里沒有第三方庫和系統(tǒng)庫的引入,下面有個(gè)新的格式:

這里是博主提交的新的庫,供大家參考,每次通過編輯器打開修改時(shí)引號都會(huì)改變,需要注意,所以每次都需要重新復(fù)制正確的引號來替換變更的,小修改可以用vim打開,這樣引號就不會(huì)變了,升級版本時(shí),需要打tag,記得從打tag那一步開始,第一次會(huì)輸入賬號密碼,以后會(huì)提示授權(quán),允許即可。每次修改后記得一定要同步到github再繼續(xù)下一步操作。除了下面的一些資源文件導(dǎo)入外,還有第三方的支持,xib等的支持,詳細(xì)信息請查看:

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

//特別說明,里面的注釋是博主為了大家知道什么意思加的,實(shí)際使用時(shí)一定要去掉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"

//如果有多個(gè),后面加逗號隔開如:'UIKit','XXXXXX'

s.framework? ='UIKit'

s.requires_arc =true

s.dependency'SDWebImage'

end


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

另外這里再說一個(gè)坑:

這里的單引號注意看了,是不一樣的,下面的很明顯能看出來和上面圈起來的不同,用上面的那種,博主試了下,打不出來,那就復(fù)制,否則報(bào)錯(cuò),編輯通不過。切記!!!

4.驗(yàn)證編輯是否通過

podliblint LHHAlertView.podspec

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

后來博主在使用時(shí)又報(bào)錯(cuò)了,信息如下:

- 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

第一個(gè)錯(cuò)誤博主怎么找也沒找到,最后查找到原因是因?yàn)椴┲鲃?chuàng)建文件時(shí)第一次創(chuàng)建錯(cuò)了,把繼承與NSObject的類手動(dòng)改成了UIView,重新創(chuàng)建后不再報(bào)錯(cuò);第二個(gè)錯(cuò)誤是因?yàn)镸asonry在引入時(shí)系統(tǒng)提示我這么引入#import,應(yīng)該是#import"Masonry.h",但是這樣系統(tǒng)報(bào)錯(cuò),這是因?yàn)閜ods的緣故,build setting->ALways Search User Path ,設(shè)置為YES即刻。

5.打上tag,并提交到github

這里打tag一定要加上v,否則會(huì)出錯(cuò)

事實(shí)證明這里加不加v都沒關(guān)系,但是有一點(diǎn),tag一定要和podspec文件中的tag一摸一樣。至于有其他的寫法,博主嘗試過但是有問題,也許還有沒常識的,就不亂下結(jié)論了,按照博主提供的方法來寫不會(huì)有錯(cuò)。

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

//刪除本地tag接著

git push origin--deletetagxxx

//刪除遠(yuǎn)程tag,然后重新打tag


提交時(shí)會(huì)提示輸入賬號密碼,按照自己的github的賬號密碼來輸入。

成功后:

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

pod trunkpushLHHAlertView.podspec

//如果有警告 后面加?

--allow-warnings


這一步有可能會(huì)因?yàn)閜ods版本低而失敗,根據(jù)提示信息更新pods

成功后截圖:

7.搜索提交的庫

pod search LHHAlertView

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

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

總結(jié):要把自己的庫制作成通過pods導(dǎo)入還是有一定難度的,網(wǎng)上很多方法看著跟博主這里差不多,其實(shí)命令都一樣,但是卻有明顯的不同,那就是細(xì)節(jié)部分,比如引號,打tag時(shí)的v,目錄結(jié)構(gòu)等等,稍有不慎就可能通不過編輯,就說這么多,如果遇到問題,歡迎加群討論。

后來遇到的坑:

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

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

3.有時(shí)候在push時(shí)會(huì)遇到這樣的報(bào)錯(cuò):[!] There was an error pushing a new version to trunk: Net::OpenTimeout 不要驚慌,僅僅是因?yàn)榫W(wǎng)絡(luò)不好沒有push成功,不妨再試一次。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,993評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,990評論 2 374

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