热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Cocoapods发布封装库

Cocoapods一般用来管理第三方库,当我们自己封装了一个功能模块时也可以使用Cocoapods发布给其他人使用,以下是我按照官方教程实际操作的流程。

Cocoapods 一般用来管理第三方库,当我们自己封装了一个功能模块时也可以使用 Cocoapods 发布给其他人使用,以下是我按照官方教程实际操作的流程。

提交到 GitHub

假设我们已经完成了一个功能模块的封装,以 HelloPods 为例。首先,我们要在 GitHub 上创建一个名为 HelloPods 的仓库,接着我们要将本地封装好的代码提交到 GitHub 上。具体操作如下:

  1. 打开命令行工具 cd 到 HelloPods 目录
  2. 生成 Readme 文件,echo "# HelloPods" >> README.md
  3. 初始化 git,git init
  4. 提交到本地 git,git add . git commit -m 'commit'
  5. 添加远程仓库,git remote add origin https://github.com/hiXgb/HelloPods.git
  6. 提交到远程仓库,git push -u origin master
  7. 添加 tag,git tag 0.0.1 git push --tag

执行完以上操作后我们就成功将代码提交到了 GitHub 上,接下去要做的是发布到 Cocoapods 上。

发布到 Cocoapods

首先,我们执行 pod spec create 生成 HelloPods.podspec 文件,生成的模板文件有大量注释,我们只需要其中一部分内容,整理后的内容如下:

Pod::Spec.new do |spec|spec.name = 'HelloPods'spec.version = '0.0.1'spec.license = { :type => 'MIT' }spec.homepage = 'https://github.com/hiXgb/HelloPods'spec.authors = { 'xgb' => 'xieguobiyi@gmail.com' }spec.summary = "Learn about creating Podspec's and the Spec repo."spec.source = { :git => "https://github.com/hiXgb/HelloPods.git", :tag => "0.0.1" }spec.source_files = '*.{h,m}'spec.requires_arc = true
end

HelloPods.podspec 文件编辑完成后执行 pod spec lint 验证 podspec 文件是否合法,结果如下:

验证通过后需要在 Cocoapods 上注册 trunk,执行

pod trunk register xieguobiyi@gmail.com 'xgb'

然后查收邮箱点击链接即可完成注册,注册完成后可以通过 pod trunk me 查询注册信息

然后再执行

pod trunk push HelloPods.podspec --allow-warnings

不出意外的话我们能看到如下结果

至此我们就完成了库的发布,后续就可以按照其他第三方库一样的用法来使用我们自己的库了~

添加 subspec

如果一个库有多个子模块,我们可以通过添加 subspec 使结构更加清晰。假设 HelloPods 下有两个子模块,一个 Util,一个 Model,我们首先修改 HelloPods.podspec 文件,修改后的内容如下:

Pod::Spec.new do |spec|spec.name = 'HelloPods'spec.version = '0.0.3'spec.license = { :type => 'MIT' }spec.homepage = 'https://github.com/hiXgb/HelloPods'spec.authors = { 'xgb' => 'xieguobiyi@gmail.com' }spec.summary = "Learn about creating Podspec's and the Spec repo."spec.source = { :git => "https://github.com/hiXgb/HelloPods.git", :tag => "0.0.3" }spec.source_files = '*.{h,m}'spec.requires_arc = truespec.subspec 'Util' do |util|util.source_files = 'Util/*.{h,m}'endspec.subspec 'Model' do |model|model.source_files = 'Model/*.{h,m}'endend

修改完成后再重复前面的步骤,将子模块都先提交到 GitHub 上,然后修改 tag 为 0.0.3,接着再执行 pod trunk push HelloPods.podspec --allow-warnings 将修改后的内容发布到 Cocoapods trunk 上,发布完成后我们再执行 pod search 'HelloPods' 结果如下:

遇到的问题

swift 版本不对

[!] The validator for Swift projects uses Swift 2.3 by default, if you are using a different version of swift you can use a .swift-version file to set the version for your Pod. For example to use Swift 3.0, run:
echo "3.0" > .swift-version.

执行 echo "3.0" > .swift-version 即可解决

没有创建 tag

warning: Could not find remote branch 0.0.1 to clone.
fatal: Remote branch 0.0.1 not found in upstream origin

执行

git tag 0.0.1
git push --tag

podspec 文件配置不对

ERROR | File Patterns: File patterns must be relative and cannot start with a slash (source_files).

这个错误主要是实际文件目录和配置文件里的没有匹配上,需要根据实际项目文件结构具体配置,在上述例子里的配置是

spec.source_files = '*.{h,m}'

成功发布到 Cocoapods trunk 上但 pod search 不到

可以依次尝试以下几种方法:

  • 清除本地的 Cocoapods 缓存,执行

rm -rf ~/Library/Caches/CocoaPods

  • 修改 tag 重新发布一遍
  • 新建一个测试工程,然后新建 Podfile,其中使用到发布成功的库,执行 pod update

总结

以上就是我跟着教程实际操作的流程和遇到问题的记录,最重要的还是要自己动手操作一遍,希望大家在操作过程中也能有收获,enjoy~

参考资料

  • guides.cocoapods.org/making/spec…



推荐阅读
  • 使用 `git stash` 可以将当前未提交的修改保存到一个临时存储区,以便在后续恢复工作目录时使用。例如,在处理中间状态时,可以通过 `git stash` 命令将当前的所有未提交更改推送到一个新的储藏中,从而保持工作目录的整洁。此外,本文还将详细介绍如何解决 `git stash pop` 时可能出现的冲突问题,帮助用户高效地管理代码变更。 ... [详细]
  • 本文深入探讨了 Git 与 SVN 的高效使用技巧,旨在帮助开发者轻松应对版本控制中的各种挑战。通过详细解析两种工具的核心功能与最佳实践,读者将能够更好地掌握版本管理的精髓,提高开发效率。 ... [详细]
  • 在IntelliJ IDEA中初始化Git并将项目推送到远程仓库的具体步骤包括:首先,登录Gitee(码云)账号并创建新的仓库;接着,在IDEA中通过VCS菜单选择Git进行本地项目的初始化;最后,配置远程仓库地址并执行推送操作,确保项目代码安全上传至云端。 ... [详细]
  • OpenCV 2.4.9 源码解析:级联分类器的错误率与尺寸分析 ... [详细]
  • 什么是git-lfsGithub对文件大小的限制如果你在命令行用gitpush50MB的文件,你会收到一个warning,但是你仍然可以正常push,但是100MB的时候就无法 ... [详细]
  • gitcommit-m提交所有本地文件 ... [详细]
  • 速查!Git常用命令大全【汇总推荐】
    开发工具|gitgit开发工具-gitgit常用命令网站源码分享资源,写vscode插件详细教程,ubuntu突然卡,war放tomcat哪,应聘爬虫岗位,php获取数组索引值,张 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 本文详细介绍了 Pentaho Kettle 中 RowMetaInterface.writeMeta 方法的使用,并提供了多个代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 《Intel IA-32 架构软件开发人员手册详尽指南》提供了详尽的 IA-32 架构技术文档,涵盖指令集、系统编程和硬件接口等内容,为软件开发人员提供全面的技术支持和参考。该手册不仅包括详细的架构说明,还提供了丰富的编程示例和最佳实践,帮助开发人员更好地理解和应用 IA-32 架构。 ... [详细]
  • PyThon_Swift 势必取代 Python?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Swift势必取代Python?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 关于ScrumXPDevOps的学习
    最近听了ECUG大会上孙敬云老师的分享感觉受益匪浅,毕竟大学课本上只讲到瀑布模型就没有下文了,工作以后一直贯彻的都是Scrum路线,一直也没有时间好好的去学习整理这部分的知识,直到 ... [详细]
  • 六百字读懂
    译注:来自HackerSchool的MaryRoseCook实现了一个纯JavaScript(Node.js)写就的Git:Gitlet,包含了最主要的一些命令。这个项目一是为了了 ... [详细]
author-avatar
woshishl
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有