前言:
之前写完**EWPhotoPicker**后尝试上传CocoaPods,毕竟通过CocoaPods管理要更方便,在上传过程中遇到了各种各样的问题,虽然网上攻略很多,但是有的有时效性的问题,也有的可能没有遇到我所遇到的问题,所以就想把这次上传方式总结出来,也算做个笔记,给大家个参考.
一,创建一个项目并上传GitHub.
先把项目功能实现,大家应该都能理解,实现功能后把自己所做的库用一个文件夹装起来,记得包含.bundle资源文件.
上传git我使用的是GitHub Desktop,方式我这里就不赘述了,不管是用命令行上传,source tree上传都无所谓.
保证Github上有这个项目就可以了.
二,新建.podspec描述文件.
将终端CD到项目路径,之后输入
pod spec create EWPhotoPicker
create后面跟着的就是项目名称.
指令完成后项目目录下会多一个EWPhotoPicker.podspec文件
我们需要编辑这个描述文件,内容如下:
Pod::Spec.new do |s|
# 项目名称,也就是pod使用这个库时候的名称
s.name = "EWPhotoPicker"
# 版本,自己定一个版本迭代就行,如果要更新就把其版本号往上加
s.version = "0.0.7"
# 主要标题
s.summary = "a swift photo picker"
# 详细描述(必须大于主要标题的长度)
s.description = <<-DESC
一个自定制的实现首个cell是相机的相册
DESC
# 仓库主页,之前项目上传后获取的项目网址
s.homepage = "https://github.com/Wangliquan/EWPhotoPicker"
# MIT许可证,这个就这么填不用改
s.license = "MIT"
# 作者信息,填写自己的信息
s.author = { "wangliquan" => "wang197200@163.com" }
# 支持的ios版本
s.platform = :ios,'8.0'
# 仓库地址,也是上传后获取的git地址,tag获取写法表示以版本号作为tag
s.source = { :git => "https://github.com/WangLiquan/EWPhotoPicker.git", :tag => "#{s.version}" }
# 自己编写的库在项目中的路径,这个要注意下,下面我会详细说明
s.source_files = "EWPhotoPicker/EWPhotoPicker/*.swift"
# 调用的framework
s.framework = "UIKit","Foundation","Photos"
# 使用arc
s.requires_arc = true
# 资源文件路径
s.resource = "EWPhotoPicker/EWPhotoPicker/EWPhotoPicker.bundle"
# 使用的swift版本
s.swift_version = '4.2'
end
s.source_files这个刚开始我就走到了坑里,这个路径是在项目中你所想要上传的库的文件路径,因为我建立项目时候没想那么多,所以全叫EWPhotoPicker了,填写时候就有点乱.最终我填写的路径是
s.source_files = "EWPhotoPicker/EWPhotoPicker/*.swift"
路径最后的*.swift代表着所有swift文件.如果是OC的话则是*.{h,m}代表所有.h和.m文件.
配置文件基本就是这样,编辑完保存后,使用
pod lib lint
来检测文件是不是符合规则,如果显示error,则根据提示进行修改,如果是warning,我建议也看一下,对能够修改的提前修改,也可以用过–allow-warnings来忽略.
三,将.podspec文件上传到github,并把tag传到github.
之前填写配置文件时有提过,cocoapods获取tag就是库的版本,所以我们需要保证配置文件中的s.version与项目的tag相同.
所以我们先在终端中为库添加tag.
git tag 0.0.1
再将tag上传到github中
git push origin 0.0.1
一定要保证这个tag与配置文件中的s.version保持一致,更新时候也是如此.
四,注册trunk,并使用trunk上传到CocoaPods.
在终端中输入如下指令注册trunk.
pod trunk register 邮箱 '用户名' --verbose
点击邮箱的验证连接.就注册成功了,之后可以输入指令来进行验证.
pod trunk me
只要正确显示了类似信息,我们就可以上传库了.
输入如下指令.
pod trunk push EWPhotoPicker.podspec
如果报了warning,可以使用–allow-warnings来忽略
pod trunk push EWPhotoPicker.podspec --allow-warnings
如下显示就代表上传成功啦!撒花!
五,其他问题.
1.上传成功后搜索不到.
上传成功后,我们使用
pod search EWPhotoPicker
没有找到自己的库,这是因为本地的CocoaPods没有更新,只要调用下
///更新本地索引库
pod setup
///删除旧的检索索引文件
rm ~/Library/Caches/CocoaPods/search_index.json
之后在search就能找到了.
2.上传的库测试使用时发现库内的类找不到
有可能是因为权限设置的问题,我们需要外部引用的类与方法都必须用public或者open前缀来保证允许外部引用.
3.bundle文件的获取方式.
/// 获取图片
public struct EWBundle {
static public func imageFromBundle(_ imageName: String) -> UIImage? {
var bundle = Bundle(for: EWPickerManager.self)
if let resourcePath = bundle.path(forResource: "EWPhotoPicker", ofType: "bundle") {
if let resourcesBundle = Bundle(path: resourcePath) {
bundle = resourcesBundle
}
}
if let image = UIImage(named: imageName, in: bundle, compatibleWith: nil){
return image
}
return nil
}
}
4.更新问题
更新库非常简单,只要把更新下配置文件中的version,然后连同代码变更一块提交到github远程,然后再重新打个tag,保证与version相同,再将tag上传到github远程.
最后再执行一次
pod trunk push EWPhotoPicker.podspec --allow-warnings
总结:
至此文章全部结束,这个上传过程刚开始做时候可能会觉得有些繁琐,但了解步骤后其实还好,之后更新版本之类的操作就很简单了,有问题欢迎探讨.
另:
我上传的库是一个自定义相册,实现首个cell是相机的功能,有兴趣的可以看下.
git地址: EWPhotoPicker