2010-07-05 11 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에 놓고 모델 속성을 살펴보십시오. ** 편집 : ** 그러나 ... 문서에는 정확한 모델 번호가 포함되어 있지 않다고 제안되어 있습니다. –

답변

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"이라고 생각합니다. –

+0

+1 좋은 지적. 나는 지금 너무 피곤하지만, 내일 시험해보고 결과를 게시 할 것입니다. 아무도 나를 때리지 않으면 – SeniorShizzle

+0

hw.machine (및 hw.model)을 사용합니다. iPhone1,1은 "원래 iPhone"또는 "iPhone 2G"(비공식적)라고도하며 Apple은 "iPod Touch 2 세대"및 "iPod Touch 3 세대"를 나열합니다.이 중 하나는 여기에 누락되어 있습니다 (아마도 iPod2,2) –

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

+0

간단합니다 ... 마지막 'if else'를 추가 할 수 있습니다 else {modelName = @ "iPhone 5";} –

+1

'else' 대신'if'를 사용하지 마십시오 for iPhone 5. 알 수없는 모든 장치가 iPhone 5라고 잘못 대체됩니다. – kirb

1

이 코드를 사용하여 iPhone OS 버전을 감지 할 수 있습니다. float 버전 = [[[UIDevice currentDevice] systemVersion] floatValue];

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