5.制作一个CocoaPods开源库
5.制作一个CocoaPods开源库
通过CocoaPods,我们可以更加方便的管理自己平时用到的一些工具类或者库,平时我们接触最多都是一些开源的第三方库
1.CocoaPods原理和概念
CocoaPods是用来管理包的,它只负责存储代码一部分的信息,并不直接管理代码。所以我们需要两个仓库,一个是用来托管CocoaPods的配置文件(官方的repo),另一个用来存储代码。
1.1 工作原理
CocoaPods通过.·文件来搜索代码库,其所有配置文件托管在Main Repo。
1.2 概念
.podspec:该文件为代码库的描述文件,CocoaPods通过其中相关配置对Git代码库进行索引及下载。
2. 制作支持CocoaPods的开源库
2.1 新建一个Git仓库用于存储代码
注意记得要选择MIT开源协议
2.2 关联本地代码
1.初始化Git仓库
git init
2.把文件添加到版本库中,使用git add .添加到暂存区中,不要忘记后面的小数点,意为文件夹下所有文件
git add .
3.使用git commit,把文件提交到本地仓库。引号内为提交说明
git commit -m '初始化Git仓库'
4、关联到远程库
git remote add origin 远程仓库地址
5、获取远程库与本地同步合并(如果远程库不为空必须做这一步,否则后面的提交会失败)
git pull --rebase origin main
6.将本地仓库代码推送到远程仓库(可跳过,放到后面推送)
git push origin main
2.3 编写podspec
1.创建podspec文件并关联
pod spec create CZFilterMenu
2.编辑podspec文件
Pod::Spec.new do |spec|
# 库名称
spec.name = "CZFilterMenu"
# 对应Github中的tag
spec.version = "0.0.8"
# 是否开启ARC
spec.requires_arc = true
# 这里只支持iO,且指定了最低版本(可省略)
spec.platform = :ios, "10.0"
# 支持多个平台使用时
# s.ios.deployment_target = "x"
# s.osx.deployment_target = "x"
# s.watchos.deployment_target = "x"
# s.tvos.deployment_target = "x"
# 库的简介
spec.summary = "模仿贝壳找房下拉菜单"
# 库的具体描述,可以不写,但写了就一定要比简介长
spec.description = <<-DESC
模仿贝壳找房下拉菜单,支持一、二、三级列表,自定义输入等
DESC
# 库的介绍页面,一般就是github中的项目地址
spec.homepage = "https://github.com/JQZhangC/CZFilterMenuView"
# 开源协议,采用MIT即可
spec.license = { :type => "MIT", :file => "LICENSE" }
# 作者信息
spec.author = { "CZ" => "cooper_jx@126.com" }
# 库的git地址,需要的是git地址不要和介绍页面搞混
spec.source = { :git => "https://github.com/JQZhangC/CZFilterMenuView.git", :tag => "#{spec.version}" }
# 当前目录是podspec文件所在的目录
# source_files(包括次级文件夹)使用的都是相对路径,这里就是CZFilterMenu.podspec所在的目录
# 指明git项目哪些文件会被cocoapods引用
spec.source_files = "CZFilterMenu", "CZFilterMenuView/CZFilterMenu/*.{h,m}"
# 次级文件夹,如果有些问下是在文件夹中的话,一定这么写
# Helper为文件夹名,ss可以看错是别名(指代使用),source_files指明次一级文件的路径
# 必须要使用end结束
spec.subspec 'Helper' do |ss|
ss.source_files = 'CZFilterMenuView/CZFilterMenu/Helper/*.{h,m}'
end
spec.subspec 'View' do |ss|
ss.source_files = 'CZFilterMenuView/CZFilterMenu/View/*.{h,m}'
end
# xib文件和图片文件
spec.resource_bundles = {
'CZFilterMenuResource' => ['CZFilterMenuView/CZFilterMenu/View/*.xib','CZFilterMenuView/CZFilterMenu/*.xcassets']
}
# 忽略文件,目标路径(相对路径)下的文件不进行下载
#spec.exclude_files = ""
# 库中用到的框架或系统库(没用到可以没有)
spec.ios.frameworks = 'Foundation', 'UIKit'
# spec.framework = ""
# spec.frameworks = "", ""
# spec.libraries = "",""
# 使用到的第三方库
# spec.vendored_frameworks = ''
# spec.vendored_libraries = ''
# 如果你的库依赖其他的 Podspecs,可以添加这些依赖项,例如
# spec.dependency 'AFNetworking', '~> 3.2.1'
end
2.4 本地验证
pod lib lint --allow-warnings
2.5 设置tag并上传
git tag xxxx
git push --tags
2.6 远程验证
pod spec lint --allow-warnings
2.7 验证通过后进行发布
pod trunk push CZFilterMenu.podspec
如果报错,没有注册的话,需要先注册(需要邮箱验证)
pod trunk register email@xxx.com "username"
2.8 pod search
发布成功后,进行pod search,一般来说都是搜索不到的:
第1种: pod repo update
第2种: rm ~/Library/Caches/CocoaPods/search_index.json
然后再搜索就可以搜索到了
pod search CZFilterMenu
3. 升级库
升级库也比较简单,将新的代码推到Github上,打上tag,修改CZFilterMenu.podspec
到没有错误,然后pod trunk push
即可