组件化开发之私有库制作以及常见问题

前言:这篇文章主要描述私有库的制作过程以及本人在使用过程中的一些问题和解决方案,提到组件化就不得不想到pods私有库相关的东西(当然组件化不局限于结合私有库使用,还可以做成静态库或者多target开发等方式,这里只讲解私有库相关的东西,稍后会出一篇组件化结合私有库实现组件化开发的方式)

私有库,顾名思义就是不想暴露给公共知晓的库,也可以说仅供公司或者个人使用的库,我们常用的第三方库管理方式是cocoapods,所有的第三方都有一个存放索引的源地址,也可以理解为公有库地址 https://github.com/CocoaPods/Specs
在终端输入 pod repo就能看到里面有个master,这个就是我们在安装cocoapods的时候,在本地创建的索引库,默认的第三方库文件都会从本地索引库先查找,如果本地索引库没有,就会从源地址中获取,这也是为何我们首次pod install第三方的时候慢,执行pod update或者 pod update xxx --no-repo-update的时候也会慢的原因。好了,废话不多说,下面开始进入正题(为了方便复制和查看,我会配上操作图以及对应的命令)

一:准备工作

1. 查看本地是否有了私有库索引文件
image.png

终端操作:pod repo,会看到有个索引列表如下:

image.png

如果本地没有就只有master一个,我这里已经有了一个私有的,那么如何创建呢?请看下面:

2. 创建远程私有库索引(这里以在github上为例)
image.png

由于github私有库收费,我这里以public为例,实则是一样的。
一般命名为xxxSpec

image.png

点击create repository即可创建仓库成功
这里我们可以得到一个远程索引库的地址,下面要用

image.png
3. 添加本地私有库索引
image.png

终端执行命令 : pod repo add 本地索引库名称 远程索引库地址,后面的地址就是远程索引库地址,LWPrivateSpec即为本地索引库的名称,这个可以自定义,一般和远程库名称保持一致即可

image.png

执行 pod repo后查看,本地私有索引库文件已经好了,到这里关于索引库的创建就完成了,下面开始进入私有库创建的环节

二:私有库创建

1. 创建远程仓库

方法和索引库创建一样,这里不在赘述

2. 将远程库拉取到本地
image.png

选择一个路径,将远程库clone到本地
git clone 远程库地址

为了测试需要,需要创建测试工程,方便对组件功能的测试

3. 创建工程
image.png
4. 引入pod

进入工程目录,执行如下命令,创建空的pod文件
pod init

pod install

5. 创建podspec文件

进入本地仓库路径,执行如下命令


image.png

pod spec create 库名称这里库名称最好和仓库名称一致,也可以随便起,也就是日后pod 'xx库'这里要填写的名称

另外在.podspec同等路径下,创建Pod/Classess文件,最后的结构如下:


image.png

之后的功能模块就放在classes文件下

三:podspec的编写及其相关依赖设置

1. podspec文件的编写

打开.podspec文件如下(截取部分):


image.png

这里主要注意一下几个点:

  • s.name: 库的名称
  • s.version:版本号
  • s.summary:摘要
  • s.description:描述部分,要比摘要长
  • s.homepage:源地址,也就是私有库对应的远程地址
  • s.license:执照,一般选择默认
  • s.author:作者名称
  • s.platform:支持平台
  • s.source:来源
  • s.source_files:文件路径
  • s.framework/s.frameworks:依赖的系统的framework
  • s.dependency:依赖的库


    image.png

这样提交后,引用时会发现,所有的.h,.m文件都在Classes文件下,我们看到有的第三方文件管理会出现分层


image.png

像这样有几个子库,比如我们想要用WXPay,那么在podfile中只需要引入pod 'YGFunctionComponent/WXPay'即可,那么这种是如何设置的呢?下面讲述:

2. 分层文件的编写
image.png

这里有三个子库,每个子库中都可以只编写自己的功能,当然子库之间也可以依赖,这个后面再讲


image.png

子库创建主要依赖于subpec
要注意的是 do 和 and要成对出现,不然验证的时候会报错
也许你已经注意到,子库中也可以设置各自的依赖,还有一点要注意,父库的source_files设置要么去掉,要么就变化,不能再是Pod/Classess/**/*.{h,m}的格式,否则分层是没用的,比如我们想要在父库中有一个头文件xxx.h,需要这样设置:Pod/Classes/xxx.h

image.png

导入后的结构如下:


image.png
3. 子库间的依赖

比如:我在LWFunctionComponent中有一个Utils的子库,在LocationTool中用到了Utils这个子库,那么该如何设置呢?

image.png

xx.dependency "库名称/子库名称"

4. 私有库之间的依赖

和依赖第三方库一样
s.dependency "私有库名称

5. 验证过程

首先是要提交到远程并打tag值
git add .

git commit -m "xxx"

git push

git tag xxx这里的tag要和podspec中的保持一致,否则会报错

git push --tags

5.1 本地验证
pod lib lint

5.2 远程验证
pod spec lint

6. 添加到私有库索引

pod repo push 本地私有索引文件名 库名称.podspec

当然如果只是上面的写法你会发现会遇到很多问题,在第四点中我会列出一些常见的问题以及解决方案

三:引入图片等资源文件

图片

创建Assets资源文件,创建bundle文件放到Assets中

sources设置

设置resource_bundles的路径

结果

导入后的层次结构图如图

使用:


读取bundle中的图片资源

xib的引入与使用也是类似,具体的讲解这里不再多说

四:验证过程的问题及其解决方案

  1. tag值导致的问题,这里再次强调,一定要注意git所打的tag值一定要和podspec中的保持一致
  2. 警告导致的问题,提交的时候你会发现很多-WARN开头的,如果你按照的是pod spec lint或者pod lib lint,那么一定会报错,这个时候只需要加上--allow-warnings即可解决
  3. 依赖第三方库导致的报错问题,只需加上--use-libraries即可解决
  4. 私有库依赖私有库找不到的报错问题,一般情况下会默认从master或者官方的spec源地址https://github.com/CocoaPods/Specs中去查找依赖库文件,而私有库是查找不到的,所以解决方法如下:
    --source=私有库源地址,官方库源地址即可

注意:上面的2,3两点错误在添加私有索引的时候,也要加上--use-libraries --allow-warnings这样的标识,否则也会报错哦

结束语:写了两个多小时,最后的问题以及解决方案模块实在不想再截图了,如果有需要后续会慢慢补上,敬请谅解
如果有其他问题,可以留言或评论区讨论

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

推荐阅读更多精彩内容

  • 最近在学习vue.js的时候发现,vue的组件化的思想对于编写代码是一个非常有用的事情。 首先为什么需要组件化? ...
    拂晓的云阅读 7,131评论 6 23
  • 项目更新到一定的阶段,工程越来越大,编译时间越来越长,我们一般会将项目抽取成一个个的组件,组件一般都会使用coco...
    魏小庄阅读 1,332评论 0 2
  • 项目组件化、平台化是技术公司的共同目标,越来越多的技术公司推崇使用pod管理第三方库以及私有组件,一方面使项目架构...
    swu_luo阅读 21,195评论 0 39
  • 姓名:徐群杰 公司:宁波大发 【日精进打卡第27天】 【知~学习】 《六项精进》大纲0遍 ...
    徐群杰阅读 203评论 0 0
  • 对于画画从来没坚持过,总是三天打鱼两天晒网,偶尔心血来潮就画上一副,所以水平也一直没提高过,小时候的梦想也变成了现...
    语木阅读 315评论 9 8