ios - Swift 包管理器 : How best to indicate platform dependent code?

标签 ios swift macos swift-package-manager

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/

相关文章:

ios - 将 ManagedObjectID 存储在 NSDictionary 中

ios - 将 ViewModel 绑定(bind)到 ViewController (ReactiveCocoa) iOS

ios - 在热点全屏期间调整窗口大小时 AVPlayer 崩溃

macos - OS X 10.10 Yosemite - 添加菜单

swift - 为什么我的 Swift 应用程序不能使用 xcodebuild 构建,但可以使用 XCode 构建?

python - Mechanize 提交一个表单,创建一个需要下载的动态文件

ios - 如何为显示CIImage的GLKView实现contentMode?

javascript - 从资源中将 javascript 加载到 UIWebView

swift - macos CLLocationManager 提示

ios - 隐藏和取消隐藏 SKSprite 节点