使迦太基再次伟大!

您好,我是Max,我是iOS开发人员超过7年。

本文是关于依赖项管理的,因为我认为即使使用所有这些工具,它也是iOS开发过程中的薄弱环节。 感觉就像您只需要处理它,但这不是应该的样子。

在我的职业生涯中,我使用了许多依赖管理工具,从简单的拖放源代码到尖端的Swift依赖管理器。 但是仍然是我最喜欢的工具之一,仍然是Carthage:去中心化,易于管理,构建一次就可以忘记。

例如,与Cocoapods相比,它允许将所有依赖项分别并独立地构建为一堆二进制文件,这些二进制文件可直接链接到您的项目而无需复杂的配置。 我认为这是非常灵活和一致的方法。 (顺便说一句,不要忘了Cocoapods需要框架作者的大量动作。还记得pod repo的设置/更新时间吗?)

我不会在这里深入探讨可可足与迦太基。 您可以阅读很多这类文章。 我只是想表达我对迦太基的态度作为该主题的序幕。

然而,这并不完美。 我告诉你为什么以及如何修复它。

为什么迦太基不完美?

首先,如果您曾经使用过Realm,Alamofire,ReactiveCocoa等笨拙的大型框架之一,那么您可能已经注意到,您的CI / CD工作者花费大量的时间来建立依赖关系。 即使依赖项提供了预编译的二进制文件(但通常不提供),它也可能经常不适合您的Xcode / Swift版本。 因此,您花费大约80%的CI / CD时间来准备依赖项。

此外,邀请新成员加入团队或直接将现有项目克隆到另一台计算机,都会导致“让自己入睡”事件。 仅仅将框架添加到依赖项列表并不快。 当您挖掘过去的长期项目时,我什至没有在谈论过时的依赖关系。

最后但并非最不重要的一点:对静态框架的怪异支持。 为什么奇怪 因为Realm不会使用ld.py脚本构建到静态库中(例如,迦太基的推荐方法)。 您必须手动检查每个损坏的依赖关系,并为团队中的每个人将其替换为二进制文件。 金田挣扎。
顺便说一句,如果您错过了静态框架如此重要的原因,我告诉您:它显着降低了应用程序的大小和启动时间。 苹果也建议最多使用不超过6个动态库。 但是我们都为“只是一个框架”而感到内🙂

如何使它更好?

即使迦太基值得使用它。 但是有一种方法可以使它变得更好。 当我与许多团队一起处理大量应用程序时,我制作了一个工具,可将每个迦太基框架分别缓存到Amazon S3中。 因此,“已解决”文件中还有多少其他内容都没有关系,您可以根据需要下载它们中的每一个。

我的意思是,例如,如果有人至少为Swift 4.0.1构建了Realm 3.0.1,那么您可以立即下载它,而无需等待或编译。

Tbh我已经看到了很多用于Carthage的缓存工具,但是其中大多数要么需要拥有个人S3帐户,要么立即保存所有项,等等。

因此,我制作了一个工具来修复这些缺陷。 我想与您分享它,希望它可以使您的iOS编码体验至少好一点。

它称为迦太基缓存,可以在Github上找到。

如何使用它?

步骤1:下载至您的路径:

该工具将从云下载现有框架到Carthage的构建目录。 或者编译它们(如果以前没有人缓存过您的框架),然后将其上传以供公众使用。

但是静态框架呢? 这很简单:

它将下载或构建依赖项的静态版本。 无需牺牲给克苏鲁。

怎么运行的?

有几个步骤:

  • Xcode版本检查(也是Swift版本)
  • 解析Cartfile.resolved
  • 在云中寻找Xcode的现有版本
  • 将框架的所需版本下载到Carthage / Build
  • 或基于缓存未命中构建它并上传到云

迦太基缓存不会在您的设备上保存额外的数据。 util的每次调用都是幂等的。

而已。 希望你喜欢它。 非常感谢您的反馈。

最后一件事

我知道了解所使用工具的安全性是多么重要。 因此,我正在将其源代码发布到Github,您可以在其中确保它的安全。
(也有后端。但这没什么好玩的,所以出于相同的安全原因,如果您不介意,我会将其保密)

PS由于该工具仅在内部使用,因此请注意以下几点

  1. 需要安装迦太基,并且Cartfile.resolved必须是最新的。 它是该工具查找依赖项的地方。
  2. 静态框架本身有一些限制:无法处理资源(您必须将其手动复制到捆绑包中),解压缩时更大的大小等。
  3. 没有新版本通知。 因此,请不时检查Github页面或是否出现问题。