Creating a Pod

曾尝试自己制作一个pod,本文旨在记录其过程,以及了解到的一些相关概念。

制作一个pod的基本套路

这部分旨在介绍pod(非本地,存于GitHub上)的基本制作套路。

1、在GitHub上创建一个空仓库,git clone到本地,然后在该仓库的基础上创建一个framework(关于iOS framework,详见iOS Framework)。
2、在framework根目录下创建一个Podspec文件,并进行配置。

什么是Podspec文件呢?CocoaPods的描述是:

A Podspec, or Spec, describes a version of a Pod library. One Pod, over the course of time, will have many Specs. It includes details about where the source should be fetched from, what files to use, the build settings to apply, and other general metadata such as its name, version, and description.

PodSpec文件一般以.podspec为后缀,可以手动创建,也可以运行pod spec create创建,譬如pod spec create SJUtils会创建一个名为SJUtils.podspec的文件。

Podspec是ruby文件,基本都是自解释的属性,哪怕不懂ruby,也能很容易读懂。

3、确保pod所对应仓库被push到GitHub上了。

4、确保所push的代码已经打上tag,也就是给源代码打上版本号标签:

git tag '0.0.1'
git push --tags

5、执行pod lib lint对Podspec进行校验,以确定该pod是否满足CocoaPods的要求。

P.S: pod lib lint的有个副作用,即根目录下会多一个软连接文件 – SJUtils.h,不知为什么。

6、使用trunk上传PodSpec。

在此之前,需要注册trunk,譬如:

pod trunk register sadjason@qq.com "sadjason"

注册成功后会收到一封确认邮件。确认后,执行pod trunk me可以查看注册信息。

然后使用pod trunk命令,将Podspec push到CocoaPods的spec中:

pod trunk push SJUtils.podspec

上传完Podspec后,似乎没有审核通过的通知,那么如何知道是否通过审核呢?通过pod search命令搜索吧!

创建本地Pod

如果只是想创建一个本地pod,则更容易处理一些。首先修改pod的Podspec文件的s.source字段,指向到本地目录

s.source = { :path => '.' }

然后在使用这个framework的工程的Podfile里指定pod path就可以了,譬如:

pod 'SJUtils', :path => '../SJUtils' # path描述了pod install的source地址

pod spec lint v.s pod lib spec

pod spec lintpod lib lint都可以用来对Podspec进行校验,但二者有所不同,但具体不同之处,官方文档没有较详细的说明(或许是我没找到)。StackOverflow的what’s the different between ‘pod spec lint’ and ‘pod lib lint’有解释。

就我个人实际体会(加上–verbose选项查看更详细步骤),二者步骤差不多,只是前者要求Podspec里的s.source必须指向到远程,而后者无此要求。

Podspec

关于Podspec各个字段更深层次的意义和赋值,参考podspec.html

选择一些属性稍作说明。

source

The location from where the library should be retrieved. 常见两种赋值:

s.source = { :path => '.' } # 本地
s.source = { :git => 'https://github.com/sadjason/SJUtils.git', :tag => s.version } # tag是必须的,s.version描述了version版本,也可以是'0.0.2'之类的字符串

pod trunk

更多关于pod trunk的信息,查看Getting setup with Trunk

P.S: pod trunk貌似有一个update master spec repo的过程,蛮漫长的,如何让它快点?

P.S: pod trunk命令并不是一开始就有的,在此之前,上传Podspec比较麻烦,详见CocoaPods详解之—-制作篇

更多资料

https://mp.weixin.qq.com/s/hBgvPBP12IQ1s65ru-paWw