iOS开发笔记:让自己的工具可以支持CocoaPods

前言

折腾了两个多小时,踩了几个坑以后,终于是制作并完成了自己的第一个支持CocoaPods的开源库了。很简单的一个小工具,一个简易的弹窗。这个不是用view加在keyWindow的方式,采用的是控制器的方式,感兴趣的可以下载看下。这个不是这次的主题,所以不做说明 😎


创建流程
1
2
3
4
5
6
- 创建一个工程
- 将该工程托管到GitHub
- 创建扩展名为podspec的文件
- 编辑podspec文件
- 校验
- 发布

听起来好像是So~ easy,不过我花了两个小时搞定(之前也试过,失败了,后来没时间就没弄了)
这次我整理了下大概的坑,后续的步骤讲解中会说下这些:

1.托管的时候一定要加上tag
2.几个必填的关键项
3.一定要学会google~

O__O “…废话太多了,开始正文

一、创建工程并且将代码托管到GitHub

这个实现方式大家可以根据自己的习惯来,我一般用的是命令的方式写的;

  • 在GitHub上创建仓库的流程这个大家搜下就可以
  • 创建完以后 按照箭头指示获取链接

image.png

1
2
3
4
5
6
7
8
- cd 工程路径(Tip:在终端里面输入cd 然后将文件夹拖进来就可以了)
- 然后执行 git remote add origin 获取的链接
- 一般我会在这里pull一遍 git pull origin master
- git add .
- git commit -m'文字说明'
- git tag 'v0.0.1' 这里tag我不知道是不是一定要加v反正我加了就对了 Orz
- git push --tags
- git push origin master

到这儿基本上第一步就完成了,不过最好刷新检查一下git仓库页面。需要注意的是查看一下tag有没有加上,成功的话会显示的,如下图:

image.png

二、创建、配置本地podspec文件

  • 在终端中执行: pod spec create xxx(名字随便你取啦,一般是你库的名字) 完成以后会在对应的路径下生成一个扩展名为.podspec的文件

image.png

  • 选择一个编辑器(我用的sublime)打开,会看到下面的样子,这里截取了一部分:

image.png

其中主要用到的内容包括

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

s.name = "FKSimpleAlertController"//名字,一般和podspec文件名保持一致
s.version = "0.0.1"//版本号 这个版本号需要和刚才提交GitHub的tag值一样,并且不用加上'v'
s.summary = "简易弹窗"//描述,这个随便自己怎么写
s.description = "An alertController such as UIAlertController"//这个随便,可以不写
s.homepage = "https://github.com/ForAllKid/FKSimpleAlertController"//项目主页,一般是GitHub的链接地址
s.license = "MIT"//这个~
s.author = { "ForKid" => "xxxxxx@qq.com" }//这个一般自动就生成了
s.platform = :ios, "8.0"//支持的平台和版本,这个一定要填 😂😂😂

s.source = { :git => "https://github.com/ForAllKid/FKSimpleAlertController.git", :tag => "v#{s.version}" }//还记得刚才git中copy的地址么?这里要注意下#签名有个'v'😎

s.source_files = "FKSimpleAlertControllerDemo/FKSimpleAlertController/Classes/*.{h,m}"//这里的路径自己填上去 按照层级写就行了

//下面的看情况,用了多个framew就是用下面的,一个使用上面的
# s.framework = "Foundation"
s.frameworks = "Foundation", "UIKit"

s.requires_arc = true//是否支持ARC

踩坑点:

  • 名字没有保持一致
  • 版本号不一致
  • 发现上面的除了summary和description以外,其他的都是坑 Orz

当然这里是看不出来有没有错的~ 接下来这一步可以检查有没有错

  • 终端输入 pod spec lint xxx.podspec
错误情况是这样:

image.png
恩~ 鲜红的文字,很强势!
4C69569513869439AF1B5DF6F43B6900.jpg

其实呢主要看这一行就够了

image.png
这里是说远程仓库没有对应的tag ~改下就好了,按照之前加tag的步骤
然后重新执行

正确的是这样:

image.png

3B1951128F2BEA67D584799697DA6CB7.jpg
这里很容易出错,多查一查就搞定了,实在不行,runloop ~

成功以后就基本完成了,但是你发现你无法pod search。。。
原因嘛,引用下其他人说的:

以上的方法,使用pod search 是搜不到你的库的,因为这只是你私有的库而已。
在你本地,前往~/.cocoapods/repos/master/Specs,你会看到cocoapod所有公有的开源库配置,这个通过cocoapod官方在github的specs来管理,地址为https://github.com/CocoaPods/Specs
说到这里,你会想把这个库fork分支下来,clone到你本地,把自己的Test.podspec加入,然后add、commit、 push,最后在github上pull request来和官方的主分支合并,可是你会发现请求马上被自动关闭。

Why!!!

虽然一开始使用GitHub Pull Requests来整理所有公共pods效果很好。但是,随着Pod数量的增加,这个工作对于spec维护人员Keith Smiley来说变得十分繁杂。甚至一些没有通过$ pod lint的spec也被提交上来,造成repo无法build。
CocoaPods 0.33中加入了Trunk服务。CocoaPods Trunk服务的引入,解决了很多类似的问题。CocoaPods作为一个集中式的服务,使得分析和统计平台数据变得十分方便。下面来说说怎么分布CocoaPod。

所以还要搞事情。

  • 要想使用Trunk服务,首先你需要注册自己的电脑。这很简单,只要你指明你的邮箱地址(spec文件中的)和名称即可。

pod trunk register xxxx@qq.com ‘xxx’ –description=’description’

  • 完成之后,我们就可以开始 trunk push 了提交我们的podspec文件。

pod trunk push Test.podspec

剩下的就是等待了

当完成以后会显示这个

image.png

然后你可以创建一个工程,然后用pod试试。

完~