随着公司的不断发展,业务领域越来越广泛,团队也在不断壮大,那么随着项目的增多,我们越来越感觉到重复工作的情况越来越频繁,于是封装了很多工具类和第三方库等等便于集成。但是集成的方式却非常低效,都是直接将需要用到的类添加到工程里面。这样子不便于管理。所以搭建私有库非常有必要。本篇文章需要有一定的知识基础。
创建私有库
搭建私有库有两种方案:一种是搭建在公司服务器(内网/外网)上,另一种是托管在第三方平台上面。目前我使用的是第二套方案。
由于是私有库,GitHub私有库是收费的,加上没资金(穷)所以没办法放在上面,只能选择其他平台,目前可支持免费私有库的平台有Coding,码云,Bitbucket等。
我们先创建一个私有库,我选择的是Bitbucket平台。因为私有库数量没有限制,所以暂且选择这个平台。说干就干!
然后我们将私有库Clone到本地,本次选用Sourcetree进行管理。
创建本地CocoaPods索引库
关于CocoaPods的,我之前有文章写过相关知识的,需要脑补的童鞋先过一遍。
CocoaPods安装过程
CocoaPods之repo换源和gem换源
如何从项目中移除CocoaPods(译)
接下来我们继续,一般我们安装CocoaPods之后会在本地有一个仓库,仓库里面会有所有使用CocoaPods的开源项目的索引库。
现在,把我们自己的远程索引库下载到本地,和CocoaPods的官方索引库在同一级目录。
在终端输入: pod repo add 仓库名 仓库源地址(SSH地址)
例如我输入的是: pod repo add XXModule https://XXX@bitbucket.org/Apple_Developer/xxmodule.git
|
|
创建完后,会在多出一个目录,这个目录就是专门用于当做本地索引库用。我们也可以不创建,直接使用远程的就行。
后续操作及补充说明
后续的操作这边直接引用网友写的一篇文章iOS组件化开发:远程私有库,写的还算是比较细致的。这边做一个补充说明。
里面的大概步骤如下:
1、创建远程私有库
2、将私有库Clone
到本地
3、创建本地索引库-指令pod repo add 仓库名 仓库源地址(SSH地址)
4、创建一个模板库-指令pod lib create 远程仓库名
5、将需要继承的类库添加到Classes
文件夹下面,同时删除里面默认创建的ReplaceMe.m
文件
6、再cd到测试工程目录,执行pod install
指令会安装我们刚才拖入的类库
7、打开测试工程,已经有我们的类库了,现在配置xxx.podspec
文件(文件具体说明详情见上面的文章)
8、本地仓库开发完毕之后,借助Sourcetree将整个工程push到远端私有库上面同时打一个tag
10、校验操作,分本地跟远端校验
11、上传索引库并在工程内测试
subspec子模块化
当我们封装了大量的组件之后,有时候只想使用其中的某一个组件,不希望一次性导入大量的组件时。子模块的优势就显现出来。
比如我们在Classes目录下有XXScanA
,XXScanB
,XXScanC
,XXScanD
等多个组件,然后我的新项目只需要引入组件XXScanA
,那么就需要在.podspec
文件里面配置。具体配置如下:
|
|
说明
参数 | 说明 |
---|---|
.source_files | 这里的路径是相对于.podspec文件位置的路径,下载该目标路径下的文件 |
.exclude_files | 这里的路径是相对于.podspec文件位置的路径,不下载该目标路径下的文件 |
.libraries | 添加依赖的系统library |
.vendored_libraries | 添加第三方.a文件 |
.resource | 如果有包含资源文件,则需要此参数 |
.dependency | 添加第三方依赖 |
.ios.frameworks | 添加依赖的系统framework |
.prefix_header_contents | 类似于pch文件,多个用逗号隔开 |
.requires_arc | 设置需要ARC(自动引用计数) |
校验
在将我们的私有库提交的时候,会先进行校验操作。这里说下我这边出现的情况以及使用对应的校验指令。
验证有两种,一种是本地校验.podspec
文件,另一种是远程校验.podspec
文件。
需要注意的是,校验需要cd到.podspec
文件所在目录进行。远程校验需要事先将工程push到远端私有库上面,同时打上tag。
有时候我们可能在同一个tag上面进行多次修改,比如当前tag版本是0.1.0
。这个时候,应该先将tag0.1.0
移除,然后给最新的提交点重新打上tag0.1.0
。
删除标签
使用旧标签版本号
|
|
这里说明下,最好加上参数,便于定位问题。所以应该是如下写法:
|
|
上传索引库
本地跟远程校验都成功之后,我们就可以更新索引文件到本地索引库跟远端私有库上面,执行以下指令
|
|
说明:这个命令,其实先把索引文件推送到本地CocoaPods的索引库,在由本地的CocoaPods推送到我们的远程私有索引库。所以,这一步操作之后,CocoaPods索引库和我们远程私有索引库都有了这个索引文件,不用再去推送到本地CocoaPods索引库了。
我们在编译类库时,难免存在警告,最好先解决警告,再编译检查。但是,如果需要忽略编译警告,则要添加额外参数--allow-warnings
设置。
另外一开始搭建CocoaPods时,使用了官方的模板指令pod lib create 远程仓库名
创建的工程,都会帮我们创建两个文件夹。一个是Classes
,另一个是Assets
,当我们执行pod repo push 索引库名 索引文件名 --use-libraries --allow-warnings
更新索引库的指令之后,这两个文件夹也会跟着被下载到本地索引库里面,等执行完上面的指令之后再删除即可。不然本地测试会报错。
如果执行上面的指令之后报如下错误:
|
|
解决办法:先执行下面的指令更新下我们的版本库,再继续执行上面的指令上传即可。
|
|
测试本地跟远端
最后我们在以后项目的Podfile
文件里面只需要如下写法即可:
|
|
终端运行pod install
后,会默认从GitHub
上搜索公开库,因此,我们需要在Podfile
上指明我们的私有库的地址,在Podfile
最顶部添加如下代码:
|
|
最后大功告成!🎉
参考资料
教程相关:
iOS组件化开发:远程私有库
CocoaPods集成和使用
创建CocoaPods私有podspec
COCOAPODS创建私有PODS
创建私有CocoaPods仓库
使用私有Cocoapods仓库 中高级用法
创建属于自己的私有库
CocoaPods 私有仓库的创建(超详细)
iOS组件化解决方案(私有pod、热更新、个推、友盟等知识点)
问题相关:
cocoapods迭代版本时,出现问题
The NAME.podspec specification does not validate
Cocoapods项目添加Cocoapods支持遇到的坑
CocoaPods 问题和解决
再一次感谢您花费时间阅读这篇文章!
微博: @Danny_吕昌辉
博客: SuperDanny