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

Posted

技术标签:

【中文标题】如何解决 Swift Package Manager 目标重叠源错误【英文标题】:How to resolve Swift Package Manager target overlapping sources error 【发布时间】:2020-02-05 01:06:58 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

我终于弄清楚问题出在哪里,应该有什么解决办法。

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

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

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

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

【讨论】:

能否提供目标共享文件的示例? 这里是至少可以使用 SPM 构建 repo 的包清单(但打包步骤仍然需要一些工作):github.com/WideSpectrumComputing/rollbar-ios/blob/master/… 所以,文件现在已经消失了 @RichardTopchii,一个完整的工作清单现在在这里:github.com/rollbar/rollbar-apple/blob/master/Package.swift我们最近停止了 Rollar-ios 的开发,现在它在 Rollbar-Apple 仓库下开发:github.com/rollbar/rollbar-apple

以上是关于如何解决 Swift Package Manager 目标重叠源错误的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 13如何使用本地Swift包(Swift Package)

Xcode 13如何使用本地Swift包(Swift Package)

Swift Package Manager 无法解析 1.4 以上的 Kitura 版本

如何解决在 Django 中执行 manage.py runserver 命令时的错误原因?

Import Local Swift Package No such module TestPackage

Import Local Swift Package No such module TestPackage