2015-09-19 7 views
1

Мое приложение должно знать, какое устройство iphone работает под и основано на том, что делает некоторую настройку экрана. Я использую следующий код, чтобы решить, iphone https://github.com/dennisweissmann/Basics/blob/master/Device.swiftКак обнаружить iPhone 6s и 6s +

но есть способ, чтобы выяснить, является 6S или 6S Plus? Итак, дело в том, что это не одно из устройств, упомянутых в Device.swift, но не знает, как настроить экран и отобразить устройство, которое не поддерживается, но я хочу, чтобы приложение работало так же, как iPhone6 ​​для iPhone6S, и так же, как и iPhone6 ​​Plus для iPhone6s Plus.

Благодаря

+0

Лучший способ, чтобы соответствовать «Аппаратные строки» здесь https://en.wikipedia.org/wiki/List_of_iOS_devices для 'uname' функции выхода. Ваша библиотека устарела – creker

ответ

3

База на файле Device.swift, Вставка:

case iPhone6S 
    case iPhone6SPlus 

Under:

case iPhone6Plus 

и вставки:

case "iPhone8,1":        self = iPhone6S 
    case "iPhone8,2":        self = iPhone6SPlus 

в:

case "iPhone7,1":        self = iPhone6Plus 
1

Если вы используете AutoLayout вам не нужно, чтобы проверить, какие iPhone, что ваше приложение работает в, то изменение будет сделано автоматически.

+0

Да, я знаю об автозапуске, но я столкнулся с некоторыми проблемами, которые мне пришлось внести, но сейчас слишком поздно менять дизайн на данный момент. Я согласен, что это не лучшая вещь, которую я сделал. Итак, для первого релиза я поеду с тем, что у меня есть, и внесет изменения в следующую версию. – borna

4

Вы можете сделать это программно, получив модель устройства:

#import <sys/utsname.h> 

NSString* deviceName() 
{ 
    struct utsname systemInfo; 
    uname(&systemInfo); 

    return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; 
} 

результирующие модели:

@"i386"  on 32-bit Simulator 
@"x86_64" on 64-bit Simulator 
@"iPod1,1" on iPod Touch 
@"iPod2,1" on iPod Touch Second Generation 
@"iPod3,1" on iPod Touch Third Generation 
@"iPod4,1" on iPod Touch Fourth Generation 
@"iPhone1,1" on iPhone 
@"iPhone1,2" on iPhone 3G 
@"iPhone2,1" on iPhone 3GS 
@"iPad1,1" on iPad 
@"iPad2,1" on iPad 2 
@"iPad3,1" on 3rd Generation iPad 
@"iPhone3,1" on iPhone 4 (GSM) 
@"iPhone3,3" on iPhone 4 (CDMA/Verizon/Sprint) 
@"iPhone4,1" on iPhone 4S 
@"iPhone5,1" on iPhone 5 (model A1428, AT&T/Canada) 
@"iPhone5,2" on iPhone 5 (model A1429, everything else) 
@"iPad3,4" on 4th Generation iPad 
@"iPad2,5" on iPad Mini 
@"iPhone5,3" on iPhone 5c (model A1456, A1532 | GSM) 
@"iPhone5,4" on iPhone 5c (model A1507, A1516, A1526 (China), A1529 | Global) 
@"iPhone6,1" on iPhone 5s (model A1433, A1533 | GSM) 
@"iPhone6,2" on iPhone 5s (model A1457, A1518, A1528 (China), A1530 | Global) 
@"iPad4,1" on 5th Generation iPad (iPad Air) - Wifi 
@"iPad4,2" on 5th Generation iPad (iPad Air) - Cellular 
@"iPad4,4" on 2nd Generation iPad Mini - Wifi 
@"iPad4,5" on 2nd Generation iPad Mini - Cellular 
@"iPhone7,1" on iPhone 6 Plus 
@"iPhone7,2" on iPhone 6 
@"iPhone8,1" on iPhone 6S 
@"iPhone8,2" on iPhone 6S Plus 
+0

Спасибо всем, Это то, что я искал для случая «iPhone8,1»: и случай «iPhone8,2»: – borna

0

Вы можете использовать этот switch

public extension UIDevice { 
var modelName: String { 
    var systemInfo = utsname() 
    uname(&systemInfo) 
    let machineMirror = Mirror(reflecting: systemInfo.machine) 
    let identifier = machineMirror.children.reduce("") { identifier, element in 
     guard let value = element.value as? Int8, value != 0 else { return identifier } 
     return identifier + String(UnicodeScalar(UInt8(value))) 
    } 

    switch identifier { 
    case "iPhone3,1", "iPhone3,2", "iPhone3,3", "iPhone4,1": 
     return "iPhone 4" 

    case "iPhone5,1", "iPhone5,2", "iPhone5,3", "iPhone5,4", "iPhone6,1", "iPhone6,2", "iPhone8,4": 
     return "iPhone 5" 

    case "iPhone7,2", "iPhone8,1", "iPhone9,1", "iPhone9,3": 
     return "iPhone 6,7" 

    case "iPhone7,1", "iPhone8,2", "iPhone9,2", "iPhone9,4": 
     return "iPhone Plus" 

    case "i386", "x86_64": 
     return "Simulator" 
    default: 
     return identifier 
    } 
} 

}

тогда я код:

switch UIDevice.current.modelName { 
    case "iPhone 4": 
     //Your code here 
    case "iPhone 5": 
     //Your code here 
    case "iPhone 6,7": 
     //Your code here 
    case "iPhone Plus", "Simulator": 
     //Your code here 
    default: 
     break 
    } 
Смежные вопросы