斯威夫特包管理器。错误:找到多个名称为...的包?
Posted
技术标签:
【中文标题】斯威夫特包管理器。错误:找到多个名称为...的包?【英文标题】:Swift package manager. Error: Found multiple packages with the name...? 【发布时间】:2017-11-29 19:35:16 【问题描述】:让我们说:
B 是一个依赖于 CommonLib 的库 App依赖B和CommonLib
这是他们的主要节日
B 的 Package.swift:
import PackageDescription
let package = Package(
name: "B",
products: [
.library(
name: "B",
targets: ["B"]),
],
dependencies: [
.package(url: "https://.../CommonLib", from: "1.0.0"),
],
targets: [
.target(
name: "B",
dependencies: ["CommonLib"]),
.testTarget(
name: "BTests",
dependencies: ["B"]),
]
)
App的Package.swift
import PackageDescription
let package = Package(
name: "App",
dependencies: [
.package(url: "https://.../CommonLib", from: "1.0.0"),
.package(url: "https://.../B", from: "1.0.0"),
],
targets: [
.target(
name: "App",
dependencies: ["CommonLib", "B"]),
.testTarget(
name: "AppTests",
dependencies: ["App"]),
]
)
swift build
error: Found multiple packages with the name CommonLib...
如果 App 和 B 都依赖于 CommonLib 并且我将 B 和 CommonLib 导入 App 出现错误找到多个同名的包...
Apple Swift 版本 4.0.2 (swiftlang-900.0.69.2 clang-900.0.38) 目标:x86_64-apple-macosx10.9
有谁知道如何解决这个问题?
【问题讨论】:
【参考方案1】:删除Package.pins
并重新运行swift build
。查看它正在尝试获取哪些包。检查.build/checkouts
和.build/dependencies-state.json
- CommonLib 的标签和版本分别写在那里。
【讨论】:
谢谢!我搞砸了,很容易对 CommonLib 进行更改,提交并忘记更新 git 标签。最终得到了两个不同的版本,因此......错误找到了多个名称为...... @vadim-eisenberg 我有类似的问题,但不明白这些数据如何帮助解决它。你能详细说明一下吗?在我的.bulid/dependencies-state.json
的情况下,同一个库有两个条目,指向同一个提交,但它们具有不同的subpath
值,其中一个称为A-numbers1
,另一个称为A.git-numbers2
。尽管两者都引用了相同版本的库。
@Zapko 这个数据是为了得到一些关于这个问题的提示,我没有一个确切的算法来看看。我想问题是您的 A 包在某些依赖包中的引用方式不同。例如,在一个依赖项中,它由 git url 引用,而在另一个依赖项中,则由 https url 引用。这可能会让 Swift 包管理器感到困惑。【参考方案2】:
如果您想手动将这些导入到库中,您将看到此错误。不能有多个同名的包。
对于解决方案,您必须更改清单并删除其中一个。但是我认为如果您使用 CocoaPod 可以解决这个问题,它是管理包和库的完美工具。您还可以从 CocoaPod 轻松更改清单。
【讨论】:
这不是一个清单。 B 是由其他可执行文件导入的单独库。有两个不同的清单 App 的 Package.swift 和 B 的 Package.swift。在上述情况下,它们都需要导入 CommonLib。然后App需要导入B。以上是关于斯威夫特包管理器。错误:找到多个名称为...的包?的主要内容,如果未能解决你的问题,请参考以下文章