阅读 55

发布开源框架到CocoaPods入坑指南

  • 个人原文博客地址: 发布开源框架到CocoaPods入坑指南
  • 在开发过程中一定会用到一些第三方框架, 只要安装了CocoaPods, 然后通过pod install命令, 就可以集成框架到项目中了
  • 可是如果想要把自己的框架或者组件也开源出去, 让别人也可以使用, 那该如何入手 ?
  • 对于CocoaPods还不是很了解的或者没有安装的童鞋, 可自行百度或者参考用CocoaPods做程序的依赖

搭建框架

创建仓库

  • CocoaPods项目的源码在Github上管理,所以第一步我们需要创建一个属于自己的仓库
  • 根据图下图所示创建自己的项目

创建仓库

上传文件

  • 要开发框架必然就要上传文件, 这里推荐SourceTreeGitHub客户端, 当然也可以使用终端命令上传
  • 使用git管理工具我们这里暂不赘述, 不懂得可以自行百度
  • 终端使用git命令上传, 主要命令如下
//cd到当前文件夹
// 创建本地仓库
git init
// 添加名称为origin的远程连接
git remote add origin '你的github项目地址'
// 将本地代码加入本地仓库里
git add .
// 提交修改到本地仓库
git commit -m '你的修改记录'
// 推送master分支的代码到名称为origin的远程仓库
git push origin master
复制代码

创建Podspec描述文件

  • 该文件为Cocoapods依赖库的描述文件,每个Cocoapods依赖库必须有且仅有那么一个描述文件
  • 简单地讲就是让CocoaPods搜索引擎知道你的代码的作者、版本号、源代码地址、依赖库等信息的文件
  • 文件名称要和我们想创建的依赖库名称保持一致
pod spec create 框架名字

// 示例:
pod spec create TitanModel
复制代码
  • 该命令将在本目录产生一个名为TitanModel.podspec文件
  • 可用Sublime Text或者Atom打开该文件,里面已经有非常丰富的说明文档, 但是很多都是我们不需要的
  • 官方Podspec文件的编写格式可参考 Podspec Syntax Reference
  • 下面介绍如何声明第三方库的代码目录和资源目录,还有该第三方库所依赖ios核心框架和第三方库
  • 去掉文件中的一些注释信息, 可以看到也就剩下以下内容了
Pod::Spec.new do |s|
  s.name         = "TitanModel"
  s.version      = "0.0.1"
  s.summary      = "A short description of TitanModel."
  s.description  = "这是详细的描述, 但是字数要比summary的字数多, 不然上传的时候回有警告提示, 我这么说你能明白了吗?不明白的话我也没办法了"
  s.homepage     = "https://github.com/CoderTitan/TitanModel"
  s.license      = "MIT"
  s.swift_version = "4.0"
  s.author             = { "CoderTitan" => "quanjunt@163.com" }
  s.source       = { :git => "https://github.com/CoderTitan/TitanModel.git", :tag => "#{s.version}" }
  s.source_files  = "Classes", "Classes/**/*.{h,m,swift}"
  s.exclude_files = "Classes/Exclude"
 
end
复制代码
  • s.name:名称,pod search搜索的关键词,注意这里一定要和.podspec的名称一样,否则报错
  • s.version:版本号,to_s:返回一个字符串
  • s.summary: 项目简短的简介
  • s.description: 这个是详细的描述, 要注意的是字数要比summary的长, 否则上传的时候可能会爆出警告
  • s.homepage: 项目主页地址
  • s.license: 许可证
  • s.author: 作者
  • s.source: 项目源码所在地址
  • s.platform: 项目支持平台
  • s.requires_arc: 是否支持ARC
  • s.source_files: 需要包含的源文件
  • s.public_header_files: 需要包含的头文件
  • s.ios.deployment_target: 支持的pod最低版本
  • s.social_media_url: 社交网址
  • s.resources: 资源文件
  • s.dependency: 依赖库,不能依赖未发布的库

source_files写法及含义

"TitanModel"
"Classes/**/*.{h,m}"
复制代码
  • *表示匹配所有文件
  • *.{h,m}表示匹配所有以.h.m结尾的文件
  • **表示匹配所有子目录

将自己的项目打成tag

  • 因为cocoapods是依赖tag版本的,所以必须打tag,以后再次更新只需要把你的项目打一个tag,然后修改.podspec文件中的版本接着提交到cocoapods官方就可以了
  • 要注意的是, 这里提交的版本号要和TitanModel.podspec文件中的版本号一致
git tag "v0.0.1"  
git push --tags
复制代码

上传Podspec

  • Podspec修改完成后, 上传到服务器时, 我们需要使用trunk进行上传
  • 首先要注册trunk, 在注册trunk之前,我们需要确认当前的CocoaPods版本是否足够新。trunk需要pod0.33及以上版本,如果你不满足要求, 需要重新安装pod
  • 更新结束后,我们开始注册trunk, 可参考官方文档Getting setup with Trunk
  • 终端输入以下命令
pod trunk register 邮箱地址 '用户名' --description='描述'

// 示例
pod trunk register quanjunt@163.com 'CoderTitan' --description='macbook'
复制代码

执行该命令后, 你的邮箱会受到一封邮件, 但是邮件要到垃圾邮件中才能找到, 打开邮件找到邮件中的网址并打开

image

如果打开邮件中的链接和下面的页面一样, 则表示注册成功

注册成功

最后输入如下命令

pod trunk push TitanModel.podspec
复制代码

时间较长,耐性等待,大概5-10分钟, 成功后结果如下

trunk

  • 上面图片中可以看到执行了Updating spec repo master命令, 该命令主要就是更新本地的Specs文件
  • 查看文件夹位置, 打开访达文件夹, Shift+command+G快捷键, 打开前往文件夹操作, 输入如下目录即可查看
~/.cocoapods/repos/master/Specs
复制代码

测试自己的cocoapods

  • 终端输入pod search TitanModel查看
  • 但是如果输入上述命令后, 终端输出如下错误
[!] Unable to find a pod with name, author, summary, or description matching `TitanModel`
复制代码

这是因为你的框架已经上传, 但是你的本地的搜索文件search_index.json没有更新, 所以搜索不到, 可以执行下面命令删除search_index.json文件

rm ~/Library/Caches/CocoaPods/search_index.json
复制代码
  • 也可以直接找到该文件删除
  • 查看文件夹位置, 打开访达文件夹, Shift+command+G快捷键, 打开前往文件夹操作, 输入如下目录即可查看
~/Library/Caches/CocoaPods/
复制代码

搜索成功

search

总结

最后对上述涉及到的终端命令做一个简单的总结

终端命令

  1. 开源库发布之后,需要给项目打上tag
git tag "v0.0.1"  
git push --tags
复制代码
  1. 进入到项目根目录下,创建podspec文件
pod spec create TitanModel
复制代码
  1. 编辑podspec文件中的相关信息,有两个比较重要的地方s.sources.source_files, 修改完成后, 验证是否有误
pod spec lint TitanModel.podspec
复制代码
  1. 注册pod trunk
pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'
复制代码
  1. 发布到trunk
pod trunk push TitanModel.podspec
复制代码
  1. 搜索发布的框架
pod search TitanModel
复制代码
关注下面的标签,发现更多相似文章
评论