0

我正在尝试使用 Swift 包 Siesta 作为我正在构建的包的依赖项,并在我的包代码中引用它。我已经确定了如何将包导入到我的Package.swift文件中的项目中,这很简单:

dependencies: [
    .package(url: "https://github.com/bustoutsolutions/siesta", from: "1.5.1")
],

这会导致包被复制到我的包中就好了。我遇到的问题实际上是将它链接到我的包,所以我可以import它并在代码中引用它。我知道我需要将它实际链接到我的目标

我已经阅读了一些其他的包文件,因为 Siesta 的包名是这样的

let package = Package(
    name: "Siesta",

而且它申报的产品是这样的

products: [
    .library(name: "Siesta", targets: ["Siesta"]),
    .library(name: "SiestaUI", targets: ["SiestaUI"]),
    .library(name: "Siesta_Alamofire", targets: ["Siesta_Alamofire"]),
],

我应该能够在我的包文件的目标中执行此操作以使用它

.target(
    name: "MyTarget",
    dependencies: [.product(name: "Siesta", package: "Siesta")]),

但是当我尝试构建我的包时,我收到一个错误:

/Users/blahblah/Desktop/MyPackage/Package.swift:目标“MyTarget”的依赖项中的未知包“Siesta”

不仅如此,我的包上的单次运行方案的所有目标都丢失了,如果不丢弃所有本地版本控制更改,我就无法再次构建。这里发生了什么?

4

1 回答 1

0

使用 Swift 工具 5.2 版时,您必须在声明包依赖项时提供名称参数。

.package(name: "Siesta", url: "https://github.com/bustoutsolutions/siesta", from: "1.5.1")

Package.swift 文件的一个工作示例:

// swift-tools-version:5.2
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "MyPackage",
    products: [
        .library(
            name: "MyLibrary",
            targets: ["MyTarget"]),
    ],
    dependencies: [
        // make sure to provide a `name` argument here
        .package(name: "Siesta", url: "https://github.com/bustoutsolutions/siesta", from: "1.5.1")        
    ],
    targets: [
        .target(
            name: "MyTarget",
            dependencies: [
                .product(name: "Siesta", package: "Siesta")
            ]),
    ]
)

来源:https ://forums.swift.org/t/package-names-in-swift-5-2/34886/6

于 2020-05-27T07:59:44.063 回答