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

983 阅读7分钟

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

前言

随着项目的发展,版本迭代,代码的重构,我们项目中一般会有很多有业务功能行性公共的组件,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->发布更新。这步骤你记住了么。

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