【发布时间】:2020-08-27 01:11:22
【问题描述】:
Swift 包管理器 (SPM) 允许支持不同的平台(例如 iOS、macOS)。我正在调整一个 Swift 库以使用 SPM,需要共享一些 iOS 和 macOS 的代码,但也有一些差异。
我在 Facebook 库中看到过类似的示例: https://github.com/facebook/facebook-ios-sdk/blob/master/Package.swift 在这种情况下,他们使用多个目标,每个目标都有自己的(独立)代码。这不是平台依赖的例子,而是目标依赖的例子。
我看到了两条前进的道路:
1) 为 iOS 和 macOS 提供单独的库目标——并使用与 Facebook 类似的方法,但大部分代码将在目标之间共享。我不完全确定 SPM 是否允许跨目标共享代码。这里的缺点纯粹是语法糖——命名差异。不幸的是,您必须在 iOS 上导入“MyLibrary_iOS”,在 macOS 上导入“MyLibrary_macOS”。
2) 有一个适用于 iOS 和 macOS 的目标,但在源代码中嵌入条件编译以有条件地包含/排除特定文件。这没有上述命名问题。但是必须进行这种条件编译似乎是不干净的。
还有其他建议吗? 谢谢!
【问题讨论】:
-
看起来我的方法 1) 可能是可行的,但代码共享是通过依赖库完成的。见stackoverflow.com/questions/59652708/… 见stackoverflow.com/questions/60067701/…
标签: ios swift macos swift-package-manager