如何解决 Swift 包管理器目标重叠源错误

How to resolve Swift Package Manager target overlapping sources error

我有一个 GitHub 回购协议,它是一个定义多个目标的 Objective-C 项目(每个目标一个 OS: macOS, iOS , tvOS, 等等)。这些目标共享项目的大部分源代码文件。

我正在尝试向项目添加 SPM 支持,在 Package.swift 文件中,我定义了匹配目标,源 path 指的是包含目标之间共享的那些源代码文件的同一文件夹。

当我将此 SPM-"enabled" project/package 添加到试图通过 SPM 将其用作依赖项的测试项目时,我收到一条错误消息,指出依赖项包中的第二个目标与另一个目标有重叠的源(第一个使用相同共享源代码文件的目标)。

关于如何解决这个问题有什么想法吗?我假设我在共享源代码文件上的多目标配置不是唯一的...

我终于弄清楚问题出在哪里以及解决方案应该是什么。

我的错误是用 Xcode 看待 SPM 目标的方式来看待它们。实际上,SPM 目标本质上是一个命名文件夹,其中包含需要构建以生产一个或多个产品的源代码文件。他们不假设关于如何构建的配方定义(Xcode 目标的方式)。但是,依赖于给定 SPM 包的代码库确实会应用其 Xcode 目标来构建自身和依赖项(在构建自己的代码库之前)。 SPM 目标与目标设备完全无关。

因此,当我试图将所有 Xcode 目标映射为相似的 SPM 目标时(同时从多个 SPM 目标引用相同的源代码文件),从 SPM 的角度来看这是错误的.

正确的解决方案是在单个代码库位置(路径)上定义单个 SPM 目标,然后一切顺利。

这是一个很好的视频,它很好地解释了 SPM 的概念,随后引导我找到了可行的解决方案: Creating Swift Packages