2009-09-10 174 views
7

我想識別安裝了我的應用程序的設備。 這意味着,當我在iPhone上安裝應用程序時,它應該告訴我設備信息。信息就像,設備是2G,3G或3GS。以編程方式標識iphone設備

目前,我只得到了型號,名稱,系統名稱,設備的systemVersion。

我想知道該設備是2G,3G或3GS。

請幫幫我。

+1

做了我答案有幫助? – Oliver 2011-11-03 12:57:54

回答

8

在過去的Mac編程歷史中,這總被認爲是錯誤的問題。

你真正需要知道的是更具體的資料片。針對代碼中的每個行爲決策提出一個更狹窄的問題。例如,您可能需要知道設備是否具有GPS。另一個原因是你不應該決定如何使用基於它的模型設備的OpenGL堆棧,而是基於提供的OpenGL功能/擴展信息。

你現在得到的信息是從的UIDevice,這是一個不幸的是設計不良的API。它以最糟糕的格式爲您提供完全錯誤的信息 - 字符串。

埃麗卡喪盾具有延伸到的UIDevice可能有用here。這只是sysctlbyname("hw.machine", ...)的包裝。這個屬性對於每個模型都是不同的。

但是,這通常是錯誤的問題。

+3

同意。除非您正在開發一款應用程序,只需在公司車隊中清點所有不同的iPhone,並且需要對其進行分類,否則您可能不需要知道它是3G還是3G,就好像它是否支持功能你想訪問。 使用AvailibilityMacros查找設備是否支持您需要的功能。 – mahboudz 2009-09-10 10:59:15

5

這是我在我的應用程序使用,它的偉大工程

NSString *deviceType = [UIDevice currentDevice].model; 
NSLog(@"DEVICE TYPE %@", deviceType); 

struct utsname systemInfo; 
uname(&systemInfo); 

    - (NSString *) platformString{ 
NSString *platform = [NSString stringWithCString:systemInfo.machine 
            encoding:NSUTF8StringEncoding];  
NSLog(@"type ...%@", platform); 


if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 1G"; 
if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G"; 
if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS"; 
if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; 
if ([platform isEqualToString:@"iPod1,1"])  return @"iPod Touch 1G"; 
if ([platform isEqualToString:@"iPod2,1"])  return @"iPod Touch 2G"; 
if ([platform isEqualToString:@"iPod3,1"])  return @"iPod Touch 3G"; 
if ([platform isEqualToString:@"iPod4,1"])  return @"iPod Touch 4G"; 
if ([platform isEqualToString:@"iPad1,1"])  return @"iPad"; 
if ([platform isEqualToString:@"iPad2,1"])  return @"iPad 2 (WiFi)"; 
if ([platform isEqualToString:@"iPad2,2"])  return @"iPad 2 (GSM)"; 
if ([platform isEqualToString:@"iPad2,3"])  return @"iPad 2 (CDMA)"; 
if ([platform isEqualToString:@"i386"])   return @"Simulator"; 
return platform; 
} 

希望它可以幫助

+1

嘿兄弟!這幫助了我!非常感謝 ! :) – 2012-05-15 08:13:48

0

我做了這個,它甚至可以顯示你的型號:

struct utsname systemInfo; 
    uname(&systemInfo); 

    NSString *modelName = [NSString stringWithCString:systemInfo.machine 
              encoding:NSUTF8StringEncoding]; 

    NSString *machinename = [NSString stringWithCString:systemInfo.machine 
               encoding:NSUTF8StringEncoding]; 


    NSString *modelnumber = @"Not listed"; 

    //Simulator 
    if([modelName isEqualToString:@"i386"] || [modelName isEqualToString:@"x86_64"]) { 
     modelName = @"iPhone Simulator"; 
     modelnumber = @"XXXXX"; 

    } 

    //iPhone 
    else if([modelName isEqualToString:@"iPhone1,1"]) { 
     modelName = @"iPhone"; 
     modelnumber = @"A1203"; 
    } 
    else if([modelName isEqualToString:@"iPhone1,2"]) { 
     modelName = @"iPhone 3G"; 
     modelnumber = @"A1241/A1324"; 
    } 
    else if([modelName isEqualToString:@"iPhone2,1"]) { 
     modelName = @"iPhone 3GS"; 
     modelnumber = @"A1303/A1325"; 
    } 
    else if([modelName isEqualToString:@"iPhone3,1"]) { 
     modelName = @"iPhone 4 (GSM)"; 
     modelnumber = @"A1332"; 
    } 
    else if([modelName isEqualToString:@"iPhone3,2"]) { 
     modelName = @"iPhone 4 GSM Rev A"; 
     modelnumber = @"Not listed"; 
    } 
    else if([modelName isEqualToString:@"iPhone3,3"]) { 
     modelName = @"iPhone 4 (CDMA)"; 
     modelnumber = @"A1349"; 
    } 
    else if([modelName isEqualToString:@"iPhone4,1"]) { 
     modelName = @"iPhone 4S"; 
     modelnumber = @"A1387/A1431"; 
    } 
    else if([modelName isEqualToString:@"iPhone5,1"]) { 
     modelName = @"iPhone 5 (GSM)"; 
     modelnumber = @"A1428"; 
    } 
    else if([modelName isEqualToString:@"iPhone5,2"]) { 
     modelName = @"iPhone 5 (GSM+CDMA)"; 
     modelnumber = @"A1429/A1442"; 
    } 

    //iPod touch 
    else if([modelName isEqualToString:@"iPod1,1"]) { 
     modelName = @"iPod touch 1G"; 
     modelnumber = @"A1213"; 
    } 
    else if([modelName isEqualToString:@"iPod2,1"]) { 
     modelName = @"iPod touch 2G"; 
     modelnumber = @"A1288"; 
    } 
    else if([modelName isEqualToString:@"iPod3,1"]) { 
     modelName = @"iPod touch 3G"; 
     modelnumber = @"A1318"; 
    } 
    else if([modelName isEqualToString:@"iPod4,1"]) { 
     modelName = @"iPod touch 4G"; 
     modelnumber = @"A1367"; 
    } 
    else if([modelName isEqualToString:@"iPod5,1"]) { 
     modelName = @"iPod touch 5G"; 
     modelnumber = @"A1421"; 
    } 

    //iPad 
    else if([modelName isEqualToString:@"iPad1,1"]) { 
     modelName = @"iPad 1G"; 
     modelnumber = @"A1219/A1337"; 
    } 
    else if([modelName isEqualToString:@"iPad2,1"]) { 
     modelName = @"iPad 2 (WiFi)"; 
     modelnumber = @"A1395"; 
    } 
    else if([modelName isEqualToString:@"iPad2,2"]) { 
     modelName = @"iPad 2 (GSM)"; 
     modelnumber = @"A1396"; 
    } 
    else if([modelName isEqualToString:@"iPad2,3"]) { 
     modelName = @"iPad 2 (CDMA)"; 
     modelnumber = @"A1397"; 
    } 
    else if([modelName isEqualToString:@"iPad2,4"]) { 
     modelName = @"iPad 2 (WiFi + Rev A)"; 
     modelnumber = @"A1395"; 
    } 
    else if([modelName isEqualToString:@"iPad3,1"]) { 
     modelName = @"iPad 3 (WiFi)"; 
     modelnumber = @"A1416"; 
    } 
    else if([modelName isEqualToString:@"iPad3,2"]) { 
     modelName = @"iPad 3 (GSM+CDMA)"; 
     modelnumber = @"A1403"; 
    } 
    else if([modelName isEqualToString:@"iPad3,3"]) { 
     modelName = @"iPad 3 (GSM)"; 
     modelnumber = @"A1430"; 
    } 
    else if([modelName isEqualToString:@"iPad3,4"]) { 
     modelName = @"iPad 4 (WiFi)"; 
     modelnumber = @"A1458"; 
    } 
    else if([modelName isEqualToString:@"iPad3,5"]) { 
     modelName = @"iPad 4 (GSM)"; 
     modelnumber = @"A1459"; 
    } 
    else if([modelName isEqualToString:@"iPad3,6"]) { 
     modelName = @"iPad 4 (GSM+CDMA)"; 
     modelnumber = @"A1460"; 
    } 

    //iPad mini 
    else if([modelName isEqualToString:@"iPad2,5"]) { 
     modelName = @"iPad mini (WiFi)"; 
     modelnumber = @"A1432"; 
    } 
    else if([modelName isEqualToString:@"iPad2,6"]) { 
     modelName = @"iPad mini (GSM)"; 
     modelnumber = @"A1454"; 
    } 
    else if([modelName isEqualToString:@"iPad2,7"]) { 
     modelName = @"iPad mini (GSM+CDMA)"; 
     modelnumber = @"A1455"; 
    } 

    //Apple TV, just for funn:) 
    else if([modelName isEqualToString:@"AppleTV2,1"]) { 
     modelName = @"Apple TV 2G"; 
     modelnumber = @"A1378"; 
    } 
    else if([modelName isEqualToString:@"AppleTV3,1"]) { 
     modelName = @"Apple TV 3G"; 
     modelnumber = @"A1427"; 
    } 
    else if([modelName isEqualToString:@"AppleTV3,2"]) { 
     modelName = @"Apple TV 3G (Rev A)"; 
     modelnumber = @"A1469"; 
    } 

    NSLog(@"Device model: %@/ %@ /%@",modelName,machinename,modelnumber); 
相關問題