美文网首页iOS之框架架构iOS之开发配置傲视苍穹iOS《Objective-C》VIP专题
组件化远程私有库解决方案(cocoapods基于git 、svn

组件化远程私有库解决方案(cocoapods基于git 、svn

作者: mark666 | 来源:发表于2017-08-03 11:30 被阅读260次

    前言

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

    郑重申明

    本文是一篇高级教程,不提供入门基础教程。

    首先我们以git为基础讲解代码托管原理,请看下图:

    git 操作方式

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

    那么以上就是git 方式的主要操作,下面我重点演示svn方式。

    1.选用第三方svn服务器作为测试:

    http://code.svnspot.com
    这里允许创建两个库,刚好满足我们私有索引库和代码库的创建,

    svn 远程测试库

    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 文件

    podsepc 文件编写

    这里我们需要将原地址改为svn 地址,可以进行本地验证一下

    pod lib lint

    完成以后使用Cornerstone工具提交代码至远程。

    6.远程打标签tag

    svn 终端命令行好像没有直接打tag 的命令,我们可以直接通过Cornerstone打tag,需要注意的是标签的tag和podsepc 文件中的版本一致。


    远程打标签可以在tag中查看版本

    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
    

    可能会出现以下问题

    1. pod install 报错找不到组件

    可以更新一下本地索引库 pod repo-svn update --no-repo-update

    2>路径不对


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

    以上呢就是基于svn的所有主要的过程,一些细节问题大家可以自行尝试。

    相关文章

      网友评论

      • 金小俊:plugin 'cocoapods-repo-svn', :source => [
        'http://xx-svn01/svn/cxxx/trunk/modules/TestPodSpecs'
        ]
        我这边用这个就会出错
        ### Error

        ```
        LocalJumpError - unexpected return
        请问这个是什么原因?
        金小俊:@mark666 我用pod repo-svn add xxx能正常把spec添加到/Users/xx/.cocoapods/repos/路径下,pod search也能搜索到,就是在demo工程pod install的时候就报错,plugin 'cocoapods-repo-svn', :source => 只要用了这个就出错
        金小俊:@mark666 浏览器可以访问的,是不是我的cocoapod版本不对?能问下你是什么版本吗
        mark666:@金小俊 你装插件了吗,装了的话你用浏览器看能不能访问的通

      本文标题:组件化远程私有库解决方案(cocoapods基于git 、svn

      本文链接:https://www.haomeiwen.com/subject/dwmulxtx.html