Mi aplicación para iPhone (http://hexalex.com) no es universal pero tiene una función que me gustaría habilitar para las personas que juegan en iPads. ¿Hay alguna manera de detectar que estás ejecutando en un iPad en modo compatibilidad? Los métodos de UIDevice para detectar especificaciones de máquina devuelven todos los valores que obtendría en un iPhone (al menos en el simulador). Lo único que se me ocurre es detectar OS 3.2, pero esa técnica no funcionará por mucho tiempo.detección de la aplicación para iPhone que se ejecuta en iPad en modo compatibilidad
Respuesta
Originalmente contestado aquí: https://stackoverflow.com/a/14864400/577237
Republicado ya que es muy corta:
Si la aplicación es una aplicación de iPhone que se ejecuta en el modo emulador en un iPad, que tendrá un userInterfaceIdiom de teléfono, pero un tipo de modelo de iPad. Puede verificar esto con el siguiente código:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone &&
[[[UIDevice currentDevice] model] hasPrefix:@"iPad"]) {
// This app is an iPhone app running on an iPad
}
su código es incorrecto. UI_USER_INTERFACE_IDIOM() será igual a iPad para la aplicación iPhone que se ejecuta en iPad. – SpaceDog
@RubberDuck No estoy de acuerdo con su evaluación. Creé una aplicación de prueba para probar esta funcionalidad: https://github.com/michaelpatzer/TestEmulationMode –
esto es extraño porque en tu aplicación el comportamiento es el esperado, pero en dos aplicaciones mías, veo el iPad como el ¡idioma! WTF !!!! – SpaceDog
1) Use UIDevice-Extension escrito por Erica Sadun. Una clase muy amplia: http://github.com/erica/uidevice-extension/blob/master/UIDevice-Hardware.m
2) O también se podría utilizar el método UIDevice clase:
[[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
Cada una de las líneas de arriba, devolverá un NSString
. A lo que se puede hacer una comparación de cadenas de este modo:
NSString *model = [[UIDevice currentDevice] model];
NSLog(@"Current device model: \"%@\"", model);
3) Otra forma:
http://www.drobnik.com/touch/2009/07/determining-the-hardware-model/ Usted tendrá que modificar esto para utilizar el número de hardware adecuado para el IPAD. Tomado del foro:
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
No tengo un iPad para probar, pero en el simulador de iPad' [[UIDevice currentDevice] model] 'devuelve' iPhone Simulator', no 'iPad Simulator'. Supongo que devolverá 'iPhone' en lugar de' iPad' cuando se ejecute en el dispositivo. Es un entorno de iPhone emulado, así que esto no es una sorpresa. El 'hw.machine' sysctl es una sugerencia interesante, pero en el simulador de iPad simplemente devuelve' i386'. ¿Sabes lo que devuelve en el iPad cuando ejecutas una aplicación de iPhone no universal? – n8gray
No debería necesitar probar esto en el simulador. Necesitas un dispositivo real; de lo contrario, ¿cómo vas a saber qué sucede en el entorno de campo? –
¿verificó la "UIDevice.h"? Tiene propiedad de modelo que puede encontrar en los dispositivos iPhone, iPod, iPad
NSString * name; // p. Ej. "Mi iPhone"
NSString * modelo; // p. Ej. @ "iPhone", @ "iPod Touch"
NSString * localizedModel; // versión localizada del modelo
NSString * systemName; // p. Ej. @ "iPhone OS"
NSString * systemVersion; // p. Ej. @ "2.0"
NSString * uniqueIdentifier; (DEPRECATED) // una cadena única para cada dispositivo basada en diversa información de hardware.
No tengo un iPad para probar, pero en el simulador de iPad '[[UIDevice currentDevice] model]' devuelve 'iPhone Simulator', no' iPad Simulator'. – n8gray
Imprimo el [[UIDevice currentDevice] modelo] y me devolvió "iPad" :) –
@ n8gray: sí el simulador es limitado. solo funciona en dispositivos iOS. –
- 1. Es un programa que se ejecuta en modo de compatibilidad
- 2. Ejecuta una aplicación universal como una aplicación de iPhone "heredada" en un iPad
- 3. API para determinar si se ejecuta en iPhone o iPad
- 4. El control WebBrowser de MSIE alojado en la aplicación winforms se ejecuta en modo de compatibilidad
- 5. Detección de formato desactivado para la aplicación de iPhone/iPad que no funciona
- 6. Desarrollo iOS: ¿Cómo puedo evitar que un iPad ejecute una aplicación universal en el modo iPad?
- 7. Modo Paisaje SOLAMENTE para iPhone o iPad
- 8. ¿Ejecuta la aplicación solo en modo Paisaje?
- 9. Sincronización en la nube entre la aplicación para iPad/iPhone
- 10. WCF alojado en una aplicación web y modo de compatibilidad
- 11. iOS aplicación que se ejecuta en dos pantallas (sin duplicación)
- 12. Detección del script shell que se ejecuta en Cygwin
- 13. ¿Cómo ver los datos en el archivo sqlite que se ejecuta en la aplicación iphone?
- 14. Aplicación que se ejecuta en segundo plano
- 15. iPhone - Cambio de la configuración de la aplicación mientras la aplicación se ejecuta en segundo plano
- 16. Desactivar el modo inactivo mientras se ejecuta la aplicación iOS
- 17. Cambiar el modo UIImageView iPhone/iPad
- 18. detectar iPad 2x botón para la aplicación de iPhone
- 19. ¿Versiones para iPhone y iPad de la misma aplicación?
- 20. Cómo portar una aplicación para iPhone en el iPad (Storyboard)
- 21. Cómo hacer que el Modo nocturno se muestre en la aplicación de iPhone
- 22. JavaFX para iphone ipad
- 23. rss leer la aplicación iphone/ipad
- 24. ¿Cuál es el código para detectar si la aplicación ios se ejecuta en la pantalla Retina de iPhone, iPhone o iPad?
- 25. Detección de compatibilidad con el mouse
- 26. Detección de escala de zoom de iPad
- 27. Creación/prueba de una aplicación universal para iPhone/iPad
- 28. Cómo implementar la aplicación del teléfono en el ipad/iphone
- 29. Aplicación de iPhone que ejecuta Simulator 4.0 recibió Sigkill
- 30. hoja de estilo CSS diferente para iPad y iPhone en la aplicación universal
¿Qué quiere decir con el modo "compatibilidad"? Esto es iOS, no Windows XP. –
Cuando ejecuta una aplicación de iPhone no universal en un iPad, se ejecuta en un entorno de iPhone emulado. Tendrás que disculparme por no saber el término exacto para ello. – n8gray
Sí. Las aplicaciones de iPhone se ejecutan en el iPad. En ese caso, ya sabes que construiste una aplicación para iPhone, solo tienes que comprobar si estás ejecutando en el iPad, ver mi respuesta. –