Что не так с моим кодом #if TARGET_OS_SIMULATOR для определения пути к области?
У меня есть этот код
#if TARGET_OS_SIMULATOR
let device = false
let RealmDB = try! Realm(path: "/Users/Admin/Desktop/realm/Realm.realm")
#else
let device = true
let RealmDB = try! Realm()
#endif
Устройство bool отлично работает, но RealmDB работает только для остальных условий.
Ответы
Ответ 1
TARGET_IPHONE_SIMULATOR
макрос не работает в Swift.
Что вы хотите сделать, это следующее: "
#if arch(i386) || arch(x86_64)
let device = false
let RealmDB = try! Realm(path: "/Users/Admin/Desktop/realm/Realm.realm")
#else
let device = true
let RealmDB = try! Realm()
#endif
Ответ 2
Начиная с Xcode 9. 3+ Swift теперь поддерживает, if #targetEnvironment(simulator)
чтобы проверить, строите ли вы для симулятора.
Пожалуйста, прекратите использовать архитектуру в качестве ярлыка для симулятора. И macOS, и Simulator имеют x86_64, что может быть не тем, что вам нужно.
// ObjC/C:
#if TARGET_OS_SIMULATOR
// for sim only
#else
// for device
#endif
// Swift:
#if targetEnvironment(simulator)
// for sim only
#else
// for device
#endif
Ответ 3
Пожалуйста, смотрите этот пост. Это правильный способ сделать это, и он хорошо объяснил
https://samsymons.com/blog/detecting-simulator-builds-in-swift/
По сути, определите переменную с именем по вашему желанию (может быть, "SIMULATOR"), который будет установлен во время запуска в симуляторе. Установите его в "Параметры сборки цели", в разделе " Active Compilation Conditions
→ " Debug
затем (+)
затем выберите " Any iOS Simulator SDK
в раскрывающемся списке и добавьте переменную.
Тогда в вашем коде
var isSimulated = false
#if SIMULATOR
isSimulated = true // or your code
#endif
Ответ 4
Более подробное объяснение этой проблемы здесь. Я использую этот подход:
struct Platform {
static let isSimulator: Bool = {
var isSim = false
#if arch(i386) || arch(x86_64)
isSim = true
#endif
return isSim
}()
}
// Elsewhere...
if Platform.isSimulator {
// Do one thing
}
else {
// Do the other
}
Или создайте служебный класс:
class SimulatorUtility
{
class var isRunningSimulator: Bool
{
get
{
return TARGET_OS_SIMULATOR != 0// for Xcode 7
}
}
}