Я создал проект в Xcode 11 beta 2, с недавно представленной кроссплатформенной функцией, предназначенной как для iOS, так и для macOS.У меня проблемы с определением, запущено ли приложение на той или иной платформе.
Допустим, я добавил enum, который помогает идентифицировать платформу
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.
Я просто не понимаю, почему предложенный выше код не работает.В настоящее время я готовлю больше места для установки бета-версии 3 (128 ГБ хранилища ftw), чтобы проверить, схожи ли результаты.