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模板。

Gitee

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

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

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

最后目录如下图


演示文件目录.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
编写Library以及Demo.png

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

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


i自动生成的文件目录.png

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


随手写个类方法.png

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


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/** /*表示如下目录下的所有文件
image-20180920172749679.png

image-20180920172815009.png
  1. 验证.podspec 文件的格式正确性
  pod lib lint --verbose

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

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


    image-20180920184108974.png
  1. 注册CocoaPods作者信息
    a.现在你已经拥有一个成功的SoulToolsLibrary了,现在想要share到平台上,那么是不是需要注册一个账号呢?ok通过以下命令,将会给你的邮箱发送一封邮件,点击链接即可注册成功。
 pod trunk register yourEmail@gmail.com 'yourName' --description='Soul Personal Laptop' --verbose
i申请账号.png
去邮箱查询邮件.png
点击激活链接之后.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调用打印


image.png

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


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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容