【问题标题】:Reuse local Swift package in multiple targets在多个目标中重用本地 Swift 包
【发布时间】:2021-07-19 13:41:59
【问题描述】:

我需要在多个目标中重用本地 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 足够聪明,不会一遍又一遍地构建包,即使我不明白为什么一开始会导致错误。

有没有合理的解决办法?

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

【问题讨论】:

  • 我正在回答您的 Angular js 问题,但您将其删除。所以如果你还有问题试试这个:app.config(["$interpolateProvider", function ($interpolateProvider) {$interpolateProvider.startSymbol('[[');$interpolateProvider.endSymbol(']]');}]);

标签: swift xcode swift-package-manager


【解决方案1】:

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

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

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

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

【讨论】:

  • 当我尝试这个时,我得到了这个错误:Swift package target 'PackageA' is linked as a static library by 'MyApp' and 'PackageA', but can't be dynamic build because there is a package product with同名。你真的得到这个工作了吗?如果是这样,您是如何避免这个问题的?
猜你喜欢
  • 2019-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多