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 的单一目标,但在源代码中嵌入条件编译以有条件地包含/排除特定文件。这没有上面的命名问题。但是必须执行此条件编译似乎很不干净。
还有其他建议吗? 谢谢!
最佳答案
等待即将发布的 Swift 5.3。这是通过 SE-0273 添加的.
关于ios - Swift 包管理器 : How best to indicate platform dependent code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61730642/