在多个目标中重用本地 Swift 包

Reuse local Swift package in multiple targets

我需要在多个目标中重用本地 Swift 包。它们都是同一个工作区的一部分,看起来像这样

- Workspace
  - ProjectA
    - TargetA1 depends on PackageA
    - TargetA2 depends on PackageA and PackageB
  - ProjectB
    - TargetB1 depends on PackageA
  - ProjectC, etc...
  - Modules
    - PackageA
    - PackageB

包构建产品添加到各个目标 General > Frameworks and Libraries 依赖项下。现在,当我触发构建时,我得到

Multiple commands produce '.../Modules/PackageA' etc...

这有点可以理解,我希望 Xcode 足够聪明,不要一遍又一遍地构建包,即使如此,我也不明白为什么这会导致第一个错误地方。

有没有合理的解决办法?

我不想再次开始创建静态库目标或创建一个单独的存储库只是为了能够通过包依赖项导入它。

好的,我找到了一个比较满意的答案。

首先,阻止 SPM 选择库类型本身并在您要共享的包中声明 2 个单独的构建产品:

...
products: [
    .library(name: "PackageA", type: .dynamic, targets: ["PackageA"]),
    .library(name: "PackageAStatic", type: .static, targets: ["PackageA"])
],
...

一个明确 .dynamic,另一个明确 .static。现在根据您要在其中使用此包的目标,link 正确的目标(动态或静态)。这似乎为我解决了这个问题。