web-dev-qa-db-fra.com

Comment tester une caméra dans le simulateur iPhone?

Existe-t-il un moyen de tester la caméra iPhone dans le simulateur sans avoir à déployer sur un appareil? Cela semble terriblement fastidieux.

110
Sheehan Alam

Vous devez tester un certain nombre de fonctionnalités spécifiques à l'appareil, mais ce n'est pas plus difficile que d'utiliser le simulateur. Créez simplement une cible de débogage pour le périphérique et laissez-la attachée à l'ordinateur.

Liste des actions nécessitant un périphérique réel:

  • le téléphone actuel
  • l'appareil photo
  • l'accéléromètre
  • données GPS réelles
  • la boussole
  • vibration
  • Notifications push...
129
Tim

Je devais tester des superpositions personnalisées pour les photos. Les superpositions devaient être ajustées en fonction de la taille/résolution de l'image.

J'ai abordé cette question d'une manière similaire à la suggestion de Stefan. J'ai décidé de coder une réponse "fictive" de la caméra.

Lorsque le simulateur est en cours d'exécution, j'exécute ce code factice à la place de la norme "captureStillImageAsynchronouslyFromConnection".

Dans ce code factice, je construis une "photo en noir" de la résolution nécessaire, puis je l'envoie dans le pipeline pour qu'il soit traité comme une photo normale. Fournit essentiellement la sensation d'une caméra très rapide.

CGSize sz = UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]) ? CGSizeMake(2448, 3264) : CGSizeMake(3264, 2448);
UIGraphicsBeginImageContextWithOptions(sz, YES, 1);
[[UIColor blackColor] setFill];
UIRectFill(CGRectMake(0, 0, sz.width, sz.height));
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSData *imageData = UIImageJPEGRepresentation(image, 1.0);

L'image ci-dessus équivaut à des photos de 8 MP que la plupart des périphériques actuels envoient. Évidemment, pour tester d'autres résolutions, vous modifieriez la taille.

7
Craig

J'ai écrit une vue de remplacement à utiliser en mode débogage. Il implémente la même API et effectue les mêmes rappels de délégué. Dans mon cas, je l'ai fait retourner une image aléatoire de mon ensemble de test. Assez trivial pour écrire.

1
Stefan Arentz

Une raison fréquente pour avoir besoin d'accéder à la caméra est de faire des captures d'écran pour l'AppStore.

Étant donné que la caméra n'est pas disponible dans le simulateur, une bonne astuce (la seule que je connaisse) consiste à redimensionner la vue à la taille souhaitée, juste le temps de prendre des captures d'écran. Vous les couperez plus tard.

Bien sûr, vous devez disposer du périphérique avec le plus grand écran.

L'iPad est idéal pour tester les dispositions et créer des instantanés pour tous les appareils. Les captures d'écran pour iPhone6 ​​+ devront être un peu étirées (sur une échelle de 1,078125 - ce n'est pas grave…)

Bon lien vers une résolution rapide de résolutions d'appareils iOS: http://www.iosres.com/


Edit: Dans un projet récent, où un contrôleur de vue de caméra personnalisé est utilisé, j'ai remplacé AVPreview par un UIImageView dans une cible que je n'utilise que dans le simulateur. De cette façon, je peux automatiser les captures d'écran pour le téléchargement iTunesConnect. Notez que les boutons de commande de la caméra ne sont pas en superposition, mais dans une vue sur l'aperçu de la caméra.

La réponse @Craig ci-dessous décrit une autre méthode que j'ai trouvée assez intelligente: elle fonctionne également avec la superposition de caméra, contrairement à la mienne.

1
Moose

Nope (à moins qu'ils n'aient ajouté un moyen de le faire en 3.2, ils n'ont pas encore vérifié).

1
bpapa