11
votes

Détection de l'application iPhone exécutée sur iPad en mode compatibilité

Mon iPhone App n'est pas universel, mais elle dispose d'une fonctionnalité que j'aimerais activer pour les personnes jouant sur des iPads. Y a-t-il un moyen de détecter que vous exécutez sur un iPad en mode de compatibilité? Les méthodes Uidevice pour détecter les spécifications de la machine renvoient toutes les valeurs que vous obtiendriez sur un iPhone (sur le simulateur au moins). La seule chose à laquelle je puisse penser, c'est la détection du système d'exploitation 3.2, mais cette technique ne fonctionnera pas longtemps.


6 commentaires

Qu'entendez-vous par «compatibilité» en mode? Ceci est iOS, pas Windows XP.


Lorsque vous exécutez une application iPhone non universelle sur un iPad, il circule dans un environnement iPhone émulé. Vous devrez vous excuser pour ne pas connaître le terme exact.


Oui. Les applications iPhone fonctionnent sur l'iPad. Dans ce cas, vous savez déjà que vous avez construit une application iPhone, il vous suffit de vérifier si votre exécution sur l'iPad, vois ma réponse.


Pourriez-je également ajouter que l'activation des fonctionnalités iPad dans une cible de l'application iPhone semble stupide. Pourquoi ne le faites-vous pas correctement et faites-vous l'application iPhone un binaire universel (iPad + iPhone)?


Voyons, construisons une nouvelle application universelle implique de faire la décision d'entreprise de renoncer à des versions iPhone / iPad distinctes, d'acheter un périphérique matériel de 500 $ pour les tests et de retravailler complètement mon interface utilisateur avec tout le QA nécessaire implique. L'activation d'une fonctionnalité consiste à obtenir la réponse à une question et à écrire deux ou trois lignes de code. Lequel devrais-je faire avant de soumettre ma mise à jour demain?


Quelques années après le fait, mais la documentation d'Apple appelle ce "mode de compatibilité". Vérifiez sous la rubrique "Créer des applications universelles" dans ce docteur doc: Note technique TN2264 où il est écrit: "Applications iPhone en mode compatibilité sur iPad ..."


4 Réponses :


9
votes

1) Utilisez Uidevice-Extension écrit par Erica SADUN. Une classe très complète: http://github.com/erica/uidevice-extension/blob /master/uidevice-hardware.m

2) ou vous pouvez également utiliser la méthode de la classe uidevice : xxx < / Pré>

Chacune des lignes ci-dessus retournera un nstring . À laquelle vous pouvez faire une comparaison de chaînes comme: xxx

3) une autre manière :

http://www.drobnik.com/touch/2009/07/determinure-Le -Hardware-Model / Vous devrez modifier cela pour utiliser le bon numéro de matériel pour l'iPad. Extrait du lien ci-dessus:

uidevice-hardware.h xxx

uidevice-matériel.m xxx


2 commentaires

Je n'ai pas d'iPad à tester, mais dans l'iPad Simulator [[[Uidevice CurrentDevice] Modèle] renvoie iPhone Simulator , pas iPad Simulator . Je suppose qu'il retournera iPhone au lieu de iPad lors de l'exécution de l'appareil. C'est un environnement iPhone émulé, donc ce n'est pas une surprise. Le SYSCTL HW.MACHINE est une suggestion intéressante, mais sur le simulateur iPad, il vient de retourner i386 . Savez-vous ce qu'il retourne sur l'iPad lors de l'exécution d'une application iPhone non universelle?


Vous ne devriez pas nécessiter de tester cela sur le simulateur. Vous avez besoin d'un véritable appareil, sinon comment allez-vous savoir à ce que WTThat se produit dans l'environnement de terrain?



3
votes

Avez-vous vérifié le "Uidevice.h"? Il possède une propriété modèle que vous pouvez trouver l'iPhone, l'iPod, les périphériques iPad

nstring * nom; // par exemple. "Mon iPhone"

Nstring * modèle; // par exemple. @ "iPhone", @ "iPod touch"

nsstring * localisémodel; // Version localisée du modèle

nstring * nom système; // par exemple. @ "iPhone OS"

nstring * SystemVersion; // par exemple. @ "2.0"

Nstring * UniqueIdentifier; (obsolète) // a chaîne unique à chaque périphérique basé sur Diverses informations matérielles.


4 commentaires

Je n'ai pas d'iPad à tester, mais dans l'iPad Simulator [[[Uidevice CurrentDevice] Modèle] renvoie iPhone Simulator , pas iPad Simulator .


Je imprime [[Uidevice CurrentDevice] Modèle] et cela m'a renvoyé "ipad" :)


@ N8Gray: Oui Simulator est limité. ne fonctionne que sur les périphériques iOS.


Accepté pour me dire ce qu'il fait sur le périphérique actuel.



20
votes

Répondu à l'origine ici: https://stackoverflow.com/a/14864400/577237

republié car il est Donc court:

Si l'application est une application iPhone exécutée en mode émulateur sur un iPad, il aura un userfaceidiom de téléphone, mais un type de type d'iPad. Vous pouvez vérifier cela avec le code suivant: xxx


6 commentaires

votre code est incorrect. Ui_user_interface_idiom () sera égal à iPad pour l'application iPhone exécutée sur iPad.


@Rubberduck Je dois être en désaccord avec votre évaluation. J'ai créé une application de test afin de tester cette fonctionnalité: Github.com/michaelpatzer/estimulationMode


Ceci est étrange car sur votre application, le comportement est l'attendu, mais dans deux applications de la mienne, je vois iPad comme idiome! Wtf !!!!


J'ai créé l'exemple d'application aussi simple que possible pour que aucune autre variables ne soit en jeu. Si vous envoyez un message directement, je serais heureux de jeter un coup d'œil aux applications en question pour essayer de déboguer le problème.


J'ai confirmé que ce code est toujours correct sur iOS 8.


C'est un vieux fil, mais j'ai couru dans l'UI_USER_INTORFACE_IDIOM Chine pour iOS12. Pour une application iPhone uniquement en cours d'exécution sur l'iPad Pro 3rd Gen, Ui_USER_INTORFACE_IDIOM () renvoie uIUSERInterfaceidiomphone au cas où je demande [[UISREEN PLANDENCREEN]] Avant UP, mais obtenir uiuserinterfaceIriCompad au cas où la demande est la demande [[UISCREEN Mainscreen] limites] plus tard. Je suppose que demander les jeux d'écrans est juste un échantillon pour les appels qui déclenchent une évaluation de UI_USER_INTORFACE_IDIOM ()?



2
votes

Si vous avez besoin de savoir si vous utilisez une application iPhone sur un iPad, vous pouvez donc augmenter l'interface jusqu'à la taille de l'iPhone 4S, il convient de noter que les applications iPhone fonctionnant sur 12,9 "" sont présentées sur la taille de l'iPhone SE. L'ajout d'une vérification de l'échelle de l'écran principal résoudra ceci. XXX


0 commentaires