Мое приложение для iPhone (http://hexalex.com) не универсально, но у него есть функция, которую я бы хотел включить для людей, играющих на iPad, Есть ли способ обнаружить, что вы работаете на iPad в режиме совместимости? Методы UIDevice для определения характеристик машины возвращают значения, которые вы получите на iPhone (по крайней мере, на симуляторе). Единственное, о чем я могу думать, это обнаружить OS 3.2, но эта техника не будет работать долго.
Обнаружение приложения iPhone на iPad в режиме совместимости
Ответ 1
Первоначально ответил здесь: fooobar.com/questions/514202/...
Отправлено с момента его короткого замыкания:
Если приложение является iPhone-приложением, запущенным в режиме эмулятора на iPad, оно будет иметь пользовательский интерфейс телефона, но тип модели iPad. Вы можете проверить это с помощью следующего кода:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone &&
[[[UIDevice currentDevice] model] hasPrefix:@"iPad"]) {
// This app is an iPhone app running on an iPad
}
Ответ 2
1) Используйте UIDevice-Extension, написанную Эрикой Садун. Очень полный класс: http://github.com/erica/uidevice-extension/blob/master/UIDevice-Hardware.m
2) Или вы также можете использовать метод класса UIDevice:
[[UIDevice currentDevice] name] // eg. "Brock iPhone"
[[UIDevice currentDevice] model] // eg. @"iPhone", @"iPod Touch"
[[UIDevice currentDevice] localizedModel] // localized version of model
[[UIDevice currentDevice] systemName] // eg. @"iPhone OS"
[[UIDevice currentDevice] systemVersion] // eg. @"3.2"
[[UIDevice currentDevice] uniqueIdentifier] // UDID, a unique string to identify the device
Каждая из вышеперечисленных строк вернет NSString
. Для этого вы можете выполнить сравнение строк следующим образом:
NSString *model = [[UIDevice currentDevice] model];
NSLog(@"Current device model: \"%@\"", model);
3) Еще один способ:
http://www.drobnik.com/touch/2009/07/determining-the-hardware-model/ Вам нужно будет изменить это, чтобы использовать правильный аппаратный номер для iPad. Взято по ссылке выше:
UIDevice-hardware.h
#import
#define IPHONE_1G_NAMESTRING @"iPhone 1G"
#define IPHONE_3G_NAMESTRING @"iPhone 3G"
#define IPHONE_3GS_NAMESTRING @"iPhone 3GS"
#define IPOD_1G_NAMESTRING @"iPod touch 1G"
#define IPOD_2G_NAMESTRING @"iPod touch 2G"
@interface UIDevice (Hardware)
- (NSString *) platform;
- (NSString *) platformString;
@end
UIDevice-hardware.m
#import "UIDevice-hardware.h"
#include <sys/types.h>
#include <sys/sysctl.h>
@implementation UIDevice (Hardware)
/*
Platforms
iPhone1,1 = iPhone 1G
iPhone1,2 = iPhone 3G
iPhone2,1 = iPhone 3GS
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];
free(machine);
return platform;
}
- (NSString *) platformString
{
NSString *platform = [self platform];
if ([platform isEqualToString:@"iPhone1,1"]) return IPHONE_1G_NAMESTRING;
if ([platform isEqualToString:@"iPhone1,2"]) return IPHONE_3G_NAMESTRING;
if ([platform isEqualToString:@"iPhone2,1"]) return IPHONE_3GS_NAMESTRING;
if ([platform isEqualToString:@"iPod1,1"]) return IPOD_1G_NAMESTRING;
if ([platform isEqualToString:@"iPod2,1"]) return IPOD_2G_NAMESTRING;
return NULL;
}
@end
Ответ 3
Вы проверили "UIDevice.h"? У этого есть свойство модели, которое u может узнать iPhone, iPod, iPad устройства
NSString * name;// например "Мой iPhone"
Модель NSString *;// например @ "iPhone", "iPod Touch"
NSString * localizedModel;// локализованная версия модели
NSString * systemName;// например @ "iPhone OS"
NSString * systemVersion;// например @ "2,0"
NSString * uniqueIdentifier; (DEPRECATED)//a строка, уникальная для каждого устройства на основе различная информация об оборудовании.