写这篇文章的主要目的是方便自己查阅...如果恰好能够帮到你那就太好了!
按照下面的步骤操作后,最终的结果应该是:在任何一个iOS项目中都可以使用CocoaPods安装使用提交的组件库。
接下来就以名为“TRectDetector”的组件为例:
一、准备代码和资源文件
准备需要提交的代码和图片资源,在实际操作中注意2点:
1、若提交的代码中引用了其他的CocoaPods库,把import <> 改成 import "",例如:import <Masnory.h>改成import "Masnory.h"
2、代码和图片资源最好都添加特有的前缀,避免其他项目引入时出现同名文件冲突
二、创建组件工程
1、创建组件工程
cd ~/Desktop
mkdir TRectDetector #创建一个文件夹
cd TRectDetector/
pod lib create TRectDetector #pod lib create 组件名
执行命名后,按照提示完成工程的创建,创建完成后会自动打开此工程
注:为了不混淆名称,都使用TRectDetector
2、导入组件代码
将准备好的代码和图片资源分别放入Classes和Assets目录下
三、创建github仓库
登录github并创建一个名为TRectDetector的仓库,拷贝地址:https://github.com/RainyMask/TRectDetector.git
注意不用勾选生成README文件,因为我们创建的组件工程中有README文件
四、配置组件的.podspec文件
找到组件工程的.podspec文件,修改相关的配置项:
s.version 版本号
s.summary 摘要
s.homepage 这里填写自己github的主页地址
s.source 填写创建的github仓库地址
s.source_files 代码位置
s.resource_bundles / s.resources 静态资源位置
s.dependency 依赖的其他CocoaPods库
s.subspec 子库(s.subspec '子库’名称 do |别名|),使用时 pod "TRectDetector/Child"
s.subspec 'Child' do |c|
c.source_files = ''
c.dependency 'AFNetworking'
end
五、导入组件代码并运行Example项目
在Example目录下执行 pod install 命令,可导入组件代码如图所示,注意此时Podfile中并没有使用use_frameworks!。
OC项目中一般不使用use_frameworks!,如果使用swift或者dynamic frameworks才添加这行
导入组件代码之后,我们就可以对组件写一些测试代码或者做一个演示的demo。
六、提交代码到github仓库并设置tag
#cd到工程根目录下
git add .
git commit -m '创建组件'
git remote add origin https://github.com/RainyMask/TRectDetector.git
git push -u origin master -f # 后续提交直接使用git push就可以
#到此代码已经提交到github的master分支上了,接下来创建tag
git tag '0.1.0'
git push origin --tags
注意这里设置的tag需和.podspec文件中配置的s.version的值保持一致
这里插入一点git tag的常见用法:
git tag '0.1.0' / git tag -a '1.0.0 -m '第一版' #创建tag
git tag #查看tag
git show 0.1.0 #查看分支备注信息
git push origin —tags #将本地tag提交到远程仓库
git fetch origin tag 0.1.0 #获取tag对应的版本
git tag -d 0.1.0 #删除本地tag
git push origin :refs/tags/0.1.0 #覆盖远程的tag,顺序执行这两步可实现删除tag的效果
七、两个验证命令
对代码进行验证,确保无误后再上传。如果验证通过会提示 passed validation,不通过则需要根据错误提示进行修改,然后更新代码和tag。
#验证代码的正确性:
#pod lib lint 用于验证本地的代码
#pod spec lint 对本地和远程代码都验证
#<组件名>.podspec 如果在项目根目录下执行不需要添加此参数
#--verbose 显示详细错误原因
#--use-libraries 使用静态库或者是framework
#--allow-warnings 允许警告存在
#cd到项目根目录下
pod lib lint --use-libraries --allow-warnings
pod spec lint --use-libraries --allow-warnings
#验证时间较长,需等待一会儿
八、上传至公共索引库
终端执行命令 pod trunk me,若未注册执行注册命令:
# pod trunk register 邮箱 '用户名' --description='描述'
# 这里的邮箱和用户名使用github的即可
pod trunk register 12345@163.com 'tt'
# 执行命令后 查收邮件,点击或者复制链接打开即可
pod trunk me #此时可以看到已注册信息
# cd到项目根目录下,执行上传操作
pod trunk push --use-libraries --allow-warnings
# 成功后使用pod search 查找确认上传成功
# 如果搜索不到或者报错,执行 pod repo update 或者 执行 rm ~/Library/Caches/CocoaPods/search_index.json 删除.json文件再进行搜索
pod repo update
pod search TRectDetector
至此,创建一个新的iOS项目,在Podfile中添加一行 pod 'TRectDetector' 然后执行 pod install 就能使用了。
======================= 分割线 ================
进行完第八步,我们的组件就可以通过CocoaPods集成到项目里面了。但是这个组件是对所有人都公开的,如果其中包含一些敏感信息或者只想在公司内部使用,并不想公开,那么可以尝试下面的办法奥(我并没有试过)
所以我们现在的问题就是,怎么创建一个私有的组件,并且可以通过CocoaPods进行管理:
1、还是按照上面的1-7步,唯一区别在于我们不会把代码提交到CocoaPods的公共索引库里。
# 打开资源管理器
open ~/.cocoapods/repos
这里的master就是CocoaPods默认的索引仓库,它关联的远程索引仓库地址为:https://github.com/CocoaPods/Specs.git
接下来我们创建一个私有的索引库,就取名为MySpec吧
2、创建私有索引库
还是在github上创建一个git仓库吧,复制地址:https://github.com/RainyMask/MySpec.git
3、创建本地索引库并关联
# 执行命令
cd ~/.cocoapods/repos
pod repo add MySpec https://github.com/RainyMask/MySpec.git
这时候repos目录下会多出一个MySpec目录
cd到工程目录下,执行命令
# cd 到工程目录下执行
pod repo push MySpec --use-libraries --allow-warnings
命令成功执行后,可以看到MySpec目录下已经有内容了
4、使用
当然,像我这样已经将组件提交到公共索引库中去了,在pod install 时会有警告信息提示重复存在了
然后,针对use_frameworks和图片资源的加载问题,我另起一篇文章做为记录:CocoaPods组件,图片加载问题
最后附上TRectDetector链接地址: