/ iOS

使用 CocoaPods 进行团队协作

让程序流畅稳健的运行是开发者们的理想,这个理想时而遥远,时而近在咫尺。而往往那个触手可及的时刻,却正是梦碎的边缘。

在团队协作中,修改别人的代码是一件像扫雷游戏一样的事情,你永远不知道你做的到底是 “优化” 还是 “触雷”。

使用 Cocoapods 将不同的功能进行切割,独立成模块再整合进 App,成为了一个行之有效的方法,本文就来一起研究一下如何使用 CocoaPods 来进行组件模块化。

创建自己的 Pod

RichTextView 为例,完成类库的功能后的第一件事就是创建 RichTextView 的 podspec 描述文件

进入项目的根目录

pod spec create RichTextView

这个描述文件其实是一段 Ruby 代码,描述了和这个库相关的内容,最重要的是描述了库的授权协议,如何获取库的代码,版本号,以及编译方式

Pod::Spec.new do |s|

  s.name         = "RichTextView"
  s.version      = "0.3.1"
  s.summary      = "RichTextView based On TextKit"

  s.description  = <<-DESC
                   RichTextView based On TextKit, With Mention, Hashtag Feature
                   DESC

  s.homepage     = "https://github.com/kevinzhow/RichTextView"
  s.screenshots  = "https://raw.githubusercontent.com/onevcat/Kingfisher/master/images/logo.png"

  s.license      = { :type => "MIT", :file => "LICENSE" }

  s.authors            = { "kevinzhow" => "kevinchou.c@gmail.com" }
  s.social_media_url   = "http://twitter.com/kevinzhow"

  s.ios.deployment_target = "8.0"
  # s.osx.deployment_target = "10.7"

  s.source       = { :git => "https://github.com/kevinzhow/RichTextView.git", :tag => s.version }
  s.source_files  = "RichTextView/Source/*.swift"
  s.requires_arc = true

end

值得需要特别注意的是 s.version 正是 s.source 里想要从 git 取出来的 tag 版本。

s.version      = "0.3.1"
s.source       = { :git => "https://github.com/kevinzhow/RichTextView.git", :tag => s.version }

s.source_files 相对应的就是你的库是在 git 的哪个文件夹里,的哪些文件

s.source_files  = "RichTextView/Source/*.swift"

如果是 Swift 项目,需要注意给你的类和需要暴露的方法加上 public 字段

当以上都编辑妥当之后,需要先验证一下这个文件有没有错误

pod spec lint RichTextView.podspec

验证无误后,如果愿意开源的话,就可以推入 Pod 的仓库。

公开发布 Pod

首先需要注册一下你自己的身份,例如你想注册的邮箱是 orta@cocoapods.org,名字是 Orta Therox,那么可以用下面的命令

pod trunk register orta@cocoapods.org 'Orta Therox'

注册完成后,就可以把上面验证通过的 Pod 发布上去

pod trunk push RichTextView.podspec

本地测试 Pod

团队协作的项目通常并不需要暴露到外部,那么 s.source 部分填写你的私有仓库即可,并且跳过 pod trunk push 的步骤。

在 Podfile 需要声明一下采用本地 path 的方式安装(通过 path Pod 就跳过了从 s.source 获取源码,而转用从本地 path 的地址获取源码)

pod 'RichTextView', :path => '../CatchLib-iOS/RichTextView/'

编写文档

这部分只有一句话,写文档!

Enjoy!