热门标签 | 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…



推荐阅读
  • This article explores the process of integrating Promises into Ext Ajax calls for a more functional programming approach, along with detailed steps on testing these asynchronous operations. ... [详细]
  • 在AngularJS中,有时需要在表单内包含某些控件,但又不希望这些控件导致表单变为脏状态。例如,当用户对表单进行修改后,表单的$dirty属性将变为true,触发保存对话框。然而,对于一些导航或辅助功能控件,我们可能并不希望它们触发这种行为。 ... [详细]
  • 解决Expo XDE 2.22.1版本启动错误
    根据问题描述,用户在将Expo升级至2.22.1版本后,在尝试打开项目时遇到了错误。本文提供了详细的错误分析及解决方案。 ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 本文介绍如何通过Java代码调用阿里云短信服务API来实现短信验证码的发送功能,包括必要的依赖添加和关键代码示例。 ... [详细]
  • 本文详细介绍了如何使用Linux下的mysqlshow命令来查询MySQL数据库的相关信息,包括数据库、表以及字段的详情。通过本文的学习,读者可以掌握mysqlshow命令的基本语法及其常用选项。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 本文探讨了如何选择一个合适的序列化版本ID(serialVersionUID),包括使用生成器还是简单的整数,以及在不同情况下应如何处理序列化版本ID。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 本文介绍了MySQL窗口函数的基本概念、应用场景及常见函数的使用方法。窗口函数在处理复杂查询时非常有用,例如计算每个用户的订单排名、环比增长率、以及动态聚合等。 ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
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社区 版权所有