最近需要在Cocoapods上发布SDK,虽然在之前的公司也弄过本地私有库,但是相比较发布到 Cocoapods 上还是有一些差别的,下面列举一些要点。
- 验证本地 podspec 文件的合法性:pod spec lint XXX.podspec
- 验证合法性通过之后将其推送到Cocoapods上,pod trunk push XXX.podspec
- 获取本地Cocoapods 的缓存:pod cache list
各个文件夹的作用如下图:
- 搜索并安装Cocoapods上的某一个库,大致执行流程为:
1、从search_index.json中找到该库对应版本的podspec文件并将其下载到Specs/Release文件夹中
2、根据该库的podspec文件中的source中的git地址,将对应版本的库下载到Pods/Release文件夹中 - 将本地自己开发的库推送到Cocoapods仓库时,大致执行流程为:
1、执行 pod spec lint XXX.podspec 时,如果没有依赖其他库时,会在 Specs/External文件中该库生成对应版本的 podsepc 文件,并对其文件名进行hash
2、将该podspec文件中对应的库下载到Pods/External文件夹中
3、如果发布的库依赖其他Cocoapods上发布的库时,会将依赖库的podspec文件下载到Specs/Release 文件夹中,依赖的库下载到 Pods/Release文件夹中
如何修改线上某一个指定版本的库(不重新发布新的版本)
如果发现发布到Cocoapods上的某一个版本有问题,但是又不想重新更新版本号该如何处理呢?主要步骤如下:
- 将修改后的库重新推送到远程仓库上
- 删除之前版本的本地tag以及远程tag
- 重新打tag并且推送到远程
- 将Cocoapods上该库的指定版本移除掉
- 本地验证podsepc文件,验证通过后推送到Cocoapods仓库
- 此时会发现,如果直接从远程仓库上下载修改后的库,集成到项目中修改的地方生效了,但是如果是直接通过pod导入的话,发现修改并没有生效,主要原因在于对应同一个版本的库,由于之前安装过,本地有缓存,所以不会再去重新下载修改后的相同版本的库,此时直接删除本地缓存即可
清除本地安装的Cocoapods的缓存
pod cache clean --all :清除 Pods 文件夹
移除 pod 官方库中的某一个版本
pod trunk delete XXX versionName
也可以放弃整个pod的所有版本。
pod trunk deprecate PodName
需要注意的:
- 邮箱的问题,首次推送会对注册的邮箱进行验证,点击打开邮箱中的链接才能推送成功
- XXX.podspec 中的版本号与仓库的tag必须对应上才能验证通过