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