前言:这篇文章主要描述私有库的制作过程以及本人在使用过程中的一些问题和解决方案,提到组件化就不得不想到pods私有库相关的东西(当然组件化不局限于结合私有库使用,还可以做成静态库或者多target开发等方式,这里只讲解私有库相关的东西,稍后会出一篇组件化结合私有库实现组件化开发的方式)
私有库,顾名思义就是不想暴露给公共知晓的库,也可以说仅供公司或者个人使用的库,我们常用的第三方库管理方式是cocoapods,所有的第三方都有一个存放索引的源地址,也可以理解为公有库地址
https://github.com/CocoaPods/Specs
在终端输入pod repo
就能看到里面有个master,这个就是我们在安装cocoapods的时候,在本地创建的索引库,默认的第三方库文件都会从本地索引库先查找,如果本地索引库没有,就会从源地址中获取,这也是为何我们首次pod install
第三方的时候慢,执行pod update
或者pod update xxx --no-repo-update
的时候也会慢的原因。好了,废话不多说,下面开始进入正题(为了方便复制和查看,我会配上操作图以及对应的命令)
一:准备工作
1. 查看本地是否有了私有库索引文件
终端操作:pod repo
,会看到有个索引列表如下:
如果本地没有就只有master
一个,我这里已经有了一个私有的,那么如何创建呢?请看下面:
2. 创建远程私有库索引(这里以在github上为例)
由于github
私有库收费,我这里以public
为例,实则是一样的。
一般命名为xxxSpec
点击create repository
即可创建仓库成功
这里我们可以得到一个远程索引库的地址,下面要用
3. 添加本地私有库索引
终端执行命令 : pod repo add 本地索引库名称 远程索引库地址
,后面的地址就是远程索引库地址,LWPrivateSpec
即为本地索引库的名称,这个可以自定义,一般和远程库名称保持一致即可
执行 pod repo
后查看,本地私有索引库文件已经好了,到这里关于索引库的创建就完成了,下面开始进入私有库创建的环节
二:私有库创建
1. 创建远程仓库
方法和索引库创建一样,这里不在赘述
2. 将远程库拉取到本地
选择一个路径,将远程库clone到本地
git clone 远程库地址
为了测试需要,需要创建测试工程,方便对组件功能的测试
3. 创建工程
4. 引入pod
进入工程目录,执行如下命令,创建空的pod文件
pod init
pod install
5. 创建podspec文件
进入本地仓库路径,执行如下命令
pod spec create 库名称
这里库名称最好和仓库名称一致,也可以随便起,也就是日后pod 'xx库'
这里要填写的名称
另外在.podspec同等路径下,创建Pod/Classess文件,最后的结构如下:
之后的功能模块就放在classes文件下
三:podspec的编写及其相关依赖设置
1. podspec文件的编写
打开.podspec文件如下(截取部分):
这里主要注意一下几个点:
- 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:依赖的库
这样提交后,引用时会发现,所有的.h,.m文件都在Classes文件下,我们看到有的第三方文件管理会出现分层
像这样有几个子库,比如我们想要用WXPay,那么在podfile中只需要引入pod 'YGFunctionComponent/WXPay'
即可,那么这种是如何设置的呢?下面讲述:
2. 分层文件的编写
这里有三个子库,每个子库中都可以只编写自己的功能,当然子库之间也可以依赖,这个后面再讲
子库创建主要依赖于subpec
要注意的是 do 和 and要成对出现,不然验证的时候会报错
也许你已经注意到,子库中也可以设置各自的依赖,还有一点要注意,父库的source_files设置要么去掉,要么就变化,不能再是Pod/Classess/**/*.{h,m}
的格式,否则分层是没用的,比如我们想要在父库中有一个头文件xxx.h,需要这样设置:Pod/Classes/xxx.h
导入后的结构如下:
3. 子库间的依赖
比如:我在
LWFunctionComponent
中有一个Utils
的子库,在LocationTool
中用到了Utils
这个子库,那么该如何设置呢?
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中
设置resource_bundles的路径
导入后的层次结构图如图
使用:
xib的引入与使用也是类似,具体的讲解这里不再多说
四:验证过程的问题及其解决方案
- tag值导致的问题,这里再次强调,一定要注意git所打的tag值一定要和podspec中的保持一致
- 警告导致的问题,提交的时候你会发现很多-WARN开头的,如果你按照的是
pod spec lint
或者pod lib lint
,那么一定会报错,这个时候只需要加上--allow-warnings
即可解决 - 依赖第三方库导致的报错问题,只需加上
--use-libraries
即可解决 - 私有库依赖私有库找不到的报错问题,一般情况下会默认从master或者官方的spec源地址
https://github.com/CocoaPods/Specs
中去查找依赖库文件,而私有库是查找不到的,所以解决方法如下:
--source=私有库源地址,官方库源地址
即可
注意:上面的2,3两点错误在添加私有索引的时候,也要加上--use-libraries --allow-warnings这样的标识,否则也会报错哦
结束语:写了两个多小时,最后的问题以及解决方案模块实在不想再截图了,如果有需要后续会慢慢补上,敬请谅解
如果有其他问题,可以留言或评论区讨论