2016-04-27 75 views
2

我正在编写一个快速框架,这取决于Alamofire v3.x.现在我想将我的框架添加到一个项目中,该项目取决于Alamofire v2.x.我正在使用迦太基来管理我的项目。似乎不可能在项目中添加两个相同框架的版本。有办法解决这种情况吗?iOS(或OS X)项目取决于框架的两个版本

+0

如果两个框架版本试图在通用位置写入数据库,但每个版本都需要不同的模式,该怎么办?你不能保证相同框架的两个版本(你没有写)可以互操作,所以你不应该混合和匹配这样的框架版本。使用一个或另一个。 – par

+0

@par感谢您的评论。事实上,我想分发一个依赖于Alamofire v3.x的框架,但是如果我的用户在他们的项目中使用Alamofire v2.x会怎样? – ukim

+0

这是同样的问题。现在Alamofire特别*可能在不同版本之间兼容(我不知道),但是如果你的库中有第三方依赖项,你需要告诉用户他们必须使用该版本,如果它也是它们的依赖项。只要从同一个框架的两个版本之间的共享资源的角度思考它,就会明白为什么事情不可避免地会以突发的,令人讨厌的方式破坏。 – par

回答

1

您遇到的情况称为依赖性地狱。像.NET,Node等运行时已经解决了这个问题。 Java至少可以达到8个,只会选择它在运行时发现的第一个版本,并希望所有其他软件包都能与之协同工作;他们没有。

CocoaPods可以检测到你的依赖地狱和pod install期间的错误,但就是这样。我认为迦太基也是这样做的?然后,您的框架的用户坚持降级依赖关系,直到您的框架和其他依赖框架都使用相同版本的共享依赖关系。截至目前,这仍然是我们AFAIK可用的唯一选择。

苹果确实通过Framework versioning解决了依赖地狱的问题。该框架将捆绑自身的多个版本,并且在与框架链接时,链接器会将完整路径(版本在路径中)记录为所需版本。但是捆绑多个版本的框架是一个令人难以置信的愚蠢想法,因此从未起飞。