美文网首页iOS技术资料iOSApp组件化研究
ios项目-利用Pod进行组件化开发

ios项目-利用Pod进行组件化开发

作者: 跑步的李磊 | 来源:发表于2016-07-07 11:19 被阅读2963次

    最近参加GMTC全球移动技术大会听了滴滴iOS技术负责人李贤辉关于滴滴iOS客户端的架构演变之路很受启发,随着公司不断的壮大,无论是业务代码(如登录,注册,购买)还是功能代码(如网路层,数据库层,socket层)都在不断增加,所有代码都放到一个工程中,每次编译势必花费更多时间,而且如果公司有多个产品线,代码的复用率不高。如果把基础组件抽象成单个工程,直接编译成静态库,利用cocoapods管理,在主项目里引用资源文件,从而减少了编译的时间,并且提高代码的复用率。


    整体思路:

    1.创建一个私有spec repo 管理所有私有spec文件;
    2.创建Pod所需要的项目工程文件,并且有可访问的项目版本控制地址;
    3.创建Pod所对应的podspec文件;
    4.验证podspec文件是否可用;
    5.向私有的spec repo里添加podspec文件;
    6.新建个项目测试自己的私有库;
    7.更新podspec,建不同的版本;


    1.创建一个私有spec repo

    如果想利用pod安装私有库,那么就得创建和cocoapods官方一样的结构,我们想来看看cocoapods官方的结构,cocoapods所有公共库文件都存放在CocoaPods spec远端文件地址,如果在电脑上安装了cocoapods它会从这个地址clone一份到本地,每次pod update 都会更新这个本地仓库,首先先创建一个私有的库 ,由于github的私有仓库是收费的,这里用coding码市创建私有仓库,如果和其他人协同开发,只要把该仓库的权限添加给他就行。创建完远端的spec repo
    在终端执行
    pod repo add doctorpluse1Specs https://coding.net/wtlucky/doctorpluse1Specs.git
    然后执行
    open ~/.cocoapods/repos
    会开看到在repos中创建了一个私有的仓库,master是cocoapods官方的

    屏幕快照 2016-07-06 18.24.31.png
    2.创建Pod的所需要的项目工程文件,并且有可访问的项目版本控制地址

    (1).在coding码市在创建个仓库
    一个仓库存放spec 文件 一个存源代码


    屏幕快照 2016-07-06 18.33.30.png

    记得添加LICENSE文件
    (2).利用SourceTree clone到本地

    屏幕快照 2016-07-06 18.36.57.png

    (3).xcode command+shift+n 创建一个静态库项目

    屏幕快照 2016-07-06 18.31.27.png

    (4).把项目添加到SourceTree本地项目里

    屏幕快照 2016-07-06 18.41.16.png

    push 到 coding码市
    mark一下 这个地址就是你的源代码存放的地址可以是git svn 或者zip

    3.创建Pod所对应的podspec文件

    先cd 到本地的项目目录
    执行
    pod spec create doctorplus1Test
    创建
    配置该文件

    屏幕快照 2016-07-07 10.25.59.png
    4.验证podspec文件是否可用

    首先执行
    pod lib lint

    屏幕快照 2016-07-07 10.28.01.png

    如果出现上图,说明lib验证成功
    然后执行
    pod spec lint

    屏幕快照 2016-07-07 10.29.48.png

    如果出现上图,说明spec验证成功

    5.向私有的spec repo里添加podspec文件

    在终端中 cd 到 podspec目录下执行
    pod repo push doctorplus1Specs doctorplus1Test.podspec

    屏幕快照 2016-07-07 10.33.29.png

    出现上图结果,在remote上可以看到一次提交

    6.新建个项目测试自己的私有库

    终端执行
    pod search doctorplus1Test

    屏幕快照 2016-07-07 10.35.55.png
    如果搜到了说明成功了,如果搜不到,尝试执行
    rm ~/Library/Caches/CocoaPods/search_index.json
    pod setup
    pod repo update
    更新一下本地的repo
    xcode新建项目 在podfile中添加
    pod 'doctorplus1Test', '~> 0.0.2'
    如果提示 'unable to find a specification for' 屏幕快照 2016-07-07 10.42.09.png

    这是个坑,能搜到,安装不到项目里,这不科学呀,搜了好多文章终于找到了,需要在podfile中添加

    source'https://git.coding.net/doctorplus1/doctorplus1Specs.git'
    source'https://github.com/CocoaPods/Specs.git'
    

    _上面地址是自己的私有spec仓库
    下面地址是cocoapods公共spec仓库
    两者缺一不可
    _
    添加完后,执行pod update

    7.更新podspec,建不同的版本

    如果某个基础组件有bug,或者优化了某个算法,需要更新code,更新版本
    方法如下:
    1.修改spec文件中的s.version 号;
    2.修改更新code,提交code在Sourcetree打新的tag;
    3.重复执行第四和第五步;
    4.pod search doctorplus1Test 验证一下结果;

    屏幕快照 2016-07-07 11.03.51.png

    参考文章:
    使用Cocoapods创建私有podspec
    CocoaPods私有库配置笔记
    Cocoapods系列教程(三)——私有库管理和模块化管理 - Pluto Y的...

    相关文章

      网友评论

      • L_洪:博主,你好,请问我在检验.podspec文件的时候就报这个错误:LDReader did not pass validation, due to 1 error.但是没有错误信息是怎么回事?查了很多资料实在检查不出,谢啦
        L_洪:@L_洪 已解决
        L_洪:使用的是这个命令行:pod lib lint LDReader.podspec --allow-warnings --use-libraries
      • handsome丶亮:楼主我想问一下,如果基础组件有BUG,我在主项目里断点调试,断点能跟到基础的模块中么?如果不能,那岂不是会很麻烦?
        f0237eb3ed00:楼主,你好,我的spec验证都通过了 ,也推到库里了,可是就是search不到,rm ~/Library/Caches/CocoaPods/search_index.json这个执行了也不行,求助啊,各种方法都尝试了,我的pod版本是1.5.0
        handsome丶亮:@跑步的李磊 哦哦,明白了,谢谢楼主~
        跑步的李磊:可以跟到,比如用afnetworking时,是可以单步到他的方法
      • 是小胖阿:博主你好, 假如项目几个模块都会依赖到AFN这个第三方库,那这个时候创建pod要怎么处理呢
        跑步的李磊:把AFN和你的几个模块放在同一级别,其他的模块都能引用AFN
        秦枫桀:同问
      • ray819:自己最近也遇到了编译速度的问题,博主的方案可以值得一试,正是自己所需要的,期望博主以后能出更多一些占坑的文章:smile::smile::smile:

      本文标题:ios项目-利用Pod进行组件化开发

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