특정 iPhone / iPod touch 모델 감지
중복 가능성 :
iOS로 기기 (iPhone, iPod Touch) 확인
저는 iPhone (그리고 아마도 iPod touch 2 세대)의 P2P 블루투스 기능을 활용하는 게임을 만들고 있습니다. 그러나 사용자가 iPod 1 세대 및 iPhone 2G에서 멀티 플레이어를 플레이하지 못하도록하려면 특정 장치 모델을 확인해야합니다.
[[UIDevice currentDevice] 모델]은 장치가 "iPhone"인지 "iPod touch"인지 만 알려줍니다. "iPhone 3GS", "iPod touch 1st generation"등과 같은 특정 장치 모델을 확인하는 방법이 있습니까?
편집하다:
특정 장치 모델을 가져 오기 위해 다음 코드를 사용하는 UIDevice 범주가 있습니다 (Erica Sadun이 만든 것 같습니다. 여기에서 다른 유용한 항목과 함께 전체 카테고리를 찾을 수 있습니다. https://github.com/erica/uidevice-extension
#include <sys/types.h>
#include <sys/sysctl.h>
@implementation UIDevice (Hardware)
/*
Platforms
iPhone1,1 -> iPhone 1G
iPhone1,2 -> iPhone 3G
iPod1,1 -> iPod touch 1G
iPod2,1 -> iPod touch 2G
*/
- (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 encoding:NSUTF8StringEncoding];
free(machine);
return platform;
}
이것은 작동하고 이것을 사용하는 앱은 최근 AppStore에서 승인되었습니다.
가장 완전한 UIDevice (하드웨어) 범주는 아마도 http://github.com/erica/uidevice-extension/(Erica Sadun 제공)입니다.
[[UIDevice currentDevice] platformType] // ex: UIDevice4GiPhone
[[UIDevice currentDevice] platformString] // ex: @"iPhone 4G"
uname에서 사용하여 장치 모델 번호를 얻을 수 있습니다 sys/utsname.h. 예를 들면 :
#import <sys/utsname.h>
NSString*
machineName()
{
struct utsname systemInfo;
uname(&systemInfo);
return [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
}
결과는 다음과 같아야합니다.
시뮬레이터의 @ "i386" iPod Touch의 @ "iPod1,1" iPod Touch 2 세대의 @ "iPod2,1" iPod Touch 3 세대의 @ "iPod3,1" @"iPod4,1" on iPod Touch Fourth Generation @"iPhone1,1" on iPhone @"iPhone1,2" on iPhone 3G @"iPhone2,1" on iPhone 3GS @"iPad1,1" on iPad @"iPad2,1" on iPad 2 @"iPad3,1" on iPad 3 (aka new iPad) @"iPhone3,1" on iPhone 4 @"iPhone4,1" on iPhone 4S @"iPhone5,1" on iPhone 5 @"iPhone5,2" on iPhone 5
How about this code, if new version was released, you will identifier with the last know device
#include <sys/types.h>
#include <sys/sysctl.h>
- (NSString *)getModel {
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *model = malloc(size);
sysctlbyname("hw.machine", model, &size, NULL, 0);
NSString *sDeviceModel = [NSString stringWithCString:model encoding:NSUTF8StringEncoding];
free(model);
if ([sDeviceModel isEqual:@"i386"]) return @"Simulator"; //iPhone Simulator
if ([sDeviceModel isEqual:@"iPhone1,1"]) return @"iPhone1G"; //iPhone 1G
if ([sDeviceModel isEqual:@"iPhone1,2"]) return @"iPhone3G"; //iPhone 3G
if ([sDeviceModel isEqual:@"iPhone2,1"]) return @"iPhone3GS"; //iPhone 3GS
if ([sDeviceModel isEqual:@"iPhone3,1"]) return @"iPhone4 AT&T"; //iPhone 4 - AT&T
if ([sDeviceModel isEqual:@"iPhone3,2"]) return @"iPhone4 Other"; //iPhone 4 - Other carrier
if ([sDeviceModel isEqual:@"iPhone3,3"]) return @"iPhone4"; //iPhone 4 - Other carrier
if ([sDeviceModel isEqual:@"iPhone4,1"]) return @"iPhone4S"; //iPhone 4S
if ([sDeviceModel isEqual:@"iPhone5,1"]) return @"iPhone5"; //iPhone 5 (GSM)
if ([sDeviceModel isEqual:@"iPod1,1"]) return @"iPod1stGen"; //iPod Touch 1G
if ([sDeviceModel isEqual:@"iPod2,1"]) return @"iPod2ndGen"; //iPod Touch 2G
if ([sDeviceModel isEqual:@"iPod3,1"]) return @"iPod3rdGen"; //iPod Touch 3G
if ([sDeviceModel isEqual:@"iPod4,1"]) return @"iPod4thGen"; //iPod Touch 4G
if ([sDeviceModel isEqual:@"iPad1,1"]) return @"iPadWiFi"; //iPad Wifi
if ([sDeviceModel isEqual:@"iPad1,2"]) return @"iPad3G"; //iPad 3G
if ([sDeviceModel isEqual:@"iPad2,1"]) return @"iPad2"; //iPad 2 (WiFi)
if ([sDeviceModel isEqual:@"iPad2,2"]) return @"iPad2"; //iPad 2 (GSM)
if ([sDeviceModel isEqual:@"iPad2,3"]) return @"iPad2"; //iPad 2 (CDMA)
NSString *aux = [[sDeviceModel componentsSeparatedByString:@","] objectAtIndex:0];
//If a newer version exist
if ([aux rangeOfString:@"iPhone"].location!=NSNotFound) {
int version = [[aux stringByReplacingOccurrencesOfString:@"iPhone" withString:@""] intValue];
if (version == 3) return @"iPhone4"
if (version >= 4) return @"iPhone4s";
}
if ([aux rangeOfString:@"iPod"].location!=NSNotFound) {
int version = [[aux stringByReplacingOccurrencesOfString:@"iPod" withString:@""] intValue];
if (version >=4) return @"iPod4thGen";
}
if ([aux rangeOfString:@"iPad"].location!=NSNotFound) {
int version = [[aux stringByReplacingOccurrencesOfString:@"iPad" withString:@""] intValue];
if (version ==1) return @"iPad3G";
if (version >=2) return @"iPad2";
}
//If none was found, send the original string
return sDeviceModel;
}
BOOL hasHighResScreen = NO;
if ([UIScreen instancesRespondToSelector:@selector(scale)]) {
CGFloat scale = [[UIScreen mainScreen] scale];
if (scale > 1.0) {
hasHighResScreen = YES;
}
}
iPhone 4 is iPhone3,1 and iPhone3,2
iPhone 4S is iPhone4,1
iPad 2 is iPad2,1 iPad2,2 and iPad2,3 depending on version (GSM etc)
iPad 3 is iPad3,1 iPad3,2 and iPad3,3 depending on version (GSM etc)
See Iphone secrets (scroll down to "internal product codes")
Another good source is: everyiphone.com
NSString* valueDevice = [[UIDevice currentDevice] model];
and then check if the string is equal to whatever device you are looking for like :
if(value==@"iPod1,1" )
{}
and you should be good to go
참고URL : https://stackoverflow.com/questions/1108859/detect-the-specific-iphone-ipod-touch-model
'IT박스' 카테고리의 다른 글
| SMTP를 사용하여 Python에서 메일 보내기 (0) | 2020.08.09 |
|---|---|
| PHP에서 int의 최대 값은 얼마입니까? (0) | 2020.08.09 |
| iOS 앱에 키보드가 있는지 프로그래밍 방식으로 어떻게 확인할 수 있습니까? (0) | 2020.08.09 |
| 제목 배경색 설정 (0) | 2020.08.09 |
| 피클 또는 JSON? (0) | 2020.08.09 |