¿Cómo pruebo una cámara en el simulador de iPhone?

122

¿Hay alguna forma de probar la cámara del iPhone en el simulador sin tener que implementarla en un dispositivo? Esto parece terriblemente tedioso.

Sheehan Alam
fuente

Respuestas:

137

Hay una serie de funciones específicas del dispositivo que debe probar en el dispositivo, pero no es más difícil que usar el simulador. Simplemente cree un destino de depuración para el dispositivo y déjelo conectado a la computadora.

Lista de acciones que requieren un dispositivo real:

  • el teléfono real
  • la Cámara
  • el acelerómetro
  • datos GPS reales
  • la brújula
  • vibración
  • notificaciones push...
Tim
fuente
54
Eso apesta un poco, ¿y si necesita probar en una versión anterior del sistema operativo configurado en su objetivo de implementación? Supongo que entonces estaría jodido.
marchinram
2
Aquí hay instrucciones sobre cómo degradar su dispositivo: iclarified.com/31004/how-to-downgrade-from-ios-7-beta-to-ios-6
knagode
5
¿No eran las notificaciones push una función solo para dispositivos también?
mgarciaisaia
12
No tengo un dispositivo iOS. Si quiero probar en un dispositivo real, necesito preguntarle a alguien .. Eso apesta ..
Luca
10
wtf, no todos tienen un dispositivo iOS solo porque están desarrollando para iOS
pete
7

Necesitaba probar algunas superposiciones personalizadas para fotos. Las superposiciones debían ajustarse en función del tamaño / resolución de la imagen.

Me acerqué a esto de una manera similar a la sugerencia de Stefan, decidí codificar una respuesta de cámara "ficticia".

Cuando el simulador se está ejecutando, ejecuto este código ficticio en lugar del estándar "captureStillImageAsynchronouslyFromConnection".

En este código ficticio, construyo una "foto negra" con la resolución necesaria y luego la envío a través del canal para que se trate como una foto normal. Esencialmente brinda la sensación de una cámara muy rápida.

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);

La imagen de arriba es equivalente a una foto de 8MP que envían la mayoría de los dispositivos actuales. Obviamente, para probar otras resoluciones cambiarías el tamaño.

Craig
fuente
Smart @Craig: hice algo similar (no tan inteligente, supongo) en un proyecto reciente, pero usé una imagen almacenada en recursos. De esta manera es posible automatizar capturas de pantalla con Fastlane para enviar en iTunesConnect
Moose
1

No (a menos que hayan agregado una forma de hacerlo en 3.2, aún no lo han verificado).

bpapa
fuente
0

Una razón común de la necesidad de acceder a la cámara es realizar capturas de pantalla para la AppStore.

Dado que la cámara no está disponible en el simulador, un buen truco (el único que conozco) es cambiar el tamaño de la vista al tamaño que necesita, justo el tiempo para tomar las capturas de pantalla. Los recortarás más tarde.

Seguro, necesitas tener disponible el dispositivo con la pantalla más grande.

El iPad es perfecto para probar diseños y hacer instantáneas para todos los dispositivos. Las capturas de pantalla para iPhone6 ​​+ deberán extenderse un poco (escaladas en 1,078125 - No es gran cosa ...)

Buen enlace a una referencia rápida de resoluciones de dispositivos iOS: http://www.iosres.com/


Editar: En un proyecto reciente, donde se usa un controlador de vista de cámara personalizado, reemplacé AVPreview por un UIImageView en un objetivo que solo uso para ejecutar en el simulador. De esta forma puedo automatizar capturas de pantalla para la carga de iTunesConnect. Tenga en cuenta que los botones de control de la cámara no están superpuestos, sino en una vista sobre la vista previa de la cámara.

La respuesta de @Craig a continuación describe otro método que encontré bastante inteligente: también funciona con la superposición de la cámara, al contrario que la mía.

Alce
fuente
3
Ese es el punto de la pregunta ... No hay cámara en el simulador.
Moose
1
¿Por qué necesitarías una cámara para tomar capturas de pantalla?
Raphael
3
¿Por qué necesitarías tomar capturas de pantalla de la cámara a la que te refieres? Para cargar capturas de pantalla de la aplicación de su cámara en acción en la Tienda, en diferentes tamaños de pantalla.
Moose
0

Acabo de encontrar un repositorio en git que ayuda a simular las funciones de la cámara en el simulador de iOS con imágenes, videos o la cámara de su MacBook.

Repo

brahimm
fuente
-1

Escribí una vista de reemplazo para usar en modo de depuración. Implementa la misma API y realiza las mismas devoluciones de llamada de delegado. En mi caso, hice que devolviera una imagen aleatoria de mi conjunto de prueba. Bastante trivial de escribir.

Stefan Arentz
fuente
3
Y puede hacer que devuelva una imagen de la cámara iSight :)