前提
- 有
cocoapods
的基本环境(安装过cocoapods
) -
github
上有相应的开源代码库,或者新建一个代码库 clone到本地来操作1 2 3 4
//clone到本地 $ git clone https://github.com/honeycao/CocoaPodDemo.git //后续操作都是基于在项目目录下执行 $ cd CocoaPodDemo
创建podspec文件
为了让自己的开源库支持cocoapods
导入,关键就是podspec
文件
1
2
3
//下面2个命令功能是一样的,都是在当前目录创建一个 cocoapodDemo.podspec 文件
$ pod spec create cocoapodDemo
$ pod spec create cocoapodDemo.podspec
podspec文件书写
在书写podspec
文件之前,我们的开源代码库需要有一个规范的目录结构(一般包括源码 + demo),也是为了方便后面源码路径的选择
开源代码库目录结构
1
2
3
4
5
6
7
8
9
.
├── cocoapodDemo(主文件夹)
├── cocoapodDemo(源码)
├── xxx.bundle
├── xxx.h/m
├── cocoapodDemoExample(demo示例)
├── cocoapodDemoExample.xcodeproj
├── cocoapod.podspec
├── README.md
podspec文件简单模板
注意:在书写的时候最好不要用文本编辑器打开,容易造成标点符号中英文混用的错误,最好用vim或者sublime打开。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Pod::Spec.new do |s|
s.name = "CocoaPodDemo"
s.version = "1.0.0"
s.summary = "summary"
s.description = "description"
s.homepage = "https://github.com/honeycao/CocoaPodDemo"
#s.screenshots = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif"
s.license = "MIT"
s.author = { "author" => "author@example.com" }
s.platform = :ios, "7.0"
s.source = { :git => "http://github.com/honeycao/cocoapod.git", :tag => "#{s.version}" }
s.source_files = "CocoaPodDemo/*.{h,m}"
s.resources = "CocoaPodDemo/CocoaPodDemo.bundle"
s.requires_arc = true
# s.dependency "ACAletController", "~> 1.0.0"
end
s.version
:版本号,每次更新必定修改的内容
s.author
:作者以及邮箱
s.platform
:平台以及最低版本限制
s.source
:源代码的一个路径,这里指向的github上对应的某一个版本,而版本号就是和该文件版本相关联,所以这里要确保github上存在这个版本号,也就是验证之前的打标签
s.source_files
:资源文件路径
s.dependency
:依赖库,有时候代码会依赖于其他第三方,需要在这里配置
验证 podspec 文件
打标签
podspec 中定义的版本号,在开源库中如果没有对应的标签,那么我们在验证之前就需要打个标签
1
2
3
$ git tag 1.0.0 #给当前工作副本节点当上 1.0.0 标签
$ git push --tags #推送所有标签到远端
注册
对于一个新的开源库第一次添加cocoapods
支持,是需要进行注册的,而且会有邮件进行确认
1
2
3
4
5
// 邮箱 以及 名称 进行注册
$ pod trunk register author@example.com 'author'
//注册成功后可以查看个人信息
$ pod trunk me
验证
- 直接验证
1
$ pod spec lint
- 忽略警告(有时候有无法避免的警告,可以忽略警告)
1
$ pod spec lint --allow-warnings
- 显示错误(如果验证出错,可以采用这个命令显示出更清晰的错误信息)
1
$ pod spec lint --verbose
- 验证通过显示结果
1 2 3 4 5
-> CocoaPodDemo (1.0.0) Analyzed 1 podspec. CocoaPodDemo.podspec passed validation.
推送 podspec 文件到cocoapods
推送的过程中会再次验证一遍,所以有时候有会出现验证不通过的情况
1
$ pod trunk push CocoaPodDemo.podspec
如果在验证的时候添加了忽略警告命令,那么在推送的时候也必须加上,不然前面的警告会再次出现导致验证又通不过。
1
$ pod trunk push CocoaPodDemo.podspec --allow-warnings
成功之后显示
更新 podspec 文件
由于我们的开源库版本更新,所以我们的 podspec 文件也必须更新,至于更新步骤就是重复上面步骤
- 修改
podspec
文件中s.version
对应的版本号 - 验证
- 给我们开源库打上标签(tag 和 s.version是一致的)
- 推送
搜索库
一般推送成功之后,我们并不能直接搜索到我们的库,具体怎么做,需要分为两种情况
- 首次推送成功:需先删除本地缓存再进行搜索
1 2
$ rm ~/Library/Caches/CocoaPods/search_index.json $ pod search CocoaPodDemo
- podspec文件更新至推送成功:删除本地缓存进行搜索查看到的也只是旧版本,这时候只需更新pod即可搜索到最新版本的库
1 2
$ pod repo update $ pod search CocoaPodDemo
错误集中处理
1、验证过程中出现根据路径找不到匹配文件等如下情况
1
2
- ERROR | [iOS] file patterns: The `resources` pattern did not match any file.
- - ERROR | [iOS] file patterns: The `source_files` pattern did not match any file.
我们可以到 podspec
验证路径下去手动修改
podspec
本地验证路径:~/Library/Caches/CocoaPods/Pods/External
- 在该路径下可以找到我们验证的代码库,进入子目录下修改文件路径,或者如果是资源文件不存在,也可以直接添加进去即可
- 再次执行验证应该就没有这个问题了
2、[!] Authentication token is invalid or unverified. Either verify it with the email that was sent or register a new session.
要么是没注册,要么是登录过期,所以需要重新登录下(登录和注册时同一个方式)
1
2
3
4
//邮箱 + 用户名
pod trunk register xxx@yy.com aurhor
//然后到该邮箱下进行验证即可