Как получить тип Iphone с симулятора (IOS)
Есть много решений, чтобы узнать, на каком устройстве работает приложение.
iOS: Как определить текущую модель iPhone/ устройства в Swift?
Но, запустив симулятор, мы просто можем определить, что это симулятор, а не какой тип симулятора (iphone5,6,6s и т. Д.)
Как мы можем проверить различные логики в зависимости от типа устройства с помощью симулятора? Или как я могу определить, какое устройство моделируется в коде?
4 ответа
Основываясь на ответах, которые я нашел здесь и здесь, я написал эту маленькую функцию Swift для вас:
func getPlatformNSString() {
#if (arch(i386) || arch(x86_64)) && os(iOS)
let DEVICE_IS_SIMULATOR = true
#else
let DEVICE_IS_SIMULATOR = false
#endif
var machineSwiftString : String = ""
if DEVICE_IS_SIMULATOR == true
{
// this neat trick is found at http://kelan.io/2015/easier-getenv-in-swift/
if let dir = NSProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] {
machineSwiftString = dir
}
} else {
var size : size_t = 0
sysctlbyname("hw.machine", nil, &size, nil, 0)
var machine = [CChar](count: Int(size), repeatedValue: 0)
sysctlbyname("hw.machine", &machine, &size, nil, 0)
machineSwiftString = String.fromCString(machine)!
}
print("machine is \(machineSwiftString)")
}
Я получаю результат "iPhone8,2", который конвертируется в iPhone 6+, на который настроен мой симулятор.
Доступен открытый исходный код, который можно использовать для преобразования строк вроде iPhone8,2
"к правильному названию модели iPhone.
И если вы хотите избавиться от предупреждения компилятора за использование " DEVICE_IS_SIMULATOR
"Волшебство, вот лучшее решение в форме класса.
Начиная с Xcode 9.4.1, среда NSProcessInfo(). Теперь включает ключ для "SIMULATOR_DEVICE_NAME". Значения выглядят как "iPhone 8".
Вы также можете использовать мою платформу BDLocalizedDevicesModels, чтобы получить имя в одной строке кода. Проверьте это на Github.
Он работает с Objective-C и Swift и может помочь вам получить имя устройства для реального устройства или симулятора.
Более современный код, который также работает на Mac M1 и компилируется в последней версии Swift.
public func getModelName() -> String {
var machineSwiftString : String = ""
#if targetEnvironment(simulator)
if let dir = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] {
machineSwiftString = dir
}
#else
var size : size_t = 0
sysctlbyname("hw.machine", nil, &size, nil, 0)
var machine = [CChar](count: Int(size), repeatedValue: 0)
sysctlbyname("hw.machine", &machine, &size, nil, 0)
machineSwiftString = String.fromCString(machine)!
#endif
return machineSwiftString
}