标签:「组件化」「Swift」
作者: vitoPang
审校: IGShare团队
使用Trunk上传Cocopods
Demo参考
初衷
- 完成团队KPI
- 自己的笔记整理,为后面自己的组件化铺路(这篇会作为之后我的" 我的swift项目组件化之路"的开篇)
- 分享给想要自制组件的iOS开发初学者,不必在基础工具使用上浪费时间,可以把主要精力放在自己的组件架构上
概述
至于什么是Cocopods这里就不介绍了,请坐传送门自行去了解,我门要介绍的是,怎么把你想要提供给广大iOS coder的服务(比如你封装的一些实用组件)放到Cocopods上面去,好让他们方便的集成到自己的项目中去
用流程图表示如下:(图片来自CocoaPod官方blog)
主要来说有以下4个步骤:
- 把你的项目上传到github
- 注册trunk
- 配置PodSpec
- 推送pod spec文件
一、上传项目代码
1、push项目源代码,cd到本地源代码的根目录,执行:
git add -A
git commit -m "Initial commit"
git push origin master
2、给你的源码打上tag,这是必要的,cocopods需要做的你的tag:
git tag '1.0.0'
git push --tags
二、注册trunk
trunk需要pod在0.33及以上版本,如果你不满足要求,打开Terminal使用ruby的gem命令更新pod:
sudo gem install cocoapods
更新结束后,我们开始注册trunk:
pod trunk register [email protected] '123456' --verbose
邮箱以及用户名请对号入座。用户名我使用的是Github上的用户名。--verbose参数是为了便于输出注册过程中的调试信息。执行上面的语句后,你的邮箱将会受到一封带有验证链接的邮件,如果没有请去垃圾箱找找,有可能被屏蔽了。点击邮件的链接就完成了trunk注册流程。使用下面的命令可以向trunk服务器查询自己的注册信息:
pod trunk me
三、配置PodSpec
这一步与更换trunk方式前的操作完全一样。什么是podspec描述文件呢?简单地讲就是让CocoaPods搜索引擎知道你的代码的作者、版本号、源代码地址、依赖库等信息的文件。任何支持CocoaPods的开源代码都必须有podspec文件。CocoaPods在github中用一个repo来管理所有支持CocoaPods的开源代码:https://github.com/CocoaPods/Specs。
那如何编写podspec文件呢?官方提供了一个模板并附有非常详细的注释说明。
建议直接拿一些成熟的开源库的podspec改就行,生成的模板里有很多冗余的属性。你也可以参考我门 Demo 中的 VTToastToolKit.podspec 文件
这里要注意一点,有时你写的podspec文件在后面push的时候会提示The source_files pattern did not match any file.
错误,但是能用pod lib lint命令做本地校验时又是OK的。为什么呢?上述错误的意思是pod在网络上根据你指定的路径找不到相关文件。这时候你要核对网上git仓库的路径与source_files(其他_files字段同理)要对应。*_files字段指的是网络git上的路径
四、 通过trunk推送pod spec文件
现在我们开始通过trunk上传你的podspec文件。先cd到podspec文件所在目录,执行:
pod trunk push VTToastToolKit.podspec
文件名自行对号入座。上面的代码做了三件事:(可以对着文章开头的流程图看)
验证你的podspec文件是否合法。在trunk方式之前我们一般用“pod lib lint”命令进行验证。
上传podspec文件到trunk服务器(其实最终也会自动添加到https://github.com/CocoaPods/Specs中)
将你上传的podspec文件转成json格式文件
执行上面的push操作,就相当于你把你的源代码提交给CocoaPods团队审核了。
注意:更新本地pod依赖
在trunk push后,先用"pod search"查找一下你的代码,有结果的话就没事;没有的话执行"pod setup"进行本地依赖库更新,再search。
podspec文件更新方法
有时你可能会遇到这种情况:执行pod trunk push操作后发现podspec文件的某个地方写错了,想更新一下。对于这种情况,我们可能会先尝试着在把podspec文件push一次。但是如果你的代码版本号没变(podspec里的version自然也没变)就会提示push失败,即使你更改了podspec的其他地方,pod也会认为这两个文件是同一个。 我目前为止找不到trunk的相关update接口,所以只能顺水推舟,更新源代码版本号(如:1.1.1->1.1.2),重新push version tag,然后再执行pod trunk push操作。