近期研究一些组件化,看了很多网上资料,都不是写的很清楚,所以就写了这篇文章,
本文参考了
iOS 组件化
CocoaPods 创建私有库
制作 CocoaPod
1.1 生成HJProgress组件
在指定文件夹然后执行下列代码, 其中 HJProgress 就是你自定义的一个工程名字,也就是你的其中一个组件或者业务模块
pod lib create HJProgress
你想用什么平台??[iOS/macOS] 操作系统
你想用什么语言??[Swift/ObjC]
是否要在项目中包含 demo 用来演示组件?[是 / 否]
您将使用哪些测试框架?[Quick / 无]
是否要执行基于UI的测试?[是 / 否]
然后根据提示,生成 pod 工程模板
并且打开 HJProgress 示例
工程里的 Example是展示 demo,同级文件夹HJProgress 下面 Assets 展示图片,Classes 展示你的文件(文件名称可改,在.podspec 设置就好),有个 ReplaceMe 的文件,意思就是要替换它,换成我们自己需要对外提供的类。
pod install
这个时候在 Development Pods 文件下会出现我们替换的文件,这就是本地开发的 pods 文件
至此,一个组件的本地库就创建完成了。
组件化在你选择需要演示 library 时候会创建,如果需要查看使用内容保留,不需要则慎重删除
组件化在你选择不需要演示 library 时候也会创建,此种建议直接删除下列文件
Example文件夹下内容、_Pods.xcodeproj文件
完成了本地 pod 依赖,但是我们肯定不会是个人开发,否则弄这个组件化的意义也不大,所以我们首先得提交到远程,一般公司里都会搭建私有仓库诸如 GitLab、码云等,这里就拿GitHub 来做演示。(注:码云、GitLab 和这操作一样)
在 GitHub 上 Create a new repository(注:我这边创建的是一个公开库,私人库和公开库会有些不同,我会再下面具体说明)
打开组件工程,打开HJProgress.podspec,首先先编辑一下 podspec 文件,修改你的version homepage source dependency,这一部分后续 cocoapods 都会再后面验证的,cocoapods 会出现 error 和 warnings,不过可以忽略 warnings
另外、非添加到 Assets 图片、xib、图片加载等需要另行设置,我再其他文章有说明,再此就不在一一说明
.podspec 的具体信息请自行查看 cocoapods官网
cd 到刚刚创建的组件下
依次执行
初始化 git (注:一般不用,首次创建会自动添加 git,没有上图.git文件时候需要初始化,command + shift + . 展示、不展示 隐藏的文件夹)
git init
提交初始化工程 (注:每次新增提交执行)
git add .
添加你提交代码的信息
git commit -m "init project"
接下来,我们要让这个组件化和刚才在 git 地址相关联 (仅关联一次)
git remote add origin https://github.com/Nevergive-up/HJProgress.git
然后,提交初始化工程到远端的 master
git push origin master
3.然后设置一下版本号(注:提交成功之后再设置版本号,要不然版本号会不对照的)
git tag 0.1.0
git push --tags
成功后,如果你使用组件化,并不准备发布到 cocoapods,请忽略下面的 5-6 步骤
5.接下来,使用 trunk 方式将代码发布到 CocoaPods 上,
在上传之前,最好先本地检查一下 podspec 是否合法:(注:这个要耐心等待一段时间)
执行下面语句,
pod lib lint --verbose
私人库执行下面语句 --allow-warnings 忽略警告
pod lib lint --verbose --allow-warnings
HJProgress passed validation.
如果出现 passed validation,说明通过,可以提交到 cocoapods 上了
如果没有,就需要看一下你的 .podspec 中哪里有 error 或者 warnings,改正之后再次验证
然后开始上传到 cocoapods:(注:这个要耐心等待一段时间)
pod trunk push HJProgress.podspec --verbose
私人库执行下面语句
pod trunk push HJProgress.podspec --verbose --allow-warnings
第一次使用,需要用邮箱注册
pod trunk register 邮箱 '昵称'
下面是我的注册方式,以及成功提示,提示后,你去自己邮箱点击链接就可以执行下一步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LVSptYfx-1659941908375)(https://upload-images.jianshu.io/upload_images/1162636-a8ea4b2e63e0bae3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
首次提交成功截图(注:虽然名称不对,我能说之前忘记截图了吗?总之,你首次上传成功之后出现这种的提示,)
6.成功后,就可以 pod search 到我们提交的库了,成功之后 cocoapods 也会给你发邮件通知的(无论是新建还是更新)
可以再
[cocoapods 的 spec 库中查看到] (https://github.com/CocoaPods/Specs/commits/master) 查到我们上传的库,无论上传还是更新、私人库还是公开库都可以搜索到
ps:如果搜不到,不是没传成功,是我们的本地搜索库没更新,可以先删除~/Library/Caches/CocoaPods 目录下的 search_index.json 文件或者 pod repo update 一下
终端执行。(注:私人库好像搜索不到,公开库我的也没有搜索到,我的公开库第二天才搜索到,大概要等一段时间吧)
这边有我创建库时候遇到过的问题:cocoapods 创建库的报错汇总
7.最后,私人库使用方法为:
pod 'HJProgress', :git=> 'https://github.com/Nevergive-up/HJProgress.git', :tag=> '1.0.0'
公开库需要先 pod repo update 更新下,就可以照常使用了
pod 'HJProgress'
删除 cocoapods 仓库见组件化cocoapods仓库删除(填坑)