обнаружение приложения iPhone на iPad в режиме совместимости - PullRequest
11 голосов
/ 14 июля 2010

Приложение для iPhone не является универсальным, но в нем есть функция, которую я хотел бы включить для людей, играющих на iPad. Есть ли способ определить, что вы работаете на iPad в режиме совместимости? Все методы UIDevice для определения технических характеристик машины возвращают значения, которые вы получите на iPhone (по крайней мере на симуляторе). Единственное, о чем я могу думать, - это обнаружение ОС 3.2, но этот метод не будет работать долго.

Ответы [ 4 ]

20 голосов
/ 14 февраля 2013

Первоначально ответили здесь: https://stackoverflow.com/a/14864400/577237

Повторно отправлено, поскольку оно очень короткое:

Если приложение представляет собой приложение для iPhone, работающее в режиме эмулятора на iPad, оно будет иметь userInterfaceIdiom изТелефон, но модель iPad типа.Вы можете проверить это с помощью следующего кода:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone &&
    [[[UIDevice currentDevice] model] hasPrefix:@"iPad"]) {
    // This app is an iPhone app running on an iPad
}
9 голосов
/ 14 июля 2010

1) Использование UIDevice-Extension , написанное Эрикой Садун. Очень всеобъемлющий класс: http://github.com/erica/uidevice-extension/blob/master/UIDevice-Hardware.m

2) Или вы также можете использовать метод класса UIDevice :

[[UIDevice currentDevice] name]              // eg. "Brock's 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, &amp;size, NULL, 0);
 char *machine = malloc(size);
 sysctlbyname("hw.machine", machine, &amp;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 голосов
/ 14 июля 2010

Вы проверяли "UIDevice.h"? У него есть свойство модели, которое вы можете узнать на устройствах iPhone, iPod, iPad

NSString * имя; // например "Мой iPhone"

NSString * модель; // например @ "iPhone", @ "iPod Touch"

NSString * localizedModel; // локализованная версия модели

NSString * systemName; // например @ "iPhone OS"

NSString * systemVersion; // например @ "2,0"

NSString * uniqueIdentifier; (УСТАРЕЛО) // a строка уникальная для каждого устройства на основе различная информация об оборудовании.

0 голосов
/ 21 июля 2018

Если вам необходимо узнать, используете ли вы приложение iPhone на iPad, чтобы вы могли масштабировать интерфейс до размера iPhone 4S, стоит отметить, что приложения iPhone, работающие на 12,9-дюймовом iPad, представлены в размере iPhone SE. Добавление проверки масштаба главного экрана разрешит эту проблему.

var isSmalliPhoneAppRunningOniPad: Bool {
    return UIDevice.current.userInterfaceIdiom == .phone &&
           UIDevice.current.model.hasPrefix("iPad") && 
           UIScreen.main.scale == 2
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...