1. CocoaPods账户创建
注册trunk
pod trunk register 邮箱 '用户名' --verbose
注意:QQ邮箱可能收不到邮件,换了两个QQ邮箱,最终用了163邮箱。
去邮箱中打开邮件,点击链接,即注册成功
pod trunk me
// 查看注册信息,也可以查看自己发布的Pods
2. 创建库文件并上传到GitHub
2.1 创建私有模板库
在GitHub创建工程,这里以DDBaseModule为例,创建一个基础库,添加一些常用的宏和分类。
2.2 创建模板库
在你想要放的位置创建一个和组件同名的文件夹,比如DDBaseModule,然后使用下面命令:
cd DDBaseModule的路径
pod lib create DDBaseModule
然后根据情况,配置信息:
2.3 添加组件内容
创建完成后会自动打开Example项目,然后将库文件的相关代码文件拖到Class中替换ReplaceMe.m文件。
2.4 安装与测试本地库
在Podfile文件中:
pod 'DDBaseModule', :path => '../'
模板库已经在Podfile中指定了DDBaseModule.podspec的位置,使组件DDBaseModule可以正常安装使用和测试。
然后,cd到Example路径下,执行下面命令:
pod install
此时,我们已经将本地的组件添加到Example中了,接下来可以进行单元测试,确保组件的正常使用。
2.5 修改Specs并验证
- 修改
Specs文件 在测试确保组件的正常后,需要修改Specs文件,
主要修改内容
s.name = 'DDBaseModule'
s.version = '0.1.0'
s.summary = 'DDBaseModule.'
s.description = <<-DESC
DDBaseModule是基础组件库,包括分类和常用工具
DESC
s.homepage = 'https://github.com/DongliangZhao/DDBaseModule'
s.source = { :git => 'https://github.com/DongliangZhao/DDBaseModule.git', :tag => s.version.to_s }
s.source_files = 'LGMacroAndCategoryModule/Classes/**/*'
- 验证podspec的正确性:
本地验证,添加--allow-warnings忽略警告。
pod lib lint xxxx.podspec --allow-warnings
如果依赖了自己的库需要使用source的方式验证
远程验证
pod spec lint --sources='私有仓库repo地址,https://github.com/CocoaPods/Specs'
如果看到
xxxx passed validation.
就表示成功了
2.5 上传并打tag
- 上传
git add .
git commit -m '提交描述'
git remote add origin https://github.com/DongliangZhao/DDBaseModule.git
// 第一次push如果报错的话可以加上-f
// git push -f origin master
git push origin master
- 打
tag
标签0.1.0与spec中的s.version保持一致
git tag '0.1.0'
git push --tags
打tag, 发布一个release版本,成功之后即可在releases里面看到这个tag的版本
2.6 发布库的描述文件podspec给cocoapods
pod trunk push xxxx.podspec --allow-warnings
看到
这说明已经过了,接着就是等。
这里补充一下,创建私有库时,这里并不是使用trunk的方式提交,而是将podspec添加到私有索引库Sepc repo中,命名如下:
pod repo push PodSpec名称 Demo.podspec
3. 验证与维护
-
验证
搜索
pod search DDBaseModule
如果搜索不到,则执行下面命令:
rm ~/Library/Caches/CocoaPods/search_index.json
删除后,再search,出现下面的
Creating search index for spec repo 'master'..
稍等就会搜索到。
使用
pod 'DDBaseModule'
-
维护
如有错误或版本迭代,修改工程文件后推送到远端仓库后:
- 需要修改
podspec中的版本号 - 重新打
tag上传 - 再进行新一轮的验证和发布
我们还可以创建一个演示
demo工程来展示查看,并不会影响我们的pod库。 - 需要修改
4. 遇到的问题
4.1 pod 私有库依赖有OC pod库,更新私有库报错
解决方法:
push 时,添加--skip-import-validation,如下
pod repo push xxx[私有仓库] xxxx.podspec[私有库podspec] --allow-warnings --skip-import-validation --verbose
4.2 更新私有库成功,update不到新代码
解决方法:
可能导致的原因:
-
需要
pod repo update,更新本地私有库索引 -
在更新私有库操作时,私有库的
podspec中s.version和提交时的tag不一致,或者是终端提交代码有问题(被这个问题卡了好久,最终使用source tree更新提交代码,然后s.version和tag保持一致,再也没出现这个问题)
4.3 pod私有库 文件夹分层问题
如下:
#-------文件分层---------
s.subspec 'Base' do |base|
base.source_files = 'YXCommenBaseModule/Classes/Base/**/*'
base.dependency 'YXCommenBaseModule/BaseController'
end
s.subspec 'BaseController' do |controller|
controller.source_files = 'YXCommenBaseModule/Classes/BaseController/**/*'
controller.dependency 'YXCommenBaseModule/BaseModel'
controller.dependency 'YXCommenBaseModule/BaseView'
end
s.subspec 'BaseModel' do |model|
model.source_files = 'YXCommenBaseModule/Classes/BaseModel/**/*'
end
s.subspec 'BaseView' do |model|
model.source_files = 'YXCommenBaseModule/Classes/BaseView/**/*'
model.dependency 'YXCommenBaseModule/BaseModel'
end
s.subspec 'CustomView' do |model|
model.source_files = 'YXCommenBaseModule/Classes/CustomView/**/*'
#添加依赖 model.dependency '私有库名/依赖的文件夹名'
model.dependency 'YXCommenBaseModule/Base'
end
注意:
文件夹之间有相互引用时,需要添加依赖 model.dependency '私有库名/依赖的文件夹名'