Возможные значения модели UIDevice currentDevice

Каковы все возможные значения, возвращаемые [[UIDevice currentDevice] model]; ? Он не документирован .

Возможными долями являются iPod touch , iPhone , iPhone Simulator , iPad , iPad Simulator

Если вы хотите узнать, какое оборудование iOS испортилось, например iPhone3 , iPhone4 , iPhone5 т. Д. Ниже, это код для этого


ПРИМЕЧАНИЕ. В приведенном ниже коде может не содержаться вся строка устройства, я с другими ребятами поддерживаю тот же код в GitHub, поэтому, пожалуйста, возьмите последний код

Цель-C: GitHub / DeviceUtil

Swift: GitHub / DeviceGuru


 #include <sys/types.h> #include <sys/sysctl.h> - (NSString*)hardwareDescription { NSString *hardware = [self hardwareString]; if ([hardware isEqualToString:@"iPhone1,1"]) return @"iPhone 2G"; if ([hardware isEqualToString:@"iPhone1,2"]) return @"iPhone 3G"; if ([hardware isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; if ([hardware isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; if ([hardware isEqualToString:@"iPhone5,1"]) return @"iPhone 5"; if ([hardware isEqualToString:@"iPod1,1"]) return @"iPodTouch 1G"; if ([hardware isEqualToString:@"iPod2,1"]) return @"iPodTouch 2G"; if ([hardware isEqualToString:@"iPad1,1"]) return @"iPad"; if ([hardware isEqualToString:@"iPad2,6"]) return @"iPad Mini"; if ([hardware isEqualToString:@"iPad4,1"]) return @"iPad Air WIFI"; //there are lots of other strings too, checkout the github repo //link is given at the top of this answer if ([hardware isEqualToString:@"i386"]) return @"Simulator"; if ([hardware isEqualToString:@"x86_64"]) return @"Simulator"; return nil; } - (NSString*)hardwareString { size_t size = 100; char *hw_machine = malloc(size); int name[] = {CTL_HW,HW_MACHINE}; sysctl(name, 2, hw_machine, &size, NULL, 0); NSString *hardware = [NSString stringWithUTF8String:hw_machine]; free(hw_machine); return hardware; } 

Я просто сделал тест на iPod Touch, iPhone, Phone Retina, iPhone 5, iPad, iPad Retina и iPad Mini. Итак, это мой вывод:

 iPod touch iPhone iPad 

На симуляторах – это может быть полезно, если вы разработчик, работающий над функциями, которые иногда вообще не работают на симуляторах, вы получите следующие значения:

 iPhone Simulator iPad Simulator 

Я считаю, что лучший ответ на объяснение (что-то, что не было написано здесь) Является ли сказать, что само значение является значением String. и возможные ответы – это строка, например: «iPhone», «iPad» и т. д.

Ни один из этих ответов не расширяется для новых номеров моделей. Вот перечисление:

 public enum DeviceType { case iPad(String?) case iPhone(String?) case simulator(String?) case appleTV(String?) case unknown } 

И Extension я написал, что, по-моему, немного чище и немного более расширяем, когда появляется новый номер модели.

 extension UIDevice { public static func getDevice() -> DeviceType { var info = utsname() uname(&info) let machineMirror = Mirror(reflecting: info.machine) let code = machineMirror.children.reduce("") { identifier, element in guard let value = element.value as? Int8, value != 0 else { return identifier } return identifier + String(UnicodeScalar(UInt8(value))) } if code.lowercased().range(of: "ipad") != nil { if let range = code.lowercased().range(of: "ipad") { var mutate = code mutate.removeSubrange(range) return .iPad(mutate) }else{ return .iPad(nil) } }else if code.lowercased().range(of: "iphone") != nil { if let range = code.lowercased().range(of: "iphone") { var mutate = code mutate.removeSubrange(range) return .iPhone(mutate) }else{ return .iPhone(nil) } }else if code.lowercased().range(of: "i386") != nil || code.lowercased().range(of: "x86_64") != nil{ return .simulator(code) }else if code.lowercased().range(of: "appletv") != nil { if let range = code.lowercased().range(of: "appletv") { var mutate = code mutate.removeSubrange(range) return .appleTV(mutate) }else{ return .appleTV(nil) } }else{ return .unknown } } } 
  • Горизонтально прокрутите ВСЕ строки UICollectionView вместе
  • Кодировать «+» с помощью URLComponents в Swift
  • UISearchBar в UINavigationController titleView не отвечает / tappable
  • iOS Swift: AWS SDK - загрузка файла с S3 - получение содержимого без сохранения файла
  • XCTestCase для CoreData завершается с ошибкой: «не удалось найти объект для myappTests.Example»
  • Ошибка проверки iOS -> Пакет недействителен (Xcode 6.2, iOS 8.2)
  • Использовать AppDelegate в сегодняшнем расширении
  • SKLabelNode исчезнет, ​​но по-прежнему доступен для клика
  • Прогресс не обновляется - Swift
  • Текущее местоположение не работает в Google Map
  • Динамические строки с заполнителями и множественная поддержка в Swift (iOS)
  • Interesting Posts

    Как отправить push-уведомление после нажатия кнопки?

    iOS 7 Отобразить текст с макетом (название, параграф …)

    Добавить функциональность в стандартное распознавание жгута жесткости в UIScrollView

    Использовать имя класса, хранящееся в переменной, для вызова метода класса?

    Offscreen UITableViewCells (для расчета размера), не учитывая класс размера?

    Ошибка при создании приложения в Xcode 7.1

    Проблема с кодовой подпиской в ​​Xcode версии 8

    Как получить / обработать ответ ajax с этапа окончательной формы в UIWebView?

    tableView.dequeueReusableCellWithIdentifier () заставляет приложение зависать

    UIBarButtonItem приводит к сбою приложения

    Как подсчитать объекты Core Data, соответствующие запросу, для отношений друг к другу?

    -webkit-overflow-scrolling: touch разбивает мой -webkit-scrollbar css в iOS

    Как вы используете NSAttributedString?

    Как разрешить определенному контроллеру просмотра поддерживать как ландшафтную, так и портретную ориентацию

    Как сохранить видео из каталога документов в галерею?

    Давайте будем гением компьютера.