一、远端仓库创建
公有库
注册 cocoaPods 账号
-
1.想创建开源的 pod 库,就要注册一个 cocoaPods 账号, 我们使用终端注册, email 用你的 gitHub 邮箱.
$ pod trunk register GitHub_email <githubEmail> --verbose
-
2.进行邮箱确认.
-
3.确认后
image$ pod trunk me
可以看到你的注册信息.
以上步骤执行一次即可
创建 gitHub 公有仓库
image私有库
- 创建方法与 '创建 gitHub 公有仓库' 类似, 选择为私有即可.(免费私有库可选码云)
创建私有版本管理库(repo)
- 1.首先创建一个 'MyRepo' 私有仓库来集中管理所有的私有仓库版本库(这个仓库只是用来管理版本, 不用来存储代码).
- 2.回到终端, 将这个远程的私有版本仓库添加到本地.
$ pod repo add MyRepo https://git.oschina.net/xxx/MyRepo.git
- 3.查看 Finder 目录 ~/.cocoapods/repos, 可以发现增加了一个 MyRepo 的储存库. image
创建私有代码库
image如果项目由他人创建,去要对应的 https 地址
二、本地仓库创建
- 1.终端 cd 到指定目录下
- 2.创建工程
pod lib create <XXXLoginModule>
Q1:What language do you want to use? [ Swift / ObjC ]
-> 输入对应
Q2:Would you like to include a demo application with your library? [ Yes / No ]
-> 输入 Yes
Q3:Which testing frameworks will you use? [ Specta / Kiwi / None ]
-> 输入 None
Q4:Would you like to do view based testing? [ Yes / No ]
-> 输入 No
Q5:What is your class prefix?
-> 输入 <项目前缀>
三、与远程仓库关联
git remote add origin <https>
git pull
git branch --set-upstream-to=origin/master master
git pull origin master --allow-unrelated-histories
如果出现错误, 参见 '常见问题汇总'
四、编辑 podspec 文件
Pod::Spec.new do |s|
# 名称
s.name = 'XXModule'
# 版本号
s.version = '0.0.1'
# 摘要
s.summary = 'A short description of XXModule.'
# 描述
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
# 主页
s.homepage = 'https://gitee.com/xxx/XXModule'
# 执照
s.license = { :type => 'MIT', :file => 'LICENSE' }
# 作者
s.author = { 'xiaoming' => 'xxx@163.com' }
# 文件源(公/私有库 统一使用 https 即可)
s.source = { :git => 'https://gitee.com/xxx/XXModule.git', :tag => s.version.to_s }
# 图片
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
# 地址
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
# 是否要求ARC
s.requires_arc = true
# iOS 系统兼容最小版本
s.ios.deployment_target = '9.0'
# 项目文件
s.source_files = 'XXModule/Classes/**/*'
# 资源文件
# s.resource_bundles = {
# 'XXModule' => ['XXModule/Assets/*.png']
# }
# 依赖系统库
#s.frameworks = 'UIKit', 'Foundation'
# 依赖系统框架
#s.libraries = 'z', 'c++'
# 依赖第三方库
#s.dependency 'AFNetworking','3.2.1'
#s.dependency 'Masonry'
# 依赖第三方静态 framwwork(如果有子项目, 则迁移到子项目)
#s.vendored_frameworks = 'XXModule/Classes/SDK/Bugly/Bugly.framework'
# 依赖第三方静态 a(如果有子项目, 则迁移到子项目)
#s.vendored_libraries = 'XXModule/Classes/SDK/xxx.a'
# 暴露头文件
#s.public_header_files = 'XXModule/Classes/XXModule.h'
# 添加头文件到 pch
#s.prefix_header_contents = '#import <Bugly/Bugly.h>'
# 设置 header 文件
#s.prefix_header_file = 'XXModule/Classes/Header.h'
# 子项目(如无需要可不配置)
# s.subspec 'SubMudule1' do |ss|
# ss.source_files = 'XXModule/Classes/SubMudule1/*.{h,m}'
# end
#
# s.subspec 'SubMudule2' do |ss|
# ss.source_files = 'XXModule/Classes/SubMudule2/*.{h,m}'
# # 依赖第三方框架
# ss.vendored_frameworks = 'XXModule/Classes/SDK/Bugly/Bugly.framework'
# end
end
1.以上为模板, 可做对应删除、替换、注释、及打开注释.
2.对 'spec' 文件进行修改或对 'Development Pods' 下文件变更, 需要进行 'pod install' 整理目录.
3.如果仅对 'Development Pods' 下文件进行修改, 则 'Example' 工程中使用时建议 'cmd + shift + k' 再进行调用, 否则可能出现变更不及时.
五、组件发布
本地校验 spec
pod lib lint
上传至远程仓库
git push
git tag <与 .podspec 文件中的版本一致>
git push —tags
远程验证 podspec
pod spec lint
发布
公有版本
pod trunk push <xxx.podspec>
该步骤包含了:
- 更新本地 pods 库 ~/.cocoaPods.repo/master
- 验证 .podspec 格式是否正确
- 将 .podspec 文件转成 JSON 格式
- 对 master 仓库进行合并、提交 .master 仓库地址
成功后将会出现下列信息:
Updating spec repo `master`
Validating podspec
-> XXModule (0.0.1)
Updating spec repo `master`
🎉 Congrats
🚀 BYPhoneNumTF (1.0.0) successfully published
📅 March 17th, 00:31
🌎 https://cocoapods.org/pods/XXModule
👍 Tell your friends!
私有版本
pod repo push MyRepo <xxx.podspec>
该步骤包含了:
- 验证 XXModule.podspec 文件
- 拉取远程版本库 MyRepo
- 添加 XXModule.podspec 到版本库中
- push 到远程
注意:是发布到管理所有的私有仓库版本库中.
search
发布到 cocoapods 的需要先 $ pod setup
.
pod search XXModule
-> XXModule (0.0.1)
A short description of XXModule.
pod 'XXModule', '~> 0.0.1'
- Homepage: https://gitee.com/xxx/XXModule
- Source: https://gitee.com/xxx/XXModule.git
- Versions: 0.0.1 [MyRepo repo]
六、组件应用
Podfile 编写(模版)
# gitHub spec 地址
source 'https://github.com/CocoaPods/Specs.git'
# 私有 spec 地址
source 'https://git.oschina.net/xxx/xxx.git'
platform :ios, '9.0'
use_frameworks!
target 'XXModule' do
pod 'AFNetworking'
pod 'XXModule'
end
常见问题汇总
1.当执行 git branch --set-upstream-to=origin/master master
进行关联远程仓库时, 出现 fatal: refusing to merge unrelated histories
解决办法:
git pull origin master --allow-unrelated-histories
2.当执行 pod lib lint
时, 出现 [!] XZExplain did not pass validation, due to 1 warning (but you can use --allow-warnings
to ignore it).
You can use the --no-clean
option to inspect any issue.
解决办法:
根据提示添加--allow-warnings
3.由于在 sepc 文件中 vendored_frameworks
引用了某个第三方静态库 ,在 import
静态库中头文件后,导致 pod lib lint
报错。
错误信息:
" - ERROR | [iOS] [Explain/DoProblem] xcodebuild: Returned an unsuccessful exit code. You can use --verbose
for more information.
- NOTE | [iOS] [Explain/DoProblem] xcodebuild: /Users/xx/Desktop/Explain/Explain/Classes/DoProblem/ExplainModel.h:9:9: fatal error: 'Bugly/Bugly.h' file not found
[!] Explain did not pass validation, due to 1 error.
You can use the--no-clean
option to inspect any issue."
解决办法:
如果有子项目存在的话,则需要将vendored_frameworks
移到子项目中.
4.当执行 pod trunk push <xxx.podspec>
时, 出现 [!] There was an error pushing a new version to trunk: Failed to open TCP connection to trunk.cocoapods.org:443 (getaddrinfo: nodename nor servname provided, or not known)
解决办法:
一般为网络原因, 重试即可
5.当执行 pod repo push XXPods XXX.podspec
操作时,如果出现 [!] The repo MyRepo at ../.cocoapods/repos/MyRepo is not clean 字样
解决办法:
1.更新下我们的版本库.
$ pod repo update MyRepo
2.再继续上传即可.
网友评论