CarthagePods -- 一个整合 CocoaPods 和 Carthage 一起使用的工具

最近写了个工具CarthagePods,将 CarthageCocoaPods 配合一起使用。介绍我这个工具之前,先看看我们 iOS 开发最常用的两个包管理器吧。

Carthage

Carthage 有个重要的优点,它可以把依赖的库都编译成 framework,这样一来就不需要每次编译工程,都去编译一遍依赖的第三方库。
但是也存在一些缺点,例如:

  • 使用的依赖库比较多,集成起来就比较麻烦。
  • framework@IBDesignable@IBInspectable 并不那么友好 =。= 。

CocoaPods

CocoaPods 正好可以解决 Carthage 的不足。CocoaPods 使用起来非常方便,因为他不会把依赖库编译提前编译成 framework, 所以也不存在对 @IBDesignable@IBInspectable 不友好的问题。

当然,他不会把第三方库编译成功 framework 这也会导致工程编译起来比较慢。

取长补短

前段时间虾神在他的公众号中发布了一篇文章则提供类一个解决方案I have a pod, I have a carthage, En…
然而操作起来还是略微麻烦=。=

这样我们就可以将使用 @IBDesignable@IBInspectable 属性的库还是使用 CocoaPods 来管理。没使用的则使用 Carthage

方案流程

虾神文章中大概的实现方案流程是这样的:

  • 先使用 Carthage 把一些依赖库编译成 framework
  • 通过 CocoaPodsframework 打包 repo
  • 最后通过 CocoaPods 把所有的依赖库都 install 了。

虾神的方案很酷,但是使用起来还是略为麻烦。所以我决定使用 Ruby 来把这些流程串联起来,只需要简单的敲个 install 就能完成这些工作 ^-^

为什么使用 Ruby ?因为我想学 Ruby ,拿来练手=。=

CarthagePods

安装方法

1
gem install CarthagePods

介绍

接下来简单介绍一下 CarthagePods 的一些命令吧。

init

会生成 CocoaPodsPodfile 文件, CarthageCartfile 文件, 和一个 CPodfile

大家使用的时候可以和往常使用 CocoaPodsCarthage ,一样把依赖的库配置到对应的文件中。

CPodfile 又是什么鬼?

我在使用我最常用的库 RxSwift 时,发现了一个问题。RxSwift 使用 Carthage 编译时会生成一个 RxTestframework 。如果你工程中包含了这个 framework 会导致你打包失败。所以 CPodfile 则提供了一种方法把需要过滤的 framework 给过滤掉。

使用方法如下:

1
filterFramework ['RxTest.framework', 'RxBlocking.framework']

install

install 命令则是分别执行 CocoaPodsinstall 命令 和 Carthagebootstrap 命令。

考虑到保留两个工具的功能,这里尽可能保留了两个工具 install 时的参数。

熟悉 Carthage 可能会发现,少了个 --platform
我们使用 CocoaPods 是其实会在 Podfile 中直接定对应的平台,所以这里的参数,工具会直接在 Podfile 中获取。

update

这个命令就是分别执行 CocoaPodsCarthageupdate 命令。功能与 install 相似。

遗留问题

  • 两个库,一个使用 CocoaPods, 一个使用 Carthage 去 install,如果这两个库同时依赖于另外一个库。这种场景可能会产生问题。(这个问题会在后续版本解决)
  • 我开发的时候希望能使用 RxTest,发布的时候把它过滤掉。这个目前还是比较难办的。

不过退一步想,我们遇到这些情况还是都可以几乎无痛的,把一些库切换使用 CocoaPods 做依赖管理。

最后欢迎大家尝试使用我这个工具,欢迎 Issue 。我会尽我最大努力去维护它。