如何为自己的库添加cocoapods支持
国际惯例,写在正文前面感慨下人生畅谈下理想,暴躁老猿可直接略过第一段😂😂😂
说来惭愧,做iOS开发两年多了,cocoapods
几乎是每个项目都会用的到第三方库管理工具,但是之前却只是用cocoapods
给自己的项目添加第三方库而没有想过如何为自己的库添加cocoapods
支持,最近公司项目需求要给第三方对接的团队写一个SDK,ok没问题,但是SDK完成后如何给对方呢?开始是直接打包发过去,这样目的达到了,但是,完美如我这样的猿总感觉缺点什么,沉思三秒后我就找到了问题所在,那就是,逼格不够高啊!直接发文件过去完全不符合本猿做事情逼格至上的信条啊!于是我就想到了cocoapods
,也就引申出了今天这篇文章,下面就让本猿给尔等说道说道这其中的欢(en)乐(yuan)趣(qing)事(chou)。
无论你是不是略过了第一段,本猿都要再啰嗦一句,做开发,看文档很重要看文档很重要看文档很重要!!!
1.在github为自己的库创建一个仓库
FaRnVH.png2.将刚创建的这个库拉取到本地
git clone https://github.com/xxxxx/-...-.git
拉下来后文件夹大概是这样子的:
FaoOnx.png3.然后将自己的要处理的库文件放入这个文件夹
Faoqj1.md.pngClasses
文件夹就是你要添加的库,然后推送至github远程仓库。
git add .
git add commit -m "为了被遗忘者!"
git push
注意:一般我们引用第三方库都是与版本号的就像这样:
pod 'Masonry', '~> 1.1.0'
后边的1.1.0就是版本号,所以我们的库也是要有版本号的,不然那岂不是看起来很山寨?这还怎么提高逼格呢???
git tag 0.0.1
git push tags
至此,我们已经将自己的库传至github,加入cocoapods
的前置工作也完成了。
4.创建spec文件 这是加入cocoapods的配置文件
注意:本猿就是在这个文件上吃了大亏,文件中的许多配置信息填充都有特定的语法,详情参见官方文档cocoapods
pod spec create TestLibrary
TestLibrary就是你的库的名字,文件内容大概是下图这个样子的:
FaobcR.md.png里边有很多配置内容,并且许多前边加了#进行了注释,而我们其实并不需要这么多配置信息,只需留下关键部分即可
Pod::Spec.new do |s|
s.name = "TestLibrary"
s.version = "0.0.1"
s.summary = "简单描述"
s.description = <<-DESC
比简单描述长一点的描述
DESC
s.homepage = "https://github.com/你的github/temp.git"
s.license = "MIT"
s.author = { "lazyloading" => "lazyloading@163.com" }
s.platform = :ios, "8.0"
s.source = { :git => "https://github.com/你的github/temp.git", :tag => "#{s.version}" }
s.source_files = "Classes", "Classes/**/*.{h,m}"
s.vendored_frameworks = "**/MySDK.framework"
大概需要的配置内容就是上述这些了,需要其他配置的参见官方文档cocoapods,下边解释下这些配置信息都代表什么:
- s.name : 你所创建的库的名字,比如Masonry,AFNNetworking等等
- s.version : 库的版本号
- s.summary : 简短的描述信息
- s.description : 比简短描述长一点的描述信息
- s.homepage : 你的项目主页,一般写github地址
- s.license : 遵守的协议
- s.author : 你的cocoapods账户 ,后边说明怎么创建
- s.platform : 支持的平台与系统版本
- s.source : 代码的路径,即在你的github中的路径,后边的tag就是第三步中我们所添加的tag,不写具体的版本默认为最新版
- s.source_files : 要引入的文件
- s.vendored_frameworks : 静态包的路径
注意:特别需要注意的是s.source_files
和 s.vendored_frameworks
的写法,本猿就在这里耗费了大把的光阴,啊,我的青春啊。
s.source_files
的写法默认大概是这样的s.source_files = "Classes/**/*.{h,m}"
其实就是你的库项目中真正要让第三方引入的文件的路径,本猿就因为路径错误失败了一次又一次,其中:
**是匹配所有的目录
*是匹配所有的文件
.{h,m}是匹配后缀为.h或.m的文件
并且podsepc文件必须要在你的库项目的根目录下,而s.vendored_frameworks
后边跟你的frameworks的路径(如果你的库是以frameworks形式导入的话,这个字段必须加,否则不需要),本猿一开始是是将所有代码都开放出去,所以没有写这个配置信息,后来因为某些原因打算将文件打包成frameworks发布出去,就添加了这个字段。
所有这些信息配置完成后我们来验证下配置信息的正确性:
pod spec lint TestLibrary.podspec --allow-warnings
或者不进行验证直接发布到cocoapods
:
pod trunk push TestLibrary.podspec --allow-warnings
后边的--allow-warnings
是可选参数:
--allow-warnings 打印警告信息⚠️
--verbose 打印错误信息❌
如果你进行了验证并且通过,我们要将修改后的项目信息提交到github:
git add .
git commit -m "修改spec"
git push
如果没有进行验证选择直接发布到cocoapods
你会发现失败了?为什么呢?因为我们还没与注册cocoapods
啊,是不是觉得我巴拉巴拉说了这么一大堆这么重要的信息为什么前文没说?因为本猿喜欢在遇到错误后去去寻找问题原因,这样记忆才更深刻,好了下边说如何注册cocoapods
:
pod trunk register lazyloading@163.com lazyloading --description="为了希尔瓦娜斯!" --verbose
其中邮箱必须真实有效,因为会给你发验证邮件,lazyloading就是你的昵称,description后边跟的是描述信息如果收到邮件确认成功我们可以查看账户信息:
pod trunk me
不出意外会出现类似如下信息:
FaoH39.png
这就说明你注册成功了(一般都会成功,如果不成功你要好好回想下是不是今天没有扶老太太过马路)
ok,到这里我们github仓库也创建了,库文件也传上去了,spec配置信息也编写完成,账户也有了,是不是就差最后一步了呢?对,就是将这所有的操作转化为成果的一步:
pod trunk push ZMTestLibrary.podspec --allow-warnings
最后一句代码敲完是不是感觉一切都变得索然无味了呢,不要慌,以我的经验,一般这一步都会出错,错误原因不外物spec配置信息不对,那么你就要根据错误信息好好排查问题出在哪了,我耗费时间最多的地方就是s.source_files
和s.vendored_frameworks
路径写错。
如果没有报错你将会看到类似如下的信息:
Faooh4.png小伙子可以啊,居然一发入孕,后生可畏后生可畏啊哈哈哈哈哈
哦,忘了说一点,也许你会问为什么编写spec文件时候s.name
明明写的TestLibrary
后边成功后显示的却是ZMTestLibrary
呢?其实啊,是因为本猿为了写这篇文章又重新走了一遍流程,而发布的库名字不能相同所以就换了个名字,毕竟给你们写教程不能误人子弟不是,不然背后岂不是要骂本猿不厚道,有坑不说写的什么玩意这是....
那么,库也发布成功了,下一步当让就是见证奇迹的时刻啦,我们来一起搜索下看能不能搜到
pod search ZMTestLibrary
敲这句代码时候是不是激动的手都在颤抖呢。不过不要慌,一般不会立马搜到的,一般都会报如下错误:
[!] Unable to find a pod with name, author, summary, or descriptionmatching '······'
FaoWn0.jpg
那是因为cocoapods
处理需要一定的时间,这个不好把握,运气好的话几分钟完事,运气好的话,得嘞,您明儿个再来看吧。你如果对自己的人品和运气非常有自信却还是没有收到,不要慌,我们来更新下pod本地索引
pod setup
这一步安装过cocoapods
的小伙伴都知道,可能要费点时间,啊,我宝贵的光阴啊。
如果这一步结束还么搜到,依然不要慌,删除本地cocoapods
缓存的本地索引文件
rm ~/Library/Caches/CocoaPods/search_index.json
完了之后再次执行
pod search ZMTestLibrary
cocoapods
会重新建立索引文件,不出意外你就会看到类似如下的信息:
至此,将自己的库添加cocoapods
已经全部走完,你以为这就结束了吗?不不不,少年,忘了我们最开始我那段废话说的什么了吗?当然是在项目中引入使用啊,之前是只会用不会加总是拿来主义,现在添加也有了,是时候检测一波成果了
创建一个项目,添加pod信息,这里我就不说明了相信大家能看到这里都懂的,pod用的都不是一次两次了,
最后:
pod install
走你
不出意外你会在项目中看到这样的信息:
Faoh7T.png完美,逼格终于又提升了一截,嘴角不自觉扬起了迷人的弧度
Fao5AU.jpg到这里本篇文章要讲的内容就已经全部结束了,虽然不是很难的操作,但是对于某些开发者来说没有需求就不会有去学习去探究的动力,无论是多么浅显的知识即使是1+1=2,你不去接触就永远不会,并且不断地接触学习新的东西,才会让人生变得越来越有意思不是吗?
网友评论