使用 Cocoapods 进行组件管理

随着公司项目的增多和业务的需求,各项目中相同模块的抽出和统一管理愈发重要,前段时间一直在进行一些尝试,现把过程中一些心得体会作为笔记记录下来,以便日后查阅纠正。

这里指只针对组件的依赖管理,至于组件化的具体实现方法逻辑和代码,又是一个庞大的话题,由于自身能力和时间有限,就不多作阐述了。

首先,我在公司内部组件的依赖管理上,只在 GitsubmodulesubtreeCocoapods 当中进行了考察和比对。

submodule

之前项目中一直使用的这种方式,主要原理是把一个子模块 Git 仓库引入到工程 Git 仓库,2 个仓库代码文件独立管理,协同工作。

优点

  • 各项目中的成员都可以在自己项目中提交更新到组件仓库,方便协同开发和完善组件
  • 组件仓库在有更新之后,各项目能自动收到更新提示(我们公司使用了 SourceTree ),以便及时更新到最新

缺点

  • 增删组件较为繁琐,版本管理不直观

subtree

原理是将一个子模块 Git 仓库的某个 commit 版本 提交拷贝一份到工程 Git 仓库。
优点不显著,缺点明显:对于贡献代码不太友好,团队成员在自己的项目中修改组件后,无法提交到组件仓库。当然,也可能是我没有掌握 subtree 的正确操作方法,没有体会到它的其他好处,总之没有使用这种方式。

Cocoapods

一款优秀的框架管理工具,功能强大

优点

  • 可以一行命令增删组件,方便快捷直观
  • 可以管理组件之间的依赖关系

缺点:

  • 贡献代码不太友好,项目中修改后不能提交更新到组件仓库
  • 组件代码更新后,项目无法自动收到更新提示,必须手动执行 pod update 操作

虽然 Cocoapods 无法方便的在项目中提交更新,组件仓库需要专门维护更新,但是随着组件的成熟和增多,这种方式显然比前 2 种更为方便和适用。

私有库制作

Cocoapods 可将组件制作成私有库进行版本管理,相关优质教程很多,可参考
使用Cocoapods创建私有podspec
Cocoapods系列教程(三)——私有库管理和模块化管理
CocoaPods安装使用及配置私有库

注意点 & 小技巧

  • 组件仓库修改代码 push 更新版本后,不要忘记打 tag ,并且更新 podspec

  • 提交私有 podspec 时直接用 pod repo push 提交,不要直接进行 git 操作

  • pod install 只是用于增减 pod,然后把各个pod 的版本信息写入 Podfile.lock 文件
    如果 pod 有新版本了,只要不执行 pod install 更新 Podfile.lockpod 也不会主动更新

  • 本地podspec 保存在 ~/.cocoapods/repos

  • pod install 时,如果有要求特定 source ,会先查找 ~/.cocoapods/repos 路径下有没有这个 sourcerepo ,如果有就直接使用 。如果没有,会创建这个 sourcerepo ,自动起的名字可能会有点奇怪

  • pod repo push 后,如果有自己创建的 repo 文件夹,一定要更新这个 repo,否则 pod update 私有库可能无法更新到最新版本
  • ~/Library/Caches/CocoaPods/PodsSpec 和 各种 Git 库的缓存,CocoaPods 使用过程中会优先从缓存中寻找 spec 和代码库,找不到相应版本时才会去远程拉取。其中,External 文件夹是 lintpushsepc的临时代码库,Release 文件夹是发布过的代码库
  • 编写 podspec 的小 tips
  • s.source_files = "*" 表示根目录下所有文件。
  • s.source_files = "**/*" 表示根目录及其子目录下所有文件, / 必须是英文状态下的
  • 主 spec 涵盖了的 source_files 子 spec 就不会导入了
  • s.resource = "*.bundle" 可以把根目录下 bundle 资源文件加进来
  • s.resource = "*" 会把代码文件也会加进来
  • 个人建议将 Pod 文件夹纳入 Git 版本管理

    优点

  • Pod 中的源代码的改动可以记录下来,否则改动后进行 pod update 就可能丢失

  • 如果 Pod 远程源代码丢失,本地还有备份

  • git clone 下来项目就能直接运行,无需再 pod install

缺点

  • 项目占用空间增加

  • 私有库的开发模式

当然,在使用私有库的过程中,很大一部分时间私有库都是处于开发阶段,而我们总不能一直提交 tag 的方式进行 pod update 更新吧。因此 Cocoapods 就提供了一个开发模式,其实操作起来也是非常简单的事情,就是将所谓的引用路径修改成本地路径即可。就是讲 Podfile 中的 pod '库名', :path => '本地路径'即可。这样在通常的修改代码中是不需要执行 pod update 的,但是对于如果修改了目录结构(添加、删除或者移动文件文件)或者是修改了 Podspec 文件的配置的话,最好是运行一下 pod update 的命令。普通修改代码的情况下就不需要运行 pod update 命令和打 tag 了。
如 pod 'iOS-Echarts', :path => '../iOS-Echarts'

你可能感兴趣的:(使用 Cocoapods 进行组件管理)