如何解决 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 命令时的错误原因?