Swift 组件化开发之创建远程私有库
好好学习,天天向上
前言
组件化的优点
优点
- 降低耦合度
- 组件单独开发,独立测试
- 多人协作开发
缺点
- 版本同步的问题
组件化划分
基础组件
基础配置(经常用到的宏,常量),分类,网络(AFN、SDW二次封装)、工具类(日期时间的处理,文件处理,设备处理)
功能组件
控间(弹幕、轮播器、选项卡);功能(断点续传,音频处理)
业务组件
业务线一,业务线二
正文
前面都是开场白,直接进入主题
步骤归纳:
- 创建远程索引库
- 将远程索引库添加到本地
- 创建本地私有库,完成测试
- 修改
Spec
文件 - 提交私有库代码并增加
tag
- 提交spec至私有索引库
- 测试
步骤详细说明:
0.插播一下即将用到的pod
命令
-
pod repo add 索引库名称 索引库地址
: 添加自己的索引库 -
pod lib create 组件名
:在本地创建一个基于pod模板的git仓库 -
pod lib lint
: 本地库验证 -
pod spec lint
: 远程库验证 -
pod repo push 索引库名称 .podspec文件
: 先将pod索引添加到本地的索引库,然后会自动推送到远程的索引库
1. 创建私有索引库
远程索引库创建是以常用的【码云】为例的,如下图所示。
1.png2. 将私有索引库添加到本地
2.1 通过pod repo
命令行,查看pod
源地址
2.png
如上图,目前我的本地只有一个github上的公有索引库。
2.2 通过插播的pod
命令,添加远程索引库到本地
执行以下命令:
pod repo add KPSpecs https://gitee.com/katypei/KPSpecs.git
2.3 验证索引库是否添加到本地成功
重新执行pod repo
即可。
如上图所示,及添加成功。
3.创建本地私有库(此处以KPExtension
为例)
3.1 在【码云】创建组件库,库名为KPExtension
3.2 通过pod
命令,在本地创建一个基于pod模板的git仓库,仓库名如3.1
pod lib create KPExtension
使用以上命令,需要进行一些信息的配置
5.png以上配置针对个人需要进行配置,此处因为我本人是希望创建一个swift的远程私有库,所以此处语言我选择了Swift
。配置完成之后,会自动打开一个响应的Example项目。该项目如下:
将需要放到该私有库的文件替换Classes
文件夹中的Replace.swift
。如下所示:
3.将上述文件拖动到对应位置(也就是之前ReplaceMe.swift
之前所在的文件夹下),如下图所示:
9.png
4. 执行pod install
命令,在Example
中进行测试,确保组件可用。
4.修改Spec
文件
10.png
以下是Spec
文件简单介绍
s.name = "KPExtension(仓库名称)"
s.version = "0.0.1(版本号,这里跟下面s.source中的tag有关)"
s.summary = "对你自己仓库的简单描述,不要写太多字"
s.description = "这个是详细描述,需要比s.summary的要长,不然会出现警告"
s.homepage = "仓库首页地址,如https://github.com/KityPei/KPExtension"
s.license = "MIT"
s.author = { 'KityPei' => 'kity_pei@163.com' }
# source存放的地址是代码的真正地址
s.source = { :git => "仓库对应的git地址,如https://gitee.com/katypei/KPExtension.git", :tag => "#{s.version}" }
# pod install时真正下载下来的文件路径,这里指定的是你仓库下的Classes目录中的所有.h和.m文件(填写的是相对地址)
# ** 通配目录
s.source_files = 'KPExtension/Classes/**/*'
# s.resource_bundles = {
# 'KPExtension' => ['KPExtension/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.library = "sqlite3" # 框架依赖系统的sqlite3
主要需要修改的地方:
s.name = "KPExtension"
s.version = '0.0.1'
s.summary = '常用到的分类'
s.homepage = 'https://gitee.com/katypei'
s.source = { :git => 'https://gitee.com/katypei/KPExtension.git', :tag => s.version.to_s }
非常重要的事情
s.source
要修改成对应的git地址
s.source
要修改成对应的git地址
s.source
要修改成对应的git地址
5. 提交私有库代码并增加tag
5.1 将代码提交到组件仓库,常用的git
命令,git工具就不说了
git add . // 工作时的所有变化提交到暂存区
git commit -m '注释' // 提交到版本库
git remote add origin https://gitee.com/katypei/KPExtension.git
git push -u origin master
5.2 打上tag
git tag '0.0.1'
git push --tags
6. 提交spec
至私有索引库
6.1 本地验证Spec
的必填字段
pod lib lint
验证通过如下图:
本地验证通过.png6.2 远程验证Spec
pod spec lint
验证通过如下图:
远端验证通过.png6.3 提交podspec
执行以下命令,将我们的代码直接push到本地索引库KPSpecs,推送后会自动帮我们同步到远程索引库
pod repo push KPSpecs KPExtension.podspec
成功可以如下图所示:
添加到私有索引库成功.png成功也可以如下图所示:
使用Finder
查找,路径应该如下:
~/.cocoapods/repos/
文件显示.png
7. 测试
测试就不多说了,注意事项就是要指定pod源,否则可能找不到创建的私有远程。
即在podfile
文件中添加:
source 'https://github.com/CocoaPods/Specs.git' # github的公有索引库
source 'https://gitee.com/katypei/KPSpecs.git' # 自己的私有索引库
踩坑之旅
问题一:
在进行本地验证的时候,出现以下错误:
11.png出现这种情况的原因:
因为制作的是Swift
的私有库,没有指定Swift
语言的版本,验证器默认使用的是Swift 3.2
,可能会出现问题,希望指定Swift
语言的版本。
解决方案:
- 使用
pod lib lint --alow-warnings
命令忽略验证过程中的警告(使用的该命令应该注意你包装过的库尽量是没问题的); - 修改
.podspec
文件,新增一行s.swift_version = '4.0'
,指定Swift
语言的版本,当然马上就出Swift 5.0
了; - 在工程目录执行
echo "4.0" > .swift-version
,在验证配置文件的时候执行pod spec lint prcject.podspec --swift-version=4.0 –verbose
指定Swift
的版本。