2010-07-05 106 views
11

如何檢測用戶是否在iPhone 4或3G/3GS上運行應用程序?iPhone - 如何檢測iPhone版本?

我需要檢測硬件,而不是iOS版本。

感謝您的任何幫助。

+0

您可以撥打[currentDevice](http://developer.apple.com/iphone/library/documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/doc/uid/TP40006902 -CH3-SW10)在UIDevice上查看模型屬性。 **編輯:**雖然...文檔建議這不包括確切的型號。 – 2010-07-05 07:09:17

回答

11

隨意使用這個類 - 我發現它here

使用

UIDeviceHardware *h=[[UIDeviceHardware alloc] init]; 
[self setDeviceModel:[h platformString]]; 
[h release]; 

UIDeviceHardware.h

// 
// UIDeviceHardware.h 
// 
// Used to determine EXACT version of device software is running on. 

#import <Foundation/Foundation.h> 

@interface UIDeviceHardware : NSObject 

- (NSString *) platform; 
- (NSString *) platformString; 

@end 

UIDeviceHardware.m

// 
// UIDeviceHardware.m 
// 
// Used to determine EXACT version of device software is running on. 

#import "UIDeviceHardware.h" 
#include <sys/types.h> 
#include <sys/sysctl.h> 

@implementation UIDeviceHardware 

- (NSString *) platform{ 
    size_t size; 
    sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
    char *machine = malloc(size); 
    sysctlbyname("hw.machine", machine, &size, NULL, 0); 
    NSString *platform = [NSString stringWithCString:machine]; 
    free(machine); 
    return platform; 
} 

- (NSString *) platformString{ 
    NSString *platform = [self 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:@"iPod1,1"]) return @"iPod Touch 1G"; 
    if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G"; 
    if ([platform isEqualToString:@"i386"]) return @"iPhone Simulator"; 
    return platform; 
} 

@end 
+1

比我的回答要好得多,但有人需要在iPhone 4上運行此功能,並查看該機型的機器字符串。 我認爲這可能是「iPhone3,1」。 – 2010-07-05 07:28:07

+0

+1好點。我現在太累了,但我會明天嘗試併發布結果 - 除非有人打我 – SeniorShizzle 2010-07-05 07:38:18

+0

我只是使用hw.machine(和hw.model)。 iPhone1,1也被稱爲「原始iPhone」或「iPhone 2G」(非官方),Apple列出了「iPod Touch第二代」和「iPod Touch第三代」,其中一個在此處不存在(可能是iPod2,2), – 2010-07-05 12:01:34

6
#import <sys/utsname.h> 

+ (NSString*)deviceModelName { 

     struct utsname systemInfo; 

     uname(&systemInfo); 

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

     if([modelName isEqualToString:@"i386"]) { 
      modelName = @"iPhone Simulator"; 
     } 
     else if([modelName isEqualToString:@"iPhone1,1"]) { 
      modelName = @"iPhone"; 
     } 
     else if([modelName isEqualToString:@"iPhone1,2"]) { 
      modelName = @"iPhone 3G"; 
     } 
     else if([modelName isEqualToString:@"iPhone2,1"]) { 
      modelName = @"iPhone 3GS"; 
     } 
     else if([modelName isEqualToString:@"iPhone3,1"]) { 
      modelName = @"iPhone 4"; 
     } 
     else if([modelName isEqualToString:@"iPhone4,1"]) { 
      modelName = @"iPhone 4S"; 
     } 
     else if([modelName isEqualToString:@"iPod1,1"]) { 
      modelName = @"iPod 1st Gen"; 
     } 
     else if([modelName isEqualToString:@"iPod2,1"]) { 
      modelName = @"iPod 2nd Gen"; 
     } 
     else if([modelName isEqualToString:@"iPod3,1"]) { 
      modelName = @"iPod 3rd Gen"; 
     } 
     else if([modelName isEqualToString:@"iPad1,1"]) { 
      modelName = @"iPad"; 
     } 
     else if([modelName isEqualToString:@"iPad2,1"]) { 
      modelName = @"iPad 2(WiFi)"; 
     } 
     else if([modelName isEqualToString:@"iPad2,2"]) { 
      modelName = @"iPad 2(GSM)"; 
     } 
     else if([modelName isEqualToString:@"iPad2,3"]) { 
      modelName = @"iPad 2(CDMA)"; 
     } 

     return modelName; 
    } 
+0

您的代碼缺少iPhone 5 – SpaceDog 2012-09-20 15:59:12

+0

這很簡單...在最後一個'if else'之後,您可以添加其他{modelName = @「iPhone 5」;} – 2012-09-21 05:38:20

+1

如果沒有'if'則不要使用'else' iPhone 5.任何未知設備都會錯誤地回退到稱爲iPhone 5. – kirb 2012-12-10 14:53:03

1

您可以使用此代碼檢測iPhone操作系統版本。 float version = [[[UIDevice currentDevice] systemVersion] floatValue];

if (version >= 3.0) { 
    // Only executes on version 3 or above. 
}