Swift 包管理器目标链接

Posted

技术标签:

【中文标题】Swift 包管理器目标链接【英文标题】:Swift Package Manager target linking 【发布时间】:2020-11-11 17:51:08 【问题描述】:

我希望能够从 Swift 包中仅导入 1 个目标/包。为此,我有以下结构:

TopLevelDirectory
  |- Package.swift
  |- Sources
       |- MyTargetName
             |- main.swift
             |- SubFolder1
                 |- Swifty1.swift
             |- SubFolder2
                 |- Swifty2.swift
  |- Tests
       |- MyTargetNameTests
             |- SubFolder1Tests
                 |- Swifty1Tests.swift
             |- SubFolder2Tests
                 |- Swifty2Tests.swift
       |- LinuxMain.swift

现在,当我运行 swift buildswift run 时,它编译并运行得很好。但是,当我运行 swift test 时,我会收到指向 Swifty1.swiftSwifty2.swift 内容的链接器错误。

现在,在我的测试文件中,我有 @testable import MyTargetName 行来尝试导入目标

知道我做错了什么吗?

Package.swift:

let package = Package(
    name: "MyPackageName",
    platforms: [
      .macOS(.v10_15), .ios(.v10)
    ],
    products: [
        .library(name: "MyPackageName", targets: ["MyTargetName"]),
    ],
    dependencies: [    ],
    targets: [
        .target(name: "MyTargetName", dependencies: []),
        .testTarget(name: "MyTargetNameTests", dependencies: ["MyTargetName"])
    ]
)

【问题讨论】:

【参考方案1】:

我最终找出了自己的问题。在MyTargetName 下,我有一个 main.swift 文件。在构建和运行时,它看到了可执行文件并且没有问题。但是在运行swift test 时,它不知道如何处理可执行文件并引发链接器错误。为什么?我不知道

【讨论】:

以上是关于Swift 包管理器目标链接的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 包管理器更新 iOS 模拟器部署目标?

如何使用 Swift 包管理器 binaryTarget?

Swift 包管理器教程

iOS支持Swift包管理器吗?[已关闭]

如何在 Playground 中使用 Swift 包管理器

Swift 包管理器找不到模块