Как получить тип 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
    }
Другие вопросы по тегам