Tag: 依赖性

使用Carthage在iOS上建立依赖关系

在本文中,我想分享我使用Carthage构建依赖项的经验。 首先,迦太基闪耀着简单。 通过在Cartfile添加适当的行并运行carthage update ,开始在Xcode项目中使用某些外部依赖关系非常简单。 但是众所周知,生活是残酷的,有时我们需要考虑更复杂的例子。 假设有一个iOS开发人员团队。 Tony,John和Keith正在使用约15种流行依赖项(例如Alamofire,Kingfisher,ReactiveCocoa等)运行iOS应用程序。 不同的编译器 -有些库是用Swift编写的,这意味着每个不同的编译器运行时都与其他运行时不兼容。 如果那些开发人员使用不同版本的Xcode,这可能是一个巨大的问题。 他们每个人都需要构建自己的框架版本或使用相同版本的Xcode。 清理构建时间 -这是最近的热门话题,有时我们需要关心构建时间,尤其是在CI上以及在分支之间切换时。 团队认为他们不想花很多时间(例如1个小时)等待发布,所以这个问题可能很关键。 存储库大小 -一些开发人员更喜欢在存储库中包含已编译的框架。 团队正在使用免费的github计划,因此其最大存储库大小为1GB。 在回购中存储框架可能会导致其大小大幅增加,甚至达到5GB左右。 即使回购存储限制不成问题,克隆这样的存储库也将花费大量时间 。 这对于干净的构建时间可能会产生巨大的影响,尤其是在将CI与虚拟机一起使用时。 更新框架 -在不进行额外工作的情况下,迦太基会在运行carthage update时重新编译所有框架,或者如果为单个依赖项而运行则仅会编译一个框架。 在项目开始时,我们经常这样做。 团队也在寻找解决方案以加快这一步。 没有免费的午餐……我同意,但是与此同时,我相信有时值得花一些时间来改善日常工具。 我花了很多时间来测试依赖项管理器,缓存其工件等。让我告诉您有关维护迦太基框架的三种流行解决方案。 在你开始之前 如果您不熟悉迦太基,请先查看它的存储库。 我不会考虑将迦太基框架直接存储在存储库中。 让故事开始……托尼是团队负责人,他决定使用迦太基作为依赖性管理器。 他在使用外部框架时为其他开发人员定义了一些规则: 将Carthage / Build添加到.gitignore并在存储库中包括Carthage/Checkouts , 首次克隆存储库时,您需要运行carthage bootstrap (重建所有依赖项)。 CI需要为每个管道运行该程序, 更新框架时,请仅更新一个框架,例如carthage update ReactiveSwift 。 这些规则很简单,但是它们的优缺点又如何呢? 优点: 免费(每月费用0$ ) 仓库的规模永远不会急剧增加 缺点: 非常长的整洁版本 绝对不会重复使用预编译的框架 存储库中的其他人的代码 […]