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"

发布成功

发布成功后,进行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即可

4. 参考资料

CocoaPods的资源管理和Asset Catalog优化

posted @ 2020-12-03 21:52  小小个子大个头  阅读(157)  评论(0编辑  收藏  举报