Swift 包:在库之间共享内部代码,但不在库用户之间共享

Swift packages: sharing internal code between libraries but not library users

我应该如何在 Package.swift 中定义的模块(Swift 包术语中的目标)之间共享代码,同时仍然将共享代码中的 API 暴露给库用户?表达这个问题的另一种方式是:How to share internal API in module with specific other modules (other libraries) but not library users.

例如,假设我有 2 个库,HumanDog,用户只需要其中的一个(或者同时使用两个,如果他们要)。我想出了两种方法:

我认为第二个选项更好,但它不起作用。也许有更好的选择我不知道?

之所以需要将它们放在单独的模块中,是因为其中一个 (Human) 依赖于相当大的依赖项,而 Dog[ 不需要=47=].


我最初在 Swift 论坛 here 上发布了这个,如果找到解决方案,我会在这里更新。

我通过执行问题中列出的第一种方法解决了这个问题(4 个模块):

  • 核心:库A和B共享的代码,用户应该可以导入。
  • 内部: 库用户应该不能 导入的代码。取决于核心。还取决于不应向库用户公开的其他库。
  • 库 A(例如人类):用户可以选择使用的一个库。
  • 库 B(例如 Dog):用户可以选择使用的另一个库。

然后在图书馆 A 和图书馆 B 中,我有一个名为 Exports.swift 的文件,其中包含 @_exported import Core.