2013-01-19 12 views

Antwort

39

Die möglichen vales sind iPod touch, iPhone, iPhone Simulator, iPad, iPad Simulator

Wenn Sie wissen möchten, welche Hardware iOS ruiniert auf wie iPhone3, iPhone4, iPhone5 etc unten ist der Code für das


HINWEIS: Der folgende Code enthält möglicherweise nicht alle Devi ce Streichquartette, ich bin mit den anderen Jungs den gleichen Code auf GitHub Aufrechterhaltung so wenden Sie sich bitte von dort den neuesten Code nehmen

Objective-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; 
} 
+11

Ich bin gespannt, warum das akzeptiert wurde. Es beantwortet die Frage überhaupt nicht. – rmaddy

+0

Es sieht für mich so aus, aber auf Umwegen. – tomasmcguinness

+0

@Inder Kumar Rathore, in iOS 6.1 ist diese Funktion nicht perfekt. In 1 Fall von 3, kann dann einen anderen Wert zurückgeben – CReaTuS

21

Ich habe gerade einen Test auf iPod Touch, iPhone, Handy Retina, iPhone 5, iPad, iPad Retina und iPad Mini gemacht. Das ist also mein Fazit:

iPod touch 
iPhone 
iPad 

Auf Simulatoren - dies nützlich sein könnte, wenn Sie einen Entwickler arbeitet an Funktionen sind, die manchmal gar nicht an Simulatoren arbeiten - Sie werden diese Werte erhalten:

iPhone Simulator 
iPad Simulator 
+3

Sie haben die Simulatoren vergessen ... – andreas

+0

Ah, die eigentliche Antwort auf die gepostete Frage! Vielen Dank. Ich habe mich speziell gefragt, ob das iPad Mini angezeigt werden würde und hatte kein Handy (und es wird nicht im XCode-Simulator unterstützt), und das hat darauf geantwortet. – BobDickinson

+0

Wer kennt die Werte für AppleTV? – ColdLogic

0

Ich glaube die beste Antwort zu erklären (etwas, das hier nicht geschrieben wurde) Ist zu sagen, dass der Wert selbst ein String-Wert ist. und die möglichen Antworten sind z. B.: "iPhone", "iPad" und etc ..

0

Keine dieser Antworten sind erweiterbar für neue Modellnummern. Hier ist eine Aufzählung:

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

Und Erweiterung Ich schrieb, dass ich denke, ist ein wenig saubere und ein wenig mehr erweiterbar für, wenn neue Modellnummer heraus.

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 
     } 
    } 
} 
Verwandte Themen