前言
如果在开发iOS项目中使用过cocoapods,那么你肯定接触过一些知名的三方框架,比如AFNetworking、SDWebImage。其中的源码自不必说,你肯定或多或少的了解过维护这些基础库的开发者是如何发布这些框架的。如果你对如何发布一个框架到cocoapods还不是非常了解,那么本篇文章将值得一读!
步骤
1.创建&上传source文件
1.1. 创建模板仓库
1 | pod lib create 【要创建的私有库名称】 |
该命令是一个交互式命令。执行以上命令会在当前目录生成一个pod模板仓库(其实就是一个Xcode工程),该模板仓库主要包括一个测试工程和一个podspec描述文件。
1.2. 添加框架文件
如果文件已经写好,那么我们只需把代码文件拖拽到Classes文件夹下;如果文件未写好,只需要在Classes文件夹下新建文件即可。
1.3. 文件创建好后,执行 pod install
命令。
1.4. github创建远程库, 并把我们的模板仓库push到远程。
1.5. 打标签
1 | git tag xxx |
1.6. push标签
1 | git push —tags |
2.配置podspec文件
2.1. 配置podspec文文件(Xcode打开podspec文件)
1>修改s.version 为当前tag的版本号
2>修改s.summary
3>修改s.description 注:s.description要比s.summary长,否则会警告。
4>修改s.homepage 为框架的github地址,例如: https://github.com/wsv587/Popover
5>修改s.license 注:要和创建远程代码仓库时选择的协议一致
6>修改s.source 注:pod install 就是根据这个s.source安装的
7>修改s.source_files路径 相对podspec的路径
8>打开 s.requires_arc = true
注意
:pod spec文件中的s.version一定要和刚才打的tag一致。
2.2. 执行 lint 检查(可选),命令:
1 | pod lib lint |
该命令会对本地podspec文件的语法和正确性进行检查。
2.3. 执行spec 检查(必选)
1 | pod spec lint podspec文件名称 |
该命令会验证podspec文件配置的正确性。包括语法问题、s.source、s.source_files。也可以直接
pod spec lint
不需要加podspec文件名称,系统会在当前目录查找podspec文件。如果当前目录不存在podspec文件,则需要指定podspec文件的路径。例如pod spec lint ../xxx.podspec
注意
:pod spec lint 文件名称 命令是【进行远程校验】,所以必须要保证网络已连接
(1)校验podspec语法。然后校验s.source对应的链接是否可以访问。
(2)如果s.source可以访问,就根据远程podspec 中的s.version 对应的tag找到那个commit。然后,找到那个commit对应的代码校验s.sorce_files。
3.发布podspec说明文件
把pod spec文件上传到cocoapods远程官方索引库。这样其他开发者更新完cocoapods的master仓库后就可以获取到我们的podspec文件。然后就可以根据podspec说明文件中的s.version和s.source以及仓库地址获取到我们发布的source文件。
3.1. 注册trunk
1 | pod trunk register 邮箱地址 名称 --verbose |
例如: pod trunk register wanggyanmo@163.com ‘wanggyanmo’ –verbose
注册后会向我们注册trunk的那个邮箱发送一份邮件。需要登录邮箱进行验证。
注意
:每次更新pod仓库都要注册trunk,否则会报错。因为涉及到邮箱验证的问题,邮箱验证的目的是为了排除非本人操作,防止他人修改自己的三方库,错误如图:
3.2. 推送podspec文件到cocoapods远程仓库
1 | pod trunk push podspec文件名称 |
如果是在podspec当前目录下执行这个命令,可以省略pod spec文件名称。如果当前目录不存在podspec文件,则需要指定podspec文件的路径。例如
pod trunk push ../xxx.podspec
4.下载&使用三方库
来到这里,如果三方库发布成功,我们就可以通过pod search 仓库名称
来搜索到我们发布的仓库。
如果没有结果,需要删除~/Library/Caches/CocoaPods下的search_index.json,重新pod search 生成search_index.json(这个过程可能会持续几分钟,请耐心等待)。
后续更新中…