组件化远程私有库解决方案(cocoapods基于git 、svn
前言
随着业务越来越庞大,在单工程中,app中代码逐渐越来越大,面对高耦合和难以复用的模块,我们就需要进行重构了。而面对多条业务线,组件化是一种优秀的解决方案,将需要的组件以pod私有库形式安装到主工程中,组件间各自独立,解耦,仅仅依赖一个中间件进行通讯。那么对于各个组件托管到远程平台最常用的是git,git的优越性也无需赘言,但是很多公司对于代码管理往往是本公司的svn服务器,本文的重点也是讲解一下svn服务器托管的操作,这在网上资源是很少有正确的,这篇文章带你真正学会cocoapods 基于svn托管方式。
郑重申明
本文是一篇高级教程,不提供入门基础教程。
首先我们以git为基础讲解代码托管原理,请看下图:

1.首先我们需要一个远程托管仓库,git或者svn。
2.必须明确一个概念我们需要两个远程仓库,一个是远程的索引库和一个远程的源码库,cocoapods 基本原理也是这样的,平时采用的方式和我们组件化唯一区别就是将公有变为私有。
我们通过将远程索引库添加到本地,然后在本地生成索引文件,当 pod 'LibBase',pod install,首先会在本地索引文件中查找到相应库文件地址进行本地clone,这样我们就可以使用了。
3.当我们将代码传到远程源码仓库以后,需要在进行第5步操作,向私有索引库提交,这里需要解释一下这个过程,当我们通过命令行操作向本地私有索引库推入索引文件,同时也会添加到远程索引库,这样当小伙伴要使用你的库,只需要更新他本地的就可以了。
那么以上就是git 方式的主要操作,下面我重点演示svn方式。
1.选用第三方svn服务器作为测试:
http://code.svnspot.com
这里允许创建两个库,刚好满足我们私有索引库和代码库的创建,

2.接下来我们需要将远程索引库,添加到本地,这里为了满足svn 操作我们需要安装一个 cocoapods-repo-svn插件,参考 https://github.com/dustywusty/cocoapods-repo-svn
pod repo-svn add Name Url
这里本地索引库名字尽量保持一致,url 就是远程索引库的地址
然后我们会在.cocoapod 看到这个文件夹

然后终端可以查看一下相应的索引库
pod repo

这里就有我们的索引库 SpecsRepo
。
3.接下来我们需要将远程源码仓库克隆到本地,采用Cornerstone 工具
两种方式,直接添加远程地址或者通过终端命令克隆下来然后导入。
具体操作不在赘述。
4.创建本地私有模板库
pod lib create Name

我们需要把 .git .gitignore .travis.yml 这三个文件删掉,然后将这个库拖入到 svn 本地仓库的 trunk下面。当然这个里面包括你的组件库文件。
5.编写podsepc 文件

这里我们需要将原地址改为svn 地址,可以进行本地验证一下
pod lib lint
完成以后使用Cornerstone工具提交代码至远程。
6.远程打标签tag
svn 终端命令行好像没有直接打tag 的命令,我们可以直接通过Cornerstone打tag,需要注意的是标签的tag和podsepc 文件中的版本一致。

7.最后一步提交spec至私有索引库
pod repo-svn push Name xx.podsepc
需要注意的是cd 到 本地trunk 文件夹目录下,才能包含xx.podsepc 文件。
至此我们大功告成!我们可以通过终端 搜索一下我们的库
pod search BCBaseLib

这里我已经提交了两个版本。
8.使用
Podfile文件编写
platform :ios, '8.0'
target 'test' do
plugin 'cocoapods-repo-svn', :sources => [
'http://10.211.55.3/svn/SpecRepo' # 远程索引库地址
]
use_frameworks!
pod 'BCBaseLib' # 本地 svn 私有库
pod 'AFNetworking' # 可直接 pod 公开三方库
end
可能会出现以下问题
- pod install 报错找不到组件
可以更新一下本地索引库 pod repo-svn update --no-repo-update
2>路径不对

我在测试中发现该地址不对,折腾了半天才发现 在podspec 文件中 s.source 路径不对,通常产生这种问题大家可以先通过浏览器访问该地址,如果不通就说明该地址不对。