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成功臣樱,不妨再試一次。