本文将记录如何为自己的模块添加CocoaPods支持。
1、将所需要添加CocoaPods支持的模块代码和Dmeo提交到GitHub
注意:在创建 GitHub 仓库的时候,下面的 License 许可证 必须选择 MIT License ,不能为 None ,否则验证会报错,在下面会用到。
上传完了后LICENSE文件一定要有,目录结构如下:
2、创建podspec文件
用终端 cd
到你的项目目录并执行以下命令:( CLTool
的位置换成你框架的名称,也是之后 pod search
的名称)
|
|
这里可能会报错:
|
|
这是Mac升级系统导致,当你的Mac系统升级为 high siera的时候,别忘记更新cocoapods
。
执行命令:
|
|
创建podspec
文件成功后这时候目录里会有个CLTool.podspec
文件
3、打开podspec文件编辑
这一步非常重要,能不能验证通过就主要看这个文件的内容编辑是否正确了。
我是用Subline Text打开的,语言格式选择Ruby。下面是我设置的CLTool.podspec
:
|
|
部分字段解释
|
|
如果要设置更多字段请点击这里
4、验证 podspec 文件
podspec
文件修完完成以后,command + s
保存一下,接下来开始验证。
依旧用终端 cd 到你的项目目录,刚才终端没关的话,就直接执行以下命令:
|
|
如果提示只有 warning
错误,并提示 but you can use '--allow-warnings' to ignore them
的话,就执行以下命令忽略 warning
来验证:
|
|
如果提示有 error
错误的话,就必须按照提示将错误解决掉,大多数都是 podspec
文件信息编辑有误,解决完后重新进行验证,如果提示信息不足,可以执行以下命令以获取更多错误信息:
|
|
如果出现如下图的CLTool passed validation.
就是验证成功了。
如果是 Swift
程序,有时候验证会报一大堆错误,原因是 xcodebuild
编译时使用的 Swift
版本和你代码当前使用的版本可能不一样,这时候就需要指定一下 Swift
版本,指定方法是在 podspec
同目录下创建一个 .swift-version
的文件,在里面写上 Swift
版本即可,例如 4.0 ,在终端输入以下命令也可以创建,创建完以后在执行 pod lib lint
就可以编译通过了。
|
|
5、给项目打上Tag版本
因为 CocoaPods
是依赖项目的 tag
版本的,所以必须打上 tag
版本。
podspec
文件验证成功后,先将改动后的文件 commit
提交,接着 push
推送到 GitHub
。
然后执行以下命令打上 tag
版本,版本名必须要和之前podspec
文件中的 s.version
一致。
|
|
6、注册trunk
如果只想发布到私有 CocoaPods
仓库,可以跳过 6、7、8
步直接看第 9
步。
注意: trunk
需要 CocoaPods 0.33
版本以上,如果版本太低,就先把 CocoaPods
版本升级一下,具体怎么升级这里就不说了。
已经注册过 trunk
的就不需要注册了,执行以下命令查看自己有没有注册过:
|
|
如果没有就执行以下命令来注册 trunk
,前面填写你的个人邮箱地址,后面填写你的英文名字。
例如:
|
|
执行注册命令完成之后,会验证注册邮箱,给你填的邮箱地址发送一个邮件,进入邮件打开里面的链接,弹出网页后就注册成功了。
7. 发布到 CocoaPods
依旧先 cd
到你的项目目录,接着要注意的是,发布时会再次验证你的 podspec
文件,如果刚才验证时使用了 --allow-warnings
,那么发布的时候也应该使用,否则会出现相同的报错。
如果刚才是用 pod lib lint
验证成功的,就执行以下命令发布:
|
|
如果刚才是用 pod lib lint --allow-warnings
验证成功的,就执行以下命令发布:
|
|
8、验证一下是否能搜索到
执行以下命令搜索你的 pods
库:
|
|
若是 trunk push 成功了,却搜索不到自己的框架,解决方法参考这篇文章。
9. 发布到私有仓库
发布之前需要先创建一个用来存放私有库的 Git
仓库,然后将仓库 git clone
到 ~/.CocoaPods/repo
这个目录。
然后在终端输入pod repo
就可以看到除了有一个 master
的官方库以外,还多了一个自己的私有仓库。
然后依旧先 cd
到你的项目目录,接着要注意的是,发布时会再次验证你的 podspec
文件,如果刚才验证时使用了 --allow-warnings
,那么发布的时候也应该使用,否则会出现相同的报错,fmone
是我自己私有仓库的名字,需要改成你自己的名字
如果刚才是用 pod lib lint
验证成功的,就执行以下命令发布:
|
|
如果刚才是用 pod lib lint --allow-warnings
验证成功的,就执行以下命令发布:
|
|
如要项目中要使用私有仓库来 pod install
,必须在 podfile
开头指明私有仓库的地址和官方仓库地址,注意两个地址都要指定,例如:
|
|
10. 私有库依赖私有库
这个情况就比较特殊了,如果私有库中依赖了另一个私有库,podspec
文件中依旧要使用 s.dependency 'xxx'
来指明依赖的私有库,但是在验证 podspec
时就不能使用 pod lib lint
来验证了,否则会找不到依赖的私有库,需要从远程验证并指定私有库的地址,下面是验证步骤。podspec
文件的编辑没有区别,编辑完以后,由于需要远程验证而不是本地验证,所以需要先将编辑完的 podspec
文件 git push
再打上 tag
。
然后使用以下命令开始验证,后面指明私有仓库的地址和官方仓库地址,注意两个地址都要指定。
|
|
验证成功后发布到私有仓库时,也需要指明私有仓库的地址和官方仓库地址,如下。
|
|
总结:
只要 podspec
文件编辑正确,就会少走很多坑。
当要更新模块的时候只需要修改 podspec
文件中的 s.version
版本
然后重复4、5、6、7
步骤。