美文网首页
如何制作自己的Pod库

如何制作自己的Pod库

作者: 々莫等闲々 | 来源:发表于2017-11-21 15:28 被阅读0次

    1、创建仓库:

    2、将仓库克隆本地:

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

    3、创建.podspes文件,此处命名为CZCTestCode

    $ pod spec create CZCTestCode

    4、在桌面CZCTestCode目录中创建工程(此处命名为CZCTestCode),创建共享的类

    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"创建版本 1.0.0."

    //打上标识

    $ git tag'1.0.0'

    //将标识push到github中

    $ git push --tags

    //将内容push到github 的master分支上,如果设置了tag,将在对应的tag上显示内容

    $ 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

    验证成功会出现以下提示:

    8、pod主干注册

    pod trunk register 2360219637@qq.com"czc"

    9、发布你的pod

    pod trunk push CZCTestCode.podspec

    这个过程等待时间较长,成功截图:

    10、完成,此时终端可搜索到自己创建的pod库

    补充:::::::::::


    记得一次面试有人问我有没有自己开源一些库,有是有的,但是确没有制作成可以通过pods导入的库,此乃一大憾事,后来跟着网上很多教程在那里捣鼓了半天,真的是半天时间,压根没用,今天无意间看到一篇博客,http://www.jianshu.com/p/489520b69d8b,参考了一下,有用,但并不是最正确的,里面有许多你不知道的坑等着你在跳,按照上面的步骤,基本和我以前看的一样,最后还是不行,经过俩小时的摸索,根据一些报错来查找原因,最后终于解决了这个问题,下面是博主刚刚创建的库:

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

    在看这个功能前,确定你会上传自己的项目代码到github,不会的可以看博主的文章:http://blog.csdn.net/codingfire/article/details/50387183

    下面来介绍下如何把自己的库制作成可以通过pod导入的库:

    上面那篇博客中的内容可以看下,为了保证正确,博主就重新在下面写命令:

    1.用户名邮箱注册,为github的用户名和绑定邮箱(下面的内容替换为自己的):

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

    如果报错,一般是pod版本低或者ruby的版本低,这里不再说明解决办法,自行百度。

    2.查看是否注册成功

    pod trunkme

    这样的就代表注册成功。

    3.创建 .podspec文件

    这里一定要在工程中创建 .podspec文件,并把库文件放在一个文件中,看一下博主的:

    LICENSE文件(必不可少)和README.md文件都要有,且必须和库问价放在一个目录。

    创建方法:

    pod speccreateLHHAlertView

    可以通过vim来打开文件操作,博主一般用电脑的文本编辑打开,打开后看到的内容有很多,博主只保留了基本的信息,如下:

    //特别说明,里面的注释是博主为了大家知道什么意思加的,实际使用时一定要去掉 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'

    //允许的最低系统使用版本

    s.ios.deployment_target = '7.0'

    //库文件路径

    s.source_files = 'LHHAlertView/*'

    end

    因为这里没有第三方库和系统库的引入,下面有个新的格式:

    这里是博主提交的新的库,供大家参考,每次通过编辑器打开修改时引号都会改变,需要注意,所以每次都需要重新复制正确的引号来替换变更的,小修改可以用vim打开,这样引号就不会变了,升级版本时,需要打tag,记得从打tag那一步开始,第一次会输入账号密码,以后会提示授权,允许即可。每次修改后记得一定要同步到github再继续下一步操作。除了下面的一些资源文件导入外,还有第三方的支持,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地址看下图:

    另外这里再说一个坑:

    这里的单引号注意看了,是不一样的,下面的很明显能看出来和上面圈起来的不同,用上面的那种,博主试了下,打不出来,那就复制,否则报错,编辑通不过。切记!!!

    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

    第一个错误博主怎么找也没找到,最后查找到原因是因为博主创建文件时第一次创建错了,把继承与NSObject的类手动改成了UIView,重新创建后不再报错;第二个错误是因为Masonry在引入时系统提示我这么引入#import,应该是#import"Masonry.h",但是这样系统报错,这是因为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版本低而失败,根据提示信息更新pods

    成功后截图:

    7.搜索提交的库

    pod search LHHAlertView

    然后就看到一开始的那张图了。

    这里再啰嗦几句,以博主的这个Demo为例,Demo里面已经有了库文件,但是在Demo同等级的目录中依然要放一个库文件,目前博主成功的文件目录就是这样的,podspec文件一定要和库文件在一个目录中,其他注意事项每一步都有介绍,一定要注意。

    总结:要把自己的库制作成通过pods导入还是有一定难度的,网上很多方法看着跟博主这里差不多,其实命令都一样,但是却有明显的不同,那就是细节部分,比如引号,打tag时的v,目录结构等等,稍有不慎就可能通不过编辑,就说这么多,如果遇到问题,欢迎加群讨论。

    后来遇到的坑:

    1.通过代码创建的podspec文件里面都是双引号,博主用的都是单引号,经测试,无影响,还有UIKIT等库和第三方库的引入,以及版本升级,这一部分已经放在这里

    2.发现一个问题,如果你在某个库中用了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 不要惊慌,仅仅是因为网络不好没有push成功,不妨再试一次。

    相关文章

      网友评论

          本文标题:如何制作自己的Pod库

          本文链接:https://www.haomeiwen.com/subject/kqrwvxtx.html