- 在开发过程中一定会用到一些第三方框架, 只要安装了
CocoaPods
, 然后通过pod install
命令, 就可以集成框架到项目中了 - 可是如果想要把自己的框架或者组件也开源出去, 让别人也可以使用, 那该如何入手 ?
- 对于
CocoaPods
还不是很了解的或者没有安装的童鞋, 可自行百度或者参考用CocoaPods做程序的依赖
搭建框架
创建仓库
CocoaPods
项目的源码在Github
上管理,所以第一步我们需要创建一个属于自己的仓库- 根据图下图所示创建自己的项目
上传文件
- 要开发框架必然就要上传文件, 这里推荐
SourceTree
和GitHub
客户端, 当然也可以使用终端命令上传 - 使用
git
管理工具我们这里暂不赘述, 不懂得可以自行百度 - 终端使用
git
命令上传, 主要命令如下
1 | //cd到当前文件夹 |
使用CocoaPods
检索第三方框架
- 使用命令
pod search xxx
- 从本地缓存的–第三方框架描述信息–生成的检索文件中检索到响应的框架信息
- 本地缓存的框架描述信息位置:
~/Library/Caches/CocoaPods/search_index.json
- 如执行命令时出现错误, 可删除改索引文件, 执行命令:
rm ~/Library/Caches/CocoaPods/search_index.json
安装第三方框架
- 创建
Podfile
文件, 到自己工程内(一级目录):pod init
Podfile
文件: 答: 其实就是使用ruby
语法编写的 “框架依赖描述文件”; 就是告诉cocoapods
需要下载集成哪些框架
- 安装框架
pod install
cocoapods
在1.0.1以后版本, 会直接就是根据Podfile
文件找到, 框架信息, 然后下载集成- 但是1.0.1之前的版本, 会先更新本地的框架描述信息(非常耗时), 然后再根据文件下载
- 下载完成后会生成一个
Podfile.lock
文件, 记录着上一次下载的框架最新版本
pod install
和pod update
pod install
- 如果
Podfile.lock
文件存在, 直接从此文件中读取框架信息下载安装 - 如果不存在, 依然会读取
Podfile
文件内的框架信息, 下载好之后, 再根据下载好的框架信息, 生成Podfile.lock
文件
- 如果
pod update
- 不管
Podfile.lock
是否存在, 都会读取Podfile
文件的的框架信息去下载 - 下载好之后, 再根据下载好的框架信息, 生成
Podfile.lock
文件
- 不管
- 主要区别在于,
Podfile
文件内的框架信息, 版本描述没有指定具体版本 - 一般情况下, 每个人从共享库把项目下载下来之后, 都会执行
pod install
命令安装!这样可以保证大家使用的第三方框架版本一致!!如果以后大家需要统一升级第三方框架, 那么每个人在执行 pod update
CocoaPods相关操作
1 | //创建Podfile文件 |
CocoaPods
相关路径
1 | //索引缓存路径 |
创建Podspec描述文件
- 该文件为
Cocoapods
依赖库的描述文件,每个Cocoapods
依赖库必须有且仅有那么一个描述文件 - 简单地讲就是让
CocoaPods
搜索引擎知道你的代码的作者、版本号、源代码地址、依赖库等信息的文件 - 文件名称要和我们想创建的依赖库名称保持一致
1 | pod spec create 框架名字 |
- 该命令将在本目录产生一个名为
TitanModel.podspec
文件 - 可用
Sublime Text
或者Atom
打开该文件,里面已经有非常丰富的说明文档, 但是很多都是我们不需要的 - 官方
Podspec
文件的编写格式可参考 Podspec Syntax Reference - 下面介绍如何声明第三方库的代码目录和资源目录,还有该第三方库所依赖
ios
核心框架和第三方库 - 去掉文件中的一些注释信息, 可以看到也就剩下以下内容了
1 | Pod::Spec.new do |s| |
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
写法及含义
1 | "TitanModel" |
*
表示匹配所有文件*.{h,m}
表示匹配所有以.h
和.m
结尾的文件**
表示匹配所有子目录
将自己的项目打成tag
- 因为
cocoapods
是依赖tag
版本的,所以必须打tag
,以后再次更新只需要把你的项目打一个tag
,然后修改.podspec
文件中的版本接着提交到cocoapods
官方就可以了 - 要注意的是, 这里提交的版本号要和
TitanModel.podspec
文件中的版本号一致
1 | git tag "v0.0.1" |
上传Podspec
Podspec
修改完成后, 上传到服务器时, 我们需要使用trunk
进行上传- 首先要注册
trunk
, 在注册trunk
之前,我们需要确认当前的CocoaPods
版本是否足够新。trunk
需要pod
在0.33
及以上版本,如果你不满足要求, 需要重新安装pod
- 更新结束后,我们开始注册
trunk
, 可参考官方文档Getting setup with Trunk - 终端输入以下命令
1 | pod trunk register 邮箱地址 '用户名' --description='描述' |
执行该命令后, 你的邮箱会受到一封邮件, 但是邮件要到垃圾邮件中才能找到, 打开邮件找到邮件中的网址并打开
如果打开邮件中的链接和下面的页面一样, 则表示注册成功
最后输入如下命令
1 | pod trunk push TitanModel.podspec |
时间较长,耐性等待,大概5-10分钟, 成功后结果如下
- 上面图片中可以看到执行了
Updating spec repo master
命令, 该命令主要就是更新本地的Specs
文件 - 查看文件夹位置, 打开访达文件夹,
Shift+command+G
快捷键, 打开前往文件夹操作, 输入如下目录即可查看
1 | ~/.cocoapods/repos/master/Specs |
测试自己的cocoapods
- 终端输入
pod search TitanModel
查看 - 但是如果输入上述命令后, 终端输出如下错误
1 | [!] Unable to find a pod with name, author, summary, or description matching `TitanModel` |
这是因为你的框架已经上传, 但是你的本地的搜索文件search_index.json
没有更新, 所以搜索不到, 可以执行下面命令删除search_index.json
文件
1 | rm ~/Library/Caches/CocoaPods/search_index.json |
- 也可以直接找到该文件删除
- 查看文件夹位置, 打开访达文件夹,
Shift+command+G
快捷键, 打开前往文件夹操作, 输入如下目录即可查看
1 | ~/Library/Caches/CocoaPods/ |
搜索成功
错误整理
版本号
- 设置版本号的时候一般有两种方式, 一种是前面带
v
的, 如:v0.0.1
;另 一种是前面不带v
的, 如:0.0.1
- 因为
v
而导致的报错
1 | warning: Could not find remote branch 0.0.1 to clone. |
为解决以上问题, 设置版本号的方式和spec
文件内的版本号方式一定要一致
不带v方式:
设置版本号时:
1 | // 这里设置时, 不要带v |
spec
文件中1
2
3
4//这里不要带v
s.version = "0.0.2"
s.source = { :git => "https://github.com/CoderTitan/TitanModell.git", :tag => s.version }
//这里的tag也可以设置成具体的版本号, 只要与上面一样就好
带v方式:
设置版本号时:
1 | // 这里设置时, 要带v |
spec
文件中
1 | //这里要带v |
总结
最后对上述涉及到的终端命令做一个简单的总结
终端命令
- 开源库发布之后,需要给项目打上
tag
1 | git tag "0.0.1" |
- 进入到项目根目录下,创建
podspec
文件
1 | pod spec create TitanModel |
- 编辑
podspec
文件中的相关信息,有两个比较重要的地方s.source
和s.source_files
, 修改完成后, 验证是否有误
1 | pod spec lint TitanModel.podspec |
- 注册
pod trunk
1 | pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air' |
- 发布到
trunk
1 | pod trunk push TitanModel.podspec |
- 搜索发布的框架
1 | pod search TitanModel |