La mia app per iPhone (http://hexalex.com) non è universale ma ha una funzione che vorrei abilitare per le persone che giocano su iPad. C'è un modo per rilevare che stai correndo su un iPad in modalità compatibilità? I metodi UIDevice per il rilevamento delle specifiche della macchina restituiscono tutti i valori che si otterrebbero su un iPhone (almeno sul simulatore). L'unica cosa che posso pensare è rilevare il SO 3.2, ma quella tecnica non funzionerà a lungo.rilevamento di un'app per iPhone in esecuzione su iPad in modalità compatibilità
risposta
Originariamente risposto qui: https://stackoverflow.com/a/14864400/577237
Ripubblicato dal momento che è così breve:
Se l'applicazione è un'applicazione per iPhone in esecuzione in modalità emulatore su un iPad, avrà un userInterfaceIdiom di telefono, ma un modello di iPad. È possibile controllare questo con il seguente codice:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone &&
[[[UIDevice currentDevice] model] hasPrefix:@"iPad"]) {
// This app is an iPhone app running on an iPad
}
il tuo codice non è corretto. UI_USER_INTERFACE_IDIOM() sarà uguale a ipad per l'app per iPhone in esecuzione su iPad. – SpaceDog
@RubberDuck Devo essere in disaccordo con la vostra valutazione. Ho creato un'applicazione di test per testare questa funzionalità: https://github.com/michaelpatzer/TestEmulationMode –
questo è strano perché nella tua app il comportamento è quello previsto ma in due app mie, vedo iPad come idioma! WTF !!!! – SpaceDog
1) Usa UIDevice-Extension scritto da Erica Sadun. Una classe molto completo: http://github.com/erica/uidevice-extension/blob/master/UIDevice-Hardware.m
2) Oppure si potrebbe anche utilizzare il metodo di UIDevice classe:
[[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
Ciascuna delle linee di cui sopra restituirà un NSString
. Per cui si può fare un confronto tra stringhe in questo modo:
NSString *model = [[UIDevice currentDevice] model];
NSLog(@"Current device model: \"%@\"", model);
3) Un altro modo:
http://www.drobnik.com/touch/2009/07/determining-the-hardware-model/ Sarà necessario modificare questo di utilizzare il numero giusto hardware per l'iPad. Preso dal link qui sopra:
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
Non ho un iPad da testare, ma nel simulatore iPad' [[UIDevice currentDevice] model] 'restituisce' iPhone Simulator', non 'iPad Simulator'. Presumo che restituirà 'iPhone' invece di' iPad' quando è in esecuzione sul dispositivo. È un ambiente emulato per iPhone, quindi non è una sorpresa. La sysctl 'hw.machine' è un suggerimento interessante, ma sul simulatore iPad restituisce semplicemente' i386'. Sai cosa restituisce sull'iPad quando si esegue un'app per iPhone non universale? – n8gray
Non è necessario verificare questo sul simulatore. Hai bisogno di un dispositivo reale, altrimenti come fai a sapere che cosa succede nell'ambiente di campo? –
Hai controllato la "UIDevice.h"? Ha una proprietà di modello che puoi trovare su iPhone, iPod, dispositivi iPad
NSString * nome; // ad es. "My iPhone"
NSString * modello; // ad es. @ "iPhone", @ "iPod Touch"
NSString * localizedModel; // versione localizzata del modello
NSString * systemName; // ad es. @ "Sistema operativo iPhone"
NSString * systemVersion; // ad es. @ "2.0"
NSString * uniqueIdentifier; (DEPRECATED) // a stringa univoca per ogni dispositivo basata su varie informazioni sull'hardware.
Non ho un iPad da testare, ma nel simulatore iPad '[[UIDevice currentDevice] model]' restituisce 'iPhone Simulator', non' iPad Simulator'. – n8gray
Stampo [[UIDevice currentDevice] model] e mi ha restituito "iPad" :) –
@ n8gray: sì il simulatore è limitato. funziona solo su dispositivi iOS. –
- 1. Modalità orizzontale SOLO per iPhone o iPad
- 2. Esecuzione di app IPhone in modalità Sospensione
- 3. Simulatore in esecuzione in modalità ridimensionamento per iPhone 6 Plus?
- 4. Rilevamento formato disattivato per l'applicazione web iPhone/iPad non funzionante
- 5. CGBitmapContextCreate su iPhone/iPad
- 6. Rilevamento del colore di iPhone/iPad/iPod touch?
- 7. IE8 forzato in modalità compatibilità
- 8. Terminato in esecuzione su iPhone
- 9. Controllare se iPad è in modalità silenziosa
- 10. Controlli sovrapposti per video su iPhone/iPad
- 11. Installa .IPA costruito per iPad su iPhone
- 12. scalesPageToFit non funziona correttamente in esecuzione un'applicazione per iPhone su iPad (iOS 7)
- 13. Sovrapposizione MPMoviePlayer in modalità schermo intero (iPad)
- 14. Qt per iPhone/iPad?
- 15. Disabilitare il tasto home su iPhone/iPad
- 16. JavaFX per iphone ipad
- 17. storyboard separate per iPhone/iPhone Retina/iPad/iPad Retina
- 18. Testare le app per iphone in ipad?
- 19. L'acquisto in-app funziona su iPhone ma non su iPad
- 20. Creazione di grafici su un iPad/iPhone
- 21. Problemi di esecuzione di strumenti su iPad
- 22. Forza IE9 in modalità compatibilità utilizzando javascript
- 23. rilevamento occhi occhi per iphone sdk
- 24. È possibile recuperare le applicazioni attualmente in esecuzione su iPhone e iPad
- 25. Disegno di una linea in iPhone/iPad
- 26. Test di app iPhone 5 (4 ") su iPad 3
- 27. iphone a ipad, iphone 4 problemi uialertview
- 28. Default Tastiera AlphaNumeric iPad in modalità numerica
- 29. Problemi con AVCaptureSession in modalità orizzontale su iPad
- 30. Tasti di scelta rapida per iPhone/iPad?
Che cosa si intende per modalità "compatibilità"? Questo è iOS, non Windows XP. –
Quando si esegue un'app per iPhone non universale su un iPad, viene eseguito in un ambiente emulato per iPhone. Dovrai scusarmi per non aver saputo il termine esatto per questo. – n8gray
Sì. Le app per iPhone funzionano su iPad. In quel caso sai già che hai costruito un'app per iPhone, devi solo verificare se stai navigando su iPad, vedere la mia risposta. –