惯例吹水
众所周知CocoaPods,已经成为iOS/Mac OS程序员离不开的三方库管理工具。
除了我们引用一些知名的大佬框架以外,有时候我们也想分享一下自己的小轮子,或者托管自己的私有框架,尤其是组件化需要,想要上传属于自己的CocoaPods怎么办呢?
查阅了官方文档和一些前辈们的blog,感觉并不难,为了便于理解每一步命令的作用,决定还是需要自己手撸一遍。
什么是CocoaPods
Define once, update easily。看到宣传标语就感觉很easy。CocoaPods是OS X和iOS下的一个第三类库管理工具,通过PodFile文件我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所支持的),并且可以轻松管理其版本。
怎么安装CocoaPods
官方app下载地址
民间小白鼠🐁教程
涉及到的一些概念
Podfile: 该文件为配置引用三方库文件,指定引用的库以及版本。
Podfile.lock: cocoapods根据本地podfile和远端仓库生成版本管理文件,便于用户协作。
.xcodeproj: iOS项目工程目录,本质是个文件夹,可用Xcode打开。
.xcworkspace:工作空间,联合多个项目工程,pod install后自动生成。
.podspec : 该文件为你的代码仓库索引描述文件,CocoaPods通过该文件对你真正存储代码工程的 Git 仓库进行索引与下载
本博客演示所用文件
SoulToolsLibrary: 托管我们的实现代码(根据公有私有选择是否公开),需要remote对应远程Git仓库
SoulPrivatePodspec: 托管我们生成的Podspec文件(私有Pod才用),私有库隐藏了源码则需要公开本仓库
SoulTestDemo: 模拟三方用户新建工程测试我们的Pod,不需要远程仓库,如果你非要建,就当我没说
以上文件目录,均放在~/MyPodLibrary目录里了,方便演示

上传一个公有Pod
官方文档如下
-
搜索有没有同名库
(因为最后一步CocoaPods会校验同名的库只有原作者才能上传)

- 创建远程仓库
我这里采用的gitee.com。其实和github.com是一样的,不过github只能建一个私有仓库不够用,所以就用码云了。
a.首先必须创建SoulToolsLibrary,这个仓库用来保存我们的轮子源码。
开源的话记得选开源许可证,我就直接MIT了;不开源的话,需要创建SoulPrivatePodspec仓库。这里不需要添加.Readme初始化,因为后边pods会自动帮我们添加Readme模板。

创建完成后无需Clone到本地目录,等下把CocoaPods自动生成的同名目录Remote过来就好了。后面我直接用SourceTree了,方便演示,当然也可以用命令行。
(本模块演示公有Pod,可以直接跳转到步骤c,私有的需要b的,下个模块单独解释。)
b.其次私有库的话需要创建SoulPrivatePodspec,这个仓库用来储存各个版本的.podspec索引文件。
直接开源就好,不然别人pod install的时候,还要获取你这个git权限。
创建完成后Clone到本地目录,我这里直接用SourceTree了,方便演示,当然也可以用命令行。
c.最后我们本地再建一个目录SoulTestDemo,用来模拟第三方用户工程测试我们pod能不能用,这个就留在本地就好了,不用同步到远端了。
最后目录如下图

-
本地新建工程
本地新建测试工程.png
我们现在需要通过github的模板生成自己的Pod库开发环境
/*进入本地目录*/
cd ~/Users/mac/MyPodLibrary/SoulToolsLibrary
/*创建我们的pod库开发环境*/
pod lib create SoulToolsLibrary
/*配置开发环境*/
直接回车就是带下划线的默认值,具体配置如下附图
/*说明*/
配置完成后 会自动创建并打开Workspace
附图:

//platform 发布平台
iOS
//language 开发使用的语言
ObjC
//demo 是否包含演示程序;有两个用途:1.编写框架的时候可以用来测试,2.支持pod try MyLib(SoulToolsLibrary)
Yes
//testing frameworks 使用什么测试框架;
None
//view base testing 是否使用基于视图的测试;亲测选择yes的话,将自动导入FBSnapShotTestCase,这个框架只支持swift3.0,要求Xcode8一下...
NO
//class prefix 类名前缀;建议两位大写英文字母
ST
- 编写Library以及Demo

a.在上述自动打开的workspace,我们可以看到就说熟悉的pod install之后生成xworkspace是一样的,唯一不同的就是Pod引用我们自己的库的路径是本地相对路径。红框内的内容及Podspec的描述,两个红框指向的是同一文件;LICENSE即开源许可,一般不用管;README也是Cocoapods自动生成的描述,按照原有格式修改即可。
b.在上图中ReplaceMe.m文件处右键,Show in Finder。我们会发现两个平级目录,一个Classes保存我们类,还有一个Assets保存的是资源文件,例如图片等。这个示例文件ReplaceMe.m可以删除。

c.我们添加一个自定义类和方法,实现我们的库。

d.在Demo实现调用,我们打印一下。尖括号引用,完美运行~

- 配置xxx.podspec文件
s.name : 项目名
s.version : 版本号(需跟后面打 Tag 的值相等)
s.homepage : 项目主页(请注意,这里的地址跟git仓库地址有一定差别,请同学们看清截图示例并区分)
s.license : 开源协议(这里我们选择 MIT )
s.source : Git 仓库地址(第二步所复制的仓库地址)
s.ios.deployment_target : 项目最低支持版本
s.source_files : 具体去那个目录下下载特定共享代码(注意:这里的地址与 .podspec 文件同级目录开始,,示例:PrivateLib/Classes/** /*表示如下目录下的所有文件


- 验证.podspec 文件的格式正确性
pod lib lint --verbose
出现下图,即代表成功;
这里有个小技巧,就是lint前可以先回到xcodeproj目录pod install一下,自己排查有没有编译问题;
如果还有其他报错例如描述不合法等情况,修改后重新lint即可。

-
上传到Git,并标记Tag
image-20180920184108974.png
- 注册CocoaPods作者信息
a.现在你已经拥有一个成功的SoulToolsLibrary了,现在想要share到平台上,那么是不是需要注册一个账号呢?ok通过以下命令,将会给你的邮箱发送一封邮件,点击链接即可注册成功。
pod trunk register yourEmail@gmail.com 'yourName' --description='Soul Personal Laptop' --verbose




账号创建完毕!~~
- 使用trunk上传pod
pod trunk push SoulToolsLibrary.podspec --verbose

感觉ok了,可以访问看一下这个json,一目了然就不分析了。
https://raw.githubusercontent.com/CocoaPods/Specs/b2c3735a9046e5373956b35a510414a93b0af5ff/Specs/4/b/a/SoulToolsLibrary/0.1.0/SoulToolsLibrary.podspec.json
-
搜索验证并使用
a.新建一个项目,并初始化Pod
image-20180920193107194.png
b.编辑Podfile并install

c.Test调用打印

d.pod Search 一下 or pod try 一下;记得先pod setup更新一下本地库

上传一个私有Pod(对比公有)
1.托管代码的SoulToolsLibrary需要关闭开源。
2.将生成的podspec文件托管到SoulPrivatePodspec中,SoulPrivatePodspec仓库可以开源。
3.pod install的时候需要验证Git权限,即登录账号密码。
网友评论