我有一个主要由CocoaPods构建的应用程序(一些是内部的,一些是外部的),但是在模块化和现代化的过程中,新的代码正在用SPM包编写。这些包有它们自己的依赖项。
一旦我将主机应用程序固定到我们内部库的标记版本(0.0.2 .. Next Minor
),我就会得到我无法解释的错误:
Failed to resolve dependencies
Dependencies could not be resolved because root depends on '{ourLibrary}' 0.0.2..<0.1.0.
'{ourLibrary}' >= 0.0.2 cannot be used because ...
no versions of '{ourLibrary}' match the requirement 0.0.3..<0.1.0
and package '{ourLibrary}' is required using a stable-version
but '{ourLibrary}' depends on an unstable-version package 'iglistkit'.
混淆的两个来源:
错误似乎是说&;你不能有版本
0.0.2
,因为没有版本0.0.3
&;。这可能是消息格式的错误。IGListKit版本"不稳定"。这个项目已经3年多没有生产一个带标签的版本了,所以
ourLibrary
要求一个固定在特定提交上的版本,这肯定是最稳定的版本。在
ourLibrary
的Package.swift
:.package(url: "https://github.com/Instagram/IGListKit", revision: "501cccc6f03"),
ourLibary
是从git@github.com
URL获取的,这显然会导致其他包解析问题。也许这是另一个?
Swift Package Manager不认为对提交哈希的依赖是稳定的。由提交散列表示的代码永远不会改变,但这并不意味着它在更一般的意义上是稳定的,可以用于生产。
关于SPM依赖的文档是这样说的:
使用基于提交的依赖要求的包不能作为依赖添加到使用基于版本的依赖要求的包中
我认为你唯一的行动是要么分叉IGListKit存储库,要么向他们提出一个问题,让他们重新开始标记版本。或者使用2019年的4.0.0版本,这是最后一个版本。