Как получить тип Iphone от симулятора (IOS)

Существует множество решений, позволяющих узнать, на каком устройстве работает приложение.

iOS: как определить текущую модель iPhone/устройства в Swift?

Но работая в симуляторе, мы просто можем обнаружить, что это симулятор, но не какой тип симулятора (iphone5,6,6s и т.д.).

Как мы можем тестировать разные логики в зависимости от devicetype с симулятором? Или как я могу определить, какое устройство моделируется в коде?

Ответ 1

На основе ответов я нашел здесь и здесь, я написал эту небольшую функцию 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", здесь лучшее решение в виде класса.