【发布时间】:2019-07-05 20:33:21
【问题描述】:
我在 Xcode 11 beta 2 中创建了项目,该项目具有新引入的跨平台功能,适用于 iOS 和 macOS。我无法确定应用是在一个平台上运行还是在另一个平台上运行。
假设我添加了枚举,这有助于识别平台
enum Platform {
case iOS
case macOS
case unknown
}
现在,如果我尝试以下代码,无论我运行什么环境,我总是会发现平台是 iOS。
#if canImport(UIKit)
let platform: Platform = .iOS
#elseif canImport(AppKit)
let platform: Platform = .macOS
#else
let platform: Platform = .unknown
#endif
我也尝试了不同的约定#if os(iOS) || os(watchOS) || os(tvOS),但由于我使用的 Swift 版本是 5.0,所以应该没关系。
我想到的唯一解决方案是根据我使用的架构在构建设置中添加不同的
好的,我刚刚尝试将其设置为 OTHER_SWIFT_FLAGS。OTHER_SWIFT_FLAGS[sdk=macosx*] = "-D" "MACOS",但它仍然被视为 iOS。
我只是不明白为什么上面提出的代码不起作用。我目前正在准备更多空间来安装 beta 3(128gb 存储ftw),以检查输出是否相似。
【问题讨论】:
-
如果在条件句之前声明
platform然后在条件句中设置值会有什么不同吗? -
@Chris 这没什么区别。