2013-01-19 12 views

答えて

39

あなたはiPhone3のように台無しにされているハードウェアiOS知りたい場合は可能バレスはiPod touchiPhoneiPhone SimulatoriPadiPad Simulator

あり、iPhone4iPhone5など以下はその

のコードです

注:以下のコードにはすべてのdevi GitHub/DeviceUtil

スウィフト: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; 
} 
CEの文字列は、私は他の人がそう

のObjective-C、そこから最新のコードをご利用くださいGitHubの上で同じコードを維持していると思い

+11

私はなぜこれが受け入れられたのか不思議です。それは全く質問に答えません。 – rmaddy

+0

それは私には見えますが、ラウンドアバウトの仕方で見えます。 – tomasmcguinness

+0

@Inder Kumar Rathore、iOS 6.1ではこの機能は完全には動作しません。 3から1のケースでは、他の値を返すことができます – CReaTuS

21

私はちょうどiPod Touch、iPhone、電話網、iPhone 5、iPad、iPad RetinaおよびiPad Miniでテストを行いました。これが私の結論です:シミュレータで

iPod touch 
iPhone 
iPad 

- あなたは時々シミュレータ上で全く動作しない機能に取り組んで開発している場合、これは有用である可能性 - あなたはこれらの値を取得します:

iPhone Simulator 
iPad Simulator 
+3

あなたはシミュレータ... – andreas

+0

ああ、掲示質問に対する実際の答えを忘れてしまいました!ありがとう。 iPadのミニが示されることになると便利なものを持っていなかった(そしてそれはXCodeのシミュレータではサポートされていない)、これはそれを答えた場合、私は特に思っていました。 – BobDickinson

+0

誰でもAppleTVの値を知っていますか? – ColdLogic

0

私は説明のための最良の答え(ここに書かれていないもの)を信じています それは値自体が文字列値であると言います。 であり、可能な回答は「iPhone」、「iPad」などの文字列です。

0

これらの回答は新しいモデル番号に対しては拡張できません。ここに列挙です:

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

と拡張子は、私は少しクリーナーと新しいモデルナンバーが出てくるときのために、もう少し拡張可能だと思うことを書きました。

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 
     } 
    } 
} 
関連する問題