iOS 制作 pod 私有库详细教程

iOS 制作 pod 私有库详细教程

cocoapods 官网地址

1. 创建 pod 库

需要创建两个远程仓库, 一个做用来做私有库, 一个做工程库

  • 1.创建私有库 https://gitee.com/XXSpec.git
  • 2.创建工程库

方案一

  • 创建 pod
pod spec create PodName
复制代码
  • 编辑spec文件并执行
pod spec lint PodName.podspec
复制代码

方案二

  • 直接使用cocoapods创建
pod lib create PodName
复制代码
  • 或者指定 clone url地址
pod lib create PodName --template-url='指定clone url'
复制代码
  • 然后依次输入,执行即可
What platform do you want to use?? [ iOS / macOS ]
> iOS

What language do you want to use?? [ Swift / ObjC ]
> ObjC

Would you like to include a demo application with your library? [ Yes / No ]
> YES

Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None

Would you like to do view based testing? [ Yes / No ]
> No

What is your class prefix?
> ZX
复制代码

2. 添加代码和图片

  • ~/PodName/PodName/Classes 文件夹下添加所需要发布的代码
  • ~/PodName/PodName/Assets 文件夹下添加所需要图片

3. 编辑 podspec 信息

  • podspec 文件详细的描述了一个 pod 库的版本各种信息.
Pod::Spec.new do |s|
# pod 库名称
s.name             = 'PodName'
# pod库 版本
s.version          = '0.1.0'
# pod 简述 pod search 的时候显示
s.summary          = 'A short description of PodName.'
# 详细介绍
s.description      = <<-DESC
TODO: Add long description of the pod here.
DESC

# 项目主页 要填写可以访问到的地址,不然验证不通过
s.homepage         = 'https://github.com/zhaixingxing/PodName'
# 开源协议 必须要有
s.license          = { :type => 'MIT', :file => 'LICENSE' }
# 作者信息
# Pod 屏幕截图,支持单个或者数组,主要适用于UI类的pod库。cocoapods推荐使用gif
# s.screenshot  = '图片URL'
# s.screenshots = [ '图片URL','图片URL' ]
s.author           = { 'zhaixingxing' => '[email protected]' }
# 项目地址 不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS
s.source           = { :git => 'https://github.com/zhaixingxing/PodName.git', :tag => s.version.to_s }
# 多媒体介绍地址
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
# 说明文档地址
# s.documentation_url  =  'http://www.example.com/docs.html’

# 支持的版本
s.ios.deployment_target = '9.0'
# 支持的swift版本
# s.swift_version = ‘5.0'
# 是否使用静态库。如果podfile指明了use_frameworks!命令,但是pod仓库需要使用静态库则需要设置
# s.static_framework = true
#是否使用ARC,如果指定具体文件,则具体的文件使用ARC
# s.requires_arc = true   

# 资源文件
s.source_files = 'PodName/Classes/**/*'
#  s.source_files = 'Classes/**/*.{h,m}', 'More_Classes/**/*.{h,m}'
# 资源库文件
# s.resource_bundles = {
#   'PodName' => ['PodName/Assets/*']
# }

# 依赖的系统库 多个用逗号隔开
# s.frameworks = 'UIKit', 'MapKit'
# 依赖的第三方framework 后面是路径 
# s.vendored_frameworks = ['Module/*.framework']
# 依赖的第三方 .a 后面是路径
# s.vendored_library = 'Module/Classes/SDK/*.a'
# 依赖的 .a 多个用逗号隔开 
s.libraries = ['xml2.2','sqlite3.0']
# 依赖的第三方库
# s.dependency 'AFNetworking', '~> 2.3'
# s.dependency 'SDWebImage'

# 公开的头文件
# s.public_header_files = 'Pod/Classes/**/*.h'
# 指定不公开的头文件
# s.private_header_files = 'Pod/Classes/**/*.h'

# 自定义前缀文件 默认为系统 头文件
# s.prefix_header_file = false
# s.prefix_header_file = 'iphone/include/prefix.pch'
# 向系统 pch 文件中添加头文件 多个用逗号隔开 
# s.prefix_header_contents  =  '#import <UIKit/UIKit.h>' , '#import "Test.h"'
end

 #子模块
 s.subspec 'TestSub' do |ss|
     # 子模块文件, 文件信息如上
    ss.source_files = 'podName/Classes/TestSub/**/*'
end
复制代码
  • 文件目录结构

文件目录结构

4. 注册 Cocoapods 账号

  1. 查看是否创建过账号
pod trunk me
# [!] You need to register a session first.

复制代码
  1. 注册账号
pod trunk register  邮箱地址  ‘用户名’ --description='描述信息'  
复制代码
  • 注册完之后去邮箱打开邮件, 激活验证注册

  • 验证一下

pod trunk me

# 输出
- Name:     用户名
- Email:    邮箱 XX
- Since:    日期
- Pods:     XXXX
- Sessions: XXXX

复制代码

5 验证 pod 是否通过

  1. 本地验证
pod lib lint podName
# pod lib lint --verbose 显示详细的检测过程
# pod lib lint --allow-warnings 允许警告
复制代码
  1. 本地和远程验证
pod spec lint  podName

#pod spec lint podName \
--verbose --use-libraries --allow-warnings -- \
sources='https://私库.git,https://github.com/CocoaPods/Specs.git'

复制代码

6. 提交 pod

  • 提交
pod repo push 私有库 podName.podspec --verbose --use-libraries --allow-warnings
复制代码
  • 提交成功之后验证pod
# 执行 
pod setup

# 出现 Setup completed 说明执行成功

# 如果失败执行
pod search podName

#如果还是失败 ,执行删除pod的缓存
rm ~/Library/Caches/CocoaPods/search_index.json  
复制代码

7. 更新 pod

  1. 修改版本号 s.version = '0.1.1'
  2. 上传代码到远程仓库
  3. tag 等于 0.1.1
  4. 验证 pod 并提交

附录 podspec 参数

  • --allow-warnings: 忽略警告
  • --verbose: 显示更多调试信息
  • --silent: 显示所有信息
  • --use-libraries: 使用静态库安装
  • --use-modular-headers:OCSwift混编必须添加
  • --skip-import-validation:跳过验证pod是否可以导入
  • --skip-tests: 在验证期间跳过构建和运行测试
  • --use-json: 在将其推送到repo之前,将podspec转换为JSON
  • --swift-version=VERSION: 在标记规范时应该使用的SWIFT_VERSION.这优先于规范中指定的Swift版本或. Swift版本文
  • --help : 显示指定命令的帮助横幅

Guess you like

Origin juejin.im/post/7031191276493996039