如何解决 Swift Package Manager 目标重叠源错误

AKo*_*ich 6 xcode objective-c swift-package-manager

我有一个 GitHub 存储库,它是一个 Objective-C 项目,定义了多个目标(每个目标操作系统一个:macOS、iOS、tvOS 等)。这些目标共享项目的大部分源代码文件。

我正在尝试向项目添加 SPM 支持,并在 Package.swift 文件中定义匹配的目标,源path引用包含跨目标共享的源代码文件的同一文件夹。

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

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

AKo*_*ich 7

我终于弄清楚问题是什么以及应该采取什么解决方案。

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

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

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

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