CocoaPods库搭建及托管实践

惯例吹水

众所周知CocoaPods,已经成为iOS/Mac OS程序员离不开的三方库管理工具。

除了我们引用一些知名的大佬框架以外,有时候我们也想分享一下自己的小轮子,或者托管自己的私有框架,尤其是组件化需要,想要上传属于自己的CocoaPods怎么办呢?

查阅了官方文档和一些前辈们的blog,感觉并不难,为了便于理解每一步命令的作用,决定还是需要自己手撸一遍。

什么是CocoaPods

Define once, update easily。看到宣传标语就感觉很easy。CocoaPods是OS X和iOS下的一个第三类库管理工具,通过PodFile文件我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所支持的),并且可以轻松管理其版本。

怎么安装CocoaPods

官方app下载地址

https://CocoaPods.org/app

民间小白鼠教程

https://www.jianshu.com/p/e85e71ed64e6

涉及到的一些概念

Podfile: 该文件为配置引用三方库文件,指定引用的库以及版本。

Podfile.lock: cocoapods根据本地podfile和远端仓库生成版本管理文件,便于用户协作。

.xcodeproj: iOS项目工程目录,本质是个文件夹,可用Xcode打开。

.xcworkspace:工作空间,联合多个项目工程,pod install后自动生成。

.podspec : 该文件为你的代码仓库索引描述文件,CocoaPods通过该文件对你真正存储代码工程的 Git 仓库进行索引与下载

本博客演示所用文件

SoulToolsLibrary: 托管我们的实现代码(根据公有私有选择是否公开),需要remote对应远程Git仓库

SoulPrivatePodspec: 托管我们生成的Podspec文件(私有Pod才用),私有库隐藏了源码则需要公开本仓库

SoulTestDemo: 模拟三方用户新建工程测试我们的Pod,不需要远程仓库,如果你非要建,就当我没说

以上文件目录,均放在~/MyPodLibrary目录里了,方便演示

image-20180920110426392.png

上传一个公有Pod


官方文档如下

https://guides.CocoaPods.org/making/index.html

  1. 搜索有没有同名库

    (因为最后一步CocoaPods会校验同名的库只有原作者才能上传)

image-20180919205834417.png
  1. 创建远程仓库

我这里采用的gitee.com。其实和github.com是一样的,不过github只能建一个私有仓库不够用,所以就用码云了。

a.首先必须创建SoulToolsLibrary,这个仓库用来保存我们的轮子源码。
开源的话记得选开源许可证,我就直接MIT了;不开源的话,需要创建SoulPrivatePodspec仓库。这里不需要添加.Readme初始化,因为后边pods会自动帮我们添加Readme模板。

CocoaPods库搭建及托管实践_第1张图片
Gitee

创建完成后无需Clone到本地目录,等下把CocoaPods自动生成的同名目录Remote过来就好了。后面我直接用SourceTree了,方便演示,当然也可以用命令行。
(本模块演示公有Pod,可以直接跳转到步骤c,私有的需要b的,下个模块单独解释。)

b.其次私有库的话需要创建SoulPrivatePodspec,这个仓库用来储存各个版本的.podspec索引文件
直接开源就好,不然别人pod install的时候,还要获取你这个git权限。
创建完成后Clone到本地目录,我这里直接用SourceTree了,方便演示,当然也可以用命令行。

c.最后我们本地再建一个目录SoulTestDemo,用来模拟第三方用户工程测试我们pod能不能用,这个就留在本地就好了,不用同步到远端了。

最后目录如下图


CocoaPods库搭建及托管实践_第2张图片
演示文件目录.png
  1. 本地新建工程


    本地新建测试工程.png

我们现在需要通过github的模板生成自己的Pod库开发环境

/*进入本地目录*/
cd ~/Users/mac/MyPodLibrary/SoulToolsLibrary

/*创建我们的pod库开发环境*/
pod lib create SoulToolsLibrary

/*配置开发环境*/
直接回车就是带下划线的默认值,具体配置如下附图

/*说明*/
配置完成后 会自动创建并打开Workspace

附图:
image-20180920115446795.png
   //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
  1. 编写Library以及Demo
CocoaPods库搭建及托管实践_第3张图片
编写Library以及Demo.png

a.在上述自动打开的workspace,我们可以看到就说熟悉的pod install之后生成xworkspace是一样的,唯一不同的就是Pod引用我们自己的库的路径是本地相对路径。红框内的内容及Podspec的描述,两个红框指向的是同一文件;LICENSE即开源许可,一般不用管;README也是Cocoapods自动生成的描述,按照原有格式修改即可。

b.在上图中ReplaceMe.m文件处右键,Show in Finder。我们会发现两个平级目录,一个Classes保存我们类,还有一个Assets保存的是资源文件,例如图片等。这个示例文件ReplaceMe.m可以删除。


CocoaPods库搭建及托管实践_第4张图片
i自动生成的文件目录.png

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


CocoaPods库搭建及托管实践_第5张图片
随手写个类方法.png

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


CocoaPods库搭建及托管实践_第6张图片
image-20180920171039773.png
  1. 配置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/** /*表示如下目录下的所有文件
CocoaPods库搭建及托管实践_第7张图片
image-20180920172749679.png

CocoaPods库搭建及托管实践_第8张图片
image-20180920172815009.png
  1. 验证.podspec 文件的格式正确性
  pod lib lint --verbose

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

image-20180920175435541.png
  1. 上传到Git,并标记Tag


    CocoaPods库搭建及托管实践_第9张图片
    image-20180920184108974.png
  1. 注册CocoaPods作者信息
    a.现在你已经拥有一个成功的SoulToolsLibrary了,现在想要share到平台上,那么是不是需要注册一个账号呢?ok通过以下命令,将会给你的邮箱发送一封邮件,点击链接即可注册成功。
 pod trunk register [email protected] 'yourName' --description='Soul Personal Laptop' --verbose
i申请账号.png
CocoaPods库搭建及托管实践_第10张图片
去邮箱查询邮件.png
CocoaPods库搭建及托管实践_第11张图片
点击激活链接之后.png
搞定.png

账号创建完毕!~~

  1. 使用trunk上传pod
pod trunk push SoulToolsLibrary.podspec --verbose
image-20180920190141130.png

感觉ok了,可以访问看一下这个json,一目了然就不分析了。
https://raw.githubusercontent.com/CocoaPods/Specs/b2c3735a9046e5373956b35a510414a93b0af5ff/Specs/4/b/a/SoulToolsLibrary/0.1.0/SoulToolsLibrary.podspec.json

  1. 搜索验证并使用
    a.新建一个项目,并初始化Pod


    image-20180920193107194.png

b.编辑Podfile并install


image-20180920193647745.png

c.Test调用打印


CocoaPods库搭建及托管实践_第12张图片
image.png

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


CocoaPods库搭建及托管实践_第13张图片
image-20180920191220476.png

上传一个私有Pod(对比公有)


1.托管代码的SoulToolsLibrary需要关闭开源。
2.将生成的podspec文件托管到SoulPrivatePodspec中,SoulPrivatePodspec仓库可以开源。
3.pod install的时候需要验证Git权限,即登录账号密码。

Cocoapods进阶


1.libwebp库Pod失败
业务场景:使用SDWebImage时需要支持webp,引入库SDWebImage/WebP后Pod install时执行失败。
解决思路:pod的原理就是从.podspec中获取配置,一般从github中同步代码;所以我们看一下托管的仓库地址,发现是google家的,一想那就是因为天朝的墙了
解决办法:

1、先通过 find ~/.cocoapods/repos/master -iname libwebp 直接就可以找到libwebp的地址
2、在Finder中找到对应版本的文件夹,找到libwebp.podspec.json文件
3、修改https://chromium.googlesource.com/webm/libwebp,替换为https://github.com/webmproject/libwebp.git

你可能感兴趣的:(CocoaPods库搭建及托管实践)