【问题标题】: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

有谁知道如何解决这个问题?

【问题讨论】:

    标签: swift swift-package-manager


    【解决方案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。
    猜你喜欢
    • 2015-08-05
    • 1970-01-01
    • 2017-07-22
    • 2017-03-24
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多