我是FeathersSwift的维护者,是可敬的FeathersJS的iOS客户端SDK。除了FeathersSwift之外,我还维护FeathersSwiftSocketIO和FeathersSwiftRest这些是插入主网络库的传输提供程序。在我对这些库的工作过程中,我遇到了几个问题,主要涉及在多个依赖管理器(CocoaPods,Carthage,Swift Package Manager)和b)跨多个存储库同步依赖关系时。
除此之外,决定将主网络库(FeathersSwift)及其传输提供商拆分为独立的存储库是出于两个原因:
pod FeathersSwift/SocketIO
您可以在其中安装子规格。如果保存在同一个存储库中,Carthage / Swift PM用户将被迫下载其他依赖项,增加构建时间和整体项目大小。出于这个原因,存储库仍然是分开的,尽可能没有意见。pod install
同时使用FeathersSwift和FeathersSwiftRest时,我如何确保每个框架所依赖的ReactiveSwift版本是相同的?
此外,还存在锁定不同依赖关系管理器之间的依赖关系的问题。每个人都使用不同的格式,因此我假设您必须编写工具或定义DSL,然后将其转换为每种格式。
更复杂的是,您如何确保跨多个依赖关系管理器的多个存储库全部同步?听起来你必须a)编写上面提到的依赖管理器之间的同步工具,然后b)一个消耗第一个工具的输出并将存储库与某种清单文件同步的工具(在组合中)与其他一些仅用于保持依赖关系同步的存储库,有点像私有CocoaPods规范存储库。)
我玩过的另一个解决方案是iOS monorepo(详细here)。它需要使用类似Buck之类的东西来构建所有单独的嵌入式存储库,并且可以将Buck转换为podspecs和Carthage文件之类的东西。此外,它将以多个Github存储库的形式失去可见性,但仍然会有多个CocoaPod页面,因此不会造成巨大损失。
在编写/维护多个共同依赖的开源库时,有没有人遇到过这个问题?