同步iOS依赖项 - 跨多个经理/存储库

时间:2018-01-24 09:37:29

标签: ios dependency-management

我是FeathersSwift的维护者,是可敬的FeathersJS的iOS客户端SDK。除了FeathersSwift之外,我还维护FeathersSwiftSocketIOFeathersSwiftRest这些是插入主网络库​​的传输提供程序。在我对这些库的工作过程中,我遇到了几个问题,主要涉及在多个依赖管理器(CocoaPods,Carthage,Swift Package Manager)和b)跨多个存储库同步依赖关系时。

除此之外,决定将主网络库(FeathersSwift)及其传输提供商拆分为独立的存储库是出于两个原因:

  • Github的知名度。
  • Carthage和Swift PM对CocoaPods没有特别的功能。 pod FeathersSwift/SocketIO您可以在其中安装子规格。如果保存在同一个存储库中,Carthage / Swift PM用户将被迫下载其他依赖项,增加构建时间和整体项目大小。出于这个原因,存储库仍然是分开的,尽可能没有意见。
然而,这引入了并发症。例如,所有三个库都依赖于ReactiveSwift。当有人pod install同时使用FeathersSwift和FeathersSwiftRest时,我如何确保每个框架所依赖的ReactiveSwift版本是相同的?

此外,还存在锁定不同依赖关系管理器之间的依赖关系的问题。每个人都使用不同的格式,因此我假设您必须编写工具或定义DSL,然后将其转换为每种格式。

更复杂的是,您如何确保跨多个依赖关系管理器的多个存储库全部同步?听起来你必须a)编写上面提到的依赖管理器之间的同步工具,然后b)一个消耗第一个工具的输出并将存储库与某种清单文件同步的工具(在组合中)与其他一些仅用于保持依赖关系同步的存储库,有点像私有CocoaPods规范存储库。)

我玩过的另一个解决方案是iOS monorepo(详细here)。它需要使用类似Buck之类的东西来构建所有单独的嵌入式存储库,并且可以将Buck转换为podspecs和Carthage文件之类的东西。此外,它将以多个Github存储库的形式失去可见性,但仍然会有多个CocoaPod页面,因此不会造成巨大损失。

在编写/维护多个共同依赖的开源库时,有没有人遇到过这个问题?

0 个答案:

没有答案