美文网首页iOS专题iOS - 优化/质量/调试程序员
将项目中公共组件使用Cocoapods管理实战

将项目中公共组件使用Cocoapods管理实战

作者: XcqRomance | 来源:发表于2017-08-25 17:03 被阅读295次

    想直接操作上手的请略过前言部分,直接阅读正文部分;
    建议不要错过精彩的前言哦,或许你看了对你有所启发。

    前言

    随着项目的发展,版本迭代,代码的重构,我们项目中一般会有很多有业务功能行性公共的组件,app中可能多处都会使用到,甚至别的项目中也需要使用。比如我们FCS项目中有一个语音评测的功能,前期只是在FCS项目里面需要用到,后面在另一不同项目绘本阅读需要用到相同语音评测的功能。此时我们一般有两种做法,一是直接将这部分代码copy到绘本阅读这个项目中二是将语音评测这部分逻辑给抽取出来,然后在分别在两处使用。很明显在项目初期,或者时间紧迫的情况下,第一种方式很好的能够胜任工作,我们前期也是这么做的,但是我发现到了随着项目的推移和发展,这样做的时间成本太大了,效率也很低下,有很多隐患(评测逻辑一旦有变动,你需要改动两次,而且你没法保证两次的改动一致)。正确的做法是在适当的时间应该立马进行代码重构,将这部分重复的代码给抽取出来。至于重构的准则就是三次法则,出自Martin Fowler《重构改善既有代码的设计》,这本书真的推荐大家一看,程序员必读的书籍之一。扯远了。。。

    于是我花了几天时间将语音评测这部分逻辑给抽取出来,建立了一个公共组件SpeechEvaluationKit,在两个项目中都能够方便的使用,并且使用Cocoapods来管理。公司项目的核心代码存放在Coding上,包括SpeechEvaluationKit的代码,这部分代码我们是不能够公开的,所以我建立的是私有库(Private Pods),也是本文实战操作所建立私有库管理;相对应的当然就有公有库,这部分的代码不仅可以自己使用,还可以开源出来。

    正文

    关于CocoaPods的介绍、安装、使用说明请查看官方文档,同时本文的操作也是根据官方文档介绍来完成的。
    如下图,项目的目录结构如下图:

    1. 新建[项目名].podspec
      使用命令:pod spec create '项目名'pod lib create '项目名'
      现有的项目,在项目根目录运行终端命令:pod spec create 'SpeechEvaluationKit',根目录下将会生成一SpeechEvaluationKit.podspec文件。

      如果还没有创建项目,则使用pod lib create 'SpeechEvaluationKit',这一步会让你填写一些信息比如使用swift还是oc、是否使用测试框架等等,我的选择如下:

      最终生成的的目录如下,新建项目写完代码后得将本地仓库添加到远程git仓库,关联命令为git remote add origin 远程仓库地址
    2. 配置podspec文件
    Pod::Spec.new do |s|
      s.name             = 'SpeechEvaluationKit'
      s.version          = '1.0.0'
      s.summary          = 'SpeechEvaluationKit is a powerful voice evaluation library'
      s.description      = 'A powerful voice evaluation library,such as book reading, living and ips mission.'
      s.homepage         = 'https://git.coding.net/firstleap/SpeechEvaluation_iOS.git'
      s.license          = { :type => 'MIT', :file => 'LICENSE' }
      s.author           = { 'XcqRomance' => 'xcqromance@163.com' }
      s.source           = { :git => 'https://git.coding.net/firstleap/SpeechEvaluation_iOS.git', :tag => s.version.to_s }
      s.ios.deployment_target = '8.0'
      s.source_files     = 'SpeechEvaluationKit/Classes/**/*'
      s.exclude_files    = "SpeechEvaluationKit/Assets/**"
    end
    

    这个podspec文件包含的信息很重要,对于一个普通的pods库上面的信息就足够了,各个配置的含义基本都能够看得懂,比如name代表你的pods库的名字,如果是公有pods库,可以通过pod search 'name'来搜索查看;version则代表版本号,一旦库有发布更新就通过修改这个版本号来发布更新;summarydescription就是对pods库的简介和详细说明,这个根据库的功能来描述;source一般填写代码仓库地址可以是git、svn、github的地址;source_files代表你这个pods库包含的代码,一般就是我们编写公共组件的代码,文件的描述都是可以用一些匹配公式,比如上面用到的**和*;exclude_files一般是除了代码之外的资源文件,比如图片、音频之类的;至于其他信息,你可以根据自己库的需求来配置,比如YTKNetwork是基于AFNetworking的封装,所以还添加了s.dependency "AFNetworking", "~> 3.0"依赖。上面的这些信息必须读严谨的配置,否则在下一步验证的时候会出现警告甚至报错不通过。比如我之前的summary没有更改而是使用的模版信息,就出现如下警告:

    1. 验证podspec文件和项目(pod lib lint Name.podspec)
      执行命令pod lib lint SpeechEvaluationKit.podspec(后面还可以添加参数--verbose,有助于出错的问题定位)
      一般到这一步会遇到很多警告和错误导致验证不通过,此时不要心急,一个一个问题解决,在stack overflow寻找解决方案,你所遇到的问题,前人们很多都已经遇到过了。
      验证通过提示信息如下:

      一旦验证通过,你就离成功只有一步之遥了;
    2. 建立tag,并且上传git仓库,tag版本和podspec文件的version版本保持一致就行了;git 常见命令传送门
    git tag -a 1.0.0 -m 'pod私有仓库'  #打tag
    git push origin 1.0.0:1.0.0 #上传tag
    
    1. 发布项目到cocoapods官方仓库
      等等...在这之前你得先有一个Cocoapods账号,也就是得先注册一个账号,执行以下命令:
      pod trunk register romance.xie@firstleap.cn 'romance' --description='My working computer'
      邮箱、名字、描述该为自己的就行,然后你将会邮箱会收到一封邮件,点击右键链接激活,然后通过pod trunk me来查看自己是否注册成功:

      如果是多人开发,只需执行命令:pod trunk add-owner '项目名' '邮箱'将伙伴添加到项目中;
      5.1 公有库的发布(即开源的,会将podspec文件上传到cocoapods官网,当执行pod install 或者 pod update的时候会根据配置文件取对应的源代码)
      发布命令pod trunk push 项目名.podspec
      使用pod search 项目名查看是否上传成功,下图是我们app中日志收集的公有库FLogKitpod search FLogKit

      5.2 私有库的发布
      发布命令pod repo add '仓库名' '仓库地址'
      如果是现有的项目,代码放在coding私有项目中,仓库地址直接填写第2步podspec配置文件的s.source的地址,即执行以下命令即可:pod repo add 'SpeechEvaluationKit' 'https://git.coding.net/firstleap/SpeechEvaluation_iOS.git';
      如果是新建的项目,即第1步中,使用pod lib create '项目名'初始化的项目,就需要先在服务器建立一个私有仓库,我这里以在Coding中建立私有仓库为例,仓库建立好后将会有获得git仓库地址,

      记得将写好的代码提交到Coding的Git仓库中,执行发布命令pod repo add 'SpeechEvaluationKit' 'https://git.coding.net/romance/SpeechEvaluationKit.git'

      使用open ~/.cocoapods/repos查看是否创建好私有仓库,一旦代码有更新,使用pod repo update更新pod私有仓库,删除私有仓库pod repo remove '项目名'
    2. 使用组件
      pod 'SpeechEvaluationKit', :path => '../',开发模式
      pod 'SpeechEvaluationKit',稳定之后或者其他项目的使用

    总结

    看完本文知道Cocoapods管理公共组件是多么简单了吧,当然里面一些深入的内容需要在实际使用过程中才领悟了解。整个过程及其使用就只有五步:新建podspec文件->配置podspec文件->验证podspec文件和项目->上传tag->发布更新。这步骤你记住了么。

    如果你觉得本文对你有帮助,就请你点亮底部的❤️吧,你的鼓励是我前进的动力!

    相关文章

      网友评论

      • 君赏:作者你好 我想好奇问一些问题
        1 Coding也是在线网站你确定放在上面私有库这样就不被公开 你们的代码也是存在他们的数据库的
        2 本地的电脑或者公司的Git或者SVN或者ZIP包是可以作为数据源的,我们唯一做的是存放spec文件这个透露信息不多的家伙
        3. FCS这个我很熟悉 2013年我在深圳工作 公司名字也是FCS不知道是不是巧合
        4. 文章内容很好 觉得还是建议你扯下来Coding的库 毕竟出了外网的代码都不安全
        XcqRomance:@君赏 哈哈,酒店管理的!不错:+1:
        君赏:@Xcq_Romance 那就不是我之前呆的公司了 我之前呆的公司FCS是一家马来西亚的外企
        https://www.fcscs.com/zh/ 这是我之前公司中文介绍:smile:
        XcqRomance:谢谢你细心地看啊!:blush:
        针对1,2,4.的问题,既然我们公司在coding上面买了会员,将其作为代码仓库,那就不用太考虑代码被泄漏的问题,如果出现这种情况,那么这就涉及到商业上的纠纷了,我们出现损失,他们公司是肯定得赔偿的,而且这样对coding公司的信誉也不不太好!还有一点就是使用coding团队协作开发很高效!这是我的理解!
        世界那么大,又那么的小啊,连名字都能一样!FCS是我们app的英文名!:smile:
      • Ghost_aa45:深入

      本文标题:将项目中公共组件使用Cocoapods管理实战

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