Cómo hacer capturas limpias desde el simulador de iOS y el emulador de Android
Pon la barra de estado del simulador de iOS a las 9:41 con un comando de simctl, activa el modo demo en Android y captura pantallas listas para la tienda.
Para hacer una captura limpia del simulador de iOS, sobrescribe la barra de estado con xcrun simctl status_bar booted override --time 9:41 --batteryState charged --batteryLevel 100 y luego captura con xcrun simctl io booted screenshot. En Android, activa el modo demo de System UI por adb, que fija el reloj, llena los iconos de batería y señal y oculta las notificaciones, y después captura con adb exec-out screencap -p.
Eso resuelve la barra de estado. Una captura lista para la tienda también necesita el tamaño de dispositivo correcto, un formato de archivo que la tienda acepte y una pantalla llena de datos creíbles. En esta guía lo repaso todo, con comandos que puedes copiar y pegar.
- xcrun simctl status_bar booted override fija el reloj, la batería, el Wi-Fi y los indicadores de datos móviles del simulador de iOS, y xcrun simctl status_bar booted clear quita el override.
- El modo demo de System UI en Android se activa con adb shell settings put global sysui_demo_allowed 1 y se controla con broadcasts a com.android.systemui.demo.
- Un simulador de iPhone 17 Pro Max captura a 1320 × 2868, uno de los tamaños aceptados para el formato de iPhone más grande de App Store Connect.
- simctl y adb guardan los PNG con canal alfa; App Store Connect rechaza la transparencia y Google Play pide JPEG o PNG de 24 bits sin alfa.
- Google Play rechaza las capturas cuyo lado largo supera el doble del corto, lo que descarta las capturas directas de muchos teléfonos modernos alargados.
Por qué importa la barra de estado en las capturas para la tienda
Una captura hecha durante el desarrollo arrastra lo que estuviera pasando en el simulador en ese momento: las 14:17, un 34 % de batería, el nombre de un operador, un icono de notificación suelto. Nada de eso está mal, pero da sensación de trabajo a medias y le roba atención a la parte de la pantalla que te importa.
Google lo dice claramente. Sus directrices de recursos de vista previa piden limpiar la barra de notificaciones para que muestre la batería, el Wi-Fi y la cobertura al completo, sin notificaciones. Apple no tiene una regla explícita sobre la barra de estado, pero el reloj a las 9:41 es la convención en su propio marketing, y una barra de estado coherente en todas tus capturas hace que el set se vea como una sola pieza.
Cómo poner la barra de estado del simulador de iOS a las 9:41
El comando simctl status_bar lleva varias versiones en Xcode. Comprobamos los flags de abajo con xcrun simctl status_bar help en Xcode 27. Arranca el simulador que quieras y ejecuta:
xcrun simctl status_bar booted override \
--time 9:41 \
--dataNetwork wifi \
--wifiMode active --wifiBars 3 \
--cellularMode active --cellularBars 4 \
--operatorName '' \
--batteryState charged --batteryLevel 100booted apunta al simulador que está en marcha. Si tienes más de uno arrancado, pasa su UDID (lo sacas de xcrun simctl list devices booted). Todos los flags son opcionales, pero necesitas al menos uno.
| Flag | Valores aceptados | Lo que usamos |
|---|---|---|
--time | Cualquier texto; una fecha ISO válida también fija la fecha | 9:41 |
--dataNetwork | hide, wifi, 3g, 4g, lte, lte-a, lte+, 5g, 5g+, 5g-uwb, 5g-uc | wifi |
--wifiBars | 0–3 | 3 |
--cellularBars | 0–4 | 4 |
--operatorName | Cualquier texto; '' para dejarlo vacío | '' |
--batteryState | charging, charged, discharging | charged |
--batteryLevel | 0–100 | 100 |
Para ver qué está aplicado, usa xcrun simctl status_bar booted list. Cuando termines, déjalo como estaba:
xcrun simctl status_bar booted clearEl override sobrevive a los reinicios de la app, así que puedes fijarlo una vez y capturar todo el set. Si borras el simulador, se restablece.
Cómo capturar la pantalla de iOS al tamaño correcto
xcrun simctl io booted screenshot shot.png guarda la pantalla del simulador a su tamaño nativo en píxeles. No incluye la ventana del simulador ni el marco del dispositivo; solo obtienes la pantalla. Por eso, el dispositivo que elijas es lo que decide si App Store Connect acepta el archivo.
Elige un simulador que coincida con un tamaño aceptado
Las especificaciones de capturas de pantalla de Apple indican los tamaños exactos en píxeles que acepta cada formato. El que casi todas las guías llaman de 6,9 pulgadas (App Store Connect ahora lo etiqueta como «iPhone with Dynamic Island, large display») acepta 1260 × 2736, 1290 × 2796 y 1320 × 2868 en vertical. Cuando capturamos desde un simulador de iPhone 17 Pro Max, el archivo salió a 1320 × 2868, así que encaja en ese formato sin redimensionar. Para iPad, un simulador de iPad Pro de 13 pulgadas coincide con el formato de 13 pulgadas, que acepta 2064 × 2752 y 2048 × 2732. Nuestra referencia de tamaños de capturas recoge el resto.
Si prefieres crear un dispositivo dedicado a las capturas, para no tocar el simulador que usas a diario:
xcrun simctl create store-shots "iPhone 17 Pro Max"
xcrun simctl boot store-shots
open -a SimulatorEvita el error de transparencia
El PNG que escribe simctl tiene canal alfa, aunque todos los píxeles sean opacos. Las especificaciones de App Store Connect dicen que las imágenes no pueden incluir canales alfa ni transparencia. Si vas a subir la captura directamente, guárdala mejor como JPEG:
xcrun simctl io booted screenshot --type=jpeg 01-home.jpg
# or convert an existing PNG on macOS
sips -s format jpeg 01-home.png --out 01-home.jpgSi la captura va primero a una herramienta de diseño, quédate con el PNG; lo que tiene que estar libre de alfa es el archivo exportado.
Cómo conseguir una barra de estado limpia en el emulador de Android
Android trae un mecanismo propio para esto: el modo demo de System UI. Está documentado en el Android Open Source Project, y funciona en emuladores y en dispositivos reales con la depuración USB activada. Primero lo permites y luego envías los comandos como broadcasts:
adb shell settings put global sysui_demo_allowed 1
demo() { adb shell am broadcast -a com.android.systemui.demo -e command "$@"; }
demo enter
demo clock -e hhmm 0941
demo battery -e level 100 -e plugged false
demo network -e wifi show -e level 4
demo network -e mobile show -e datatype none -e level 4
demo notifications -e visible falseLos probamos en un emulador con API 35 y cada broadcast se completó con la barra de estado actualizándose al momento. Cuando termines:
adb shell am broadcast -a com.android.systemui.demo -e command exitEl modo demo admite más cosas. status oculta iconos concretos como la alarma, el Bluetooth o la ubicación; bars -e mode pone la barra opaca, translúcida o semitransparente. La página de AOSP lista todos los comandos.
Captura la pantalla del emulador
adb exec-out screencap -p > 01-home.pngUsa exec-out en lugar de shell: transmite los bytes en bruto, así que el PNG no se corrompe por la conversión de saltos de línea. Igual que simctl, screencap captura solo la pantalla. Las skins del emulador dibujan un marco alrededor de la ventana, pero ese marco nunca llega al archivo, así que los marcos de dispositivo hay que añadirlos después.
Ojo con el límite 2:1 de Google Play
En esta cae mucha gente. Las reglas de capturas de Google Play dicen que cada lado debe medir entre 320 y 3840 píxeles y que el lado largo no puede superar el doble del corto. Muchos teléfonos actuales son más alargados que eso. Nuestra captura desde un emulador de Pixel 9 Pro salió a 1280 × 2856, una proporción de 2,23 más o menos, que Play no acepta tal cual.
Tienes dos opciones:
- Captura con un perfil 16:9. Crea un AVD con una pantalla de 1080 × 1920. La captura se sube directamente y además cumple el mínimo de 1080 px que Google indica para poder aparecer en los formatos de recomendación basados en capturas.
- Diseña alrededor. Coloca la captura alta dentro de un lienzo de 1080 × 1920 con un titular y un fondo. Es lo que hacen de todas formas la mayoría de sets de capturas diseñadas.
Google también pide JPEG o PNG de 24 bits sin alfa. La salida de screencap es RGBA, así que conviértela antes de subirla directamente, igual que en iOS.
Carga datos de demo realistas antes de capturar
Una barra de estado perfecta sobre una lista vacía sigue siendo una captura floja. La directriz 2.3.3 de revisión de apps de Apple dice que las capturas deben mostrar la app en uso, no solo el título, la pantalla de inicio de sesión o la pantalla de carga. En la práctica, las pantallas que funcionan tienen contenido que parece de una persona real: un presupuesto con unas cuantas docenas de movimientos, un tracker de hábitos con una racha de tres semanas, un chat con una conversación creíble.
Enfoques que suelen funcionar, de menos a más esfuerzo:
- Una cuenta de demo. Una cuenta en staging, rellenada a mano una vez y bien cuidada. Es sencillo, pero con el tiempo se desordena.
- Un argumento de arranque que cargue fixtures. Comprueba algo como
-demoDataen las builds de depuración y carga un JSON con contenido de ejemplo. Pásalo conxcrun simctl launch booted com.example.app -demoData, o como extra del intent en Android. - Tests de UI que preparen el estado. Si más adelante automatizas las capturas, el test puede crear exactamente los datos que necesita cada pantalla.
El simulador también se puede preparar desde la línea de comandos para que nunca salga un aviso de permisos en una captura:
# Add sample photos to the library
xcrun simctl addmedia booted ~/demo/photos/*.jpg
# Pre-grant permissions so no system dialog appears
xcrun simctl privacy booted grant photos com.example.app
xcrun simctl privacy booted grant location com.example.appLos nombres importan más de lo que parece. «Test User» y «asdf» se ven desde la otra punta de la habitación. Usa nombres verosímiles, importes que parezcan reales y fechas cercanas al presente. Nuestra lista de errores habituales en las capturas entra en más detalles de los que delatan una captura.
Cómo cambiar entre modo claro/oscuro e idioma
Si tu app tiene modo oscuro o fichas localizadas, captura cada variante desde la misma configuración en lugar de cambiar los Ajustes a mano.
| Tarea | Simulador de iOS | Emulador de Android |
|---|---|---|
| Modo oscuro | xcrun simctl ui booted appearance dark | adb shell cmd uimode night yes |
| Volver al modo claro | xcrun simctl ui booted appearance light | adb shell cmd uimode night no |
| Idioma de la app | xcrun simctl launch booted com.example.app -AppleLanguages "(de)" -AppleLocale de_DE | adb shell cmd locale set-app-locales com.example.app --locales de-DE |
Los argumentos de idioma de iOS solo se aplican a ese arranque, lo que viene muy bien: el simulador sigue en inglés mientras la app corre en alemán. El comando de idioma por app de Android necesita Android 13 (API 33) o posterior; comprobamos su sintaxis con adb shell cmd locale help en API 35.
Las capturas localizadas merecen la pena cuando la app en sí está traducida. Capturar la interfaz en alemán es la primera mitad; los titulares necesitan el mismo trato. Nuestra guía sobre cómo localizar las capturas del App Store explica qué traducir y en qué orden, y por qué traducir no basta para localizar cubre el resto.
Todo junto: un script de captura
Aquí tienes un pequeño script de shell que prepara un simulador de iOS, captura las versiones clara y oscura de una pantalla y lo deja todo como estaba. La navegación entre pantallas queda en tus manos (o en los deep links, que la mayoría de apps ya tienen):
#!/bin/sh
set -e
DEVICE=booted
APP=com.example.app
OUT=./screenshots/en-US
mkdir -p "$OUT"
xcrun simctl status_bar $DEVICE override --time 9:41 \
--dataNetwork wifi --wifiBars 3 --cellularBars 4 \
--batteryState charged --batteryLevel 100
for MODE in light dark; do
xcrun simctl ui $DEVICE appearance $MODE
xcrun simctl launch --terminate-running-process $DEVICE $APP -demoData
sleep 2
xcrun simctl openurl $DEVICE "example://home"
sleep 1
xcrun simctl io $DEVICE screenshot --type=jpeg "$OUT/01-home-$MODE.jpg"
done
xcrun simctl status_bar $DEVICE clearCuando pasas de un puñado de pantallas e idiomas, un script así se convierte en un trabajo de mantenimiento, y ahí es donde entran herramientas basadas en tests de UI como snapshot de fastlane.
Qué hacer con las capturas limpias
Una captura limpia es materia prima. La mayoría de fichas la colocan dentro de un marco diseñado con un titular que dice qué hace esa pantalla por el usuario, porque una captura sola no se explica en el segundo o dos que alguien tarda en pasar de largo. Nuestra guía paso a paso para crear capturas del App Store sigue a partir de aquí, y las buenas prácticas para capturas explican qué poner en cada una.
Ese paso de diseño lo puedes hacer con cualquier herramienta. En Launch Shots sueltas las capturas y el generador de capturas para el App Store se encarga del marco del dispositivo, la maquetación del titular y los tamaños de exportación de cada tienda.
Diseña capturas listas para la tienda en minutos: gratis y sin marca de agua.
Empezar con Launch Shots es gratis. Todas las plantillas (más de 110), más de 220 marcos de dispositivo y mockups 3D, traducción con IA y subida directa a App Store Connect y Google Play Console. Sin tarjeta de crédito.
Empieza gratis →En resumen
- iOS:
xcrun simctl status_bar booted override --time 9:41 --batteryState charged --batteryLevel 100, luegoxcrun simctl io booted screenshot --type=jpeg shot.jpgy despuésstatus_bar booted clear. - Android:
settings put global sysui_demo_allowed 1, broadcasts del modo demo para el reloj, la batería, la red y las notificaciones,adb exec-out screencap -py después-e command exit. - Captura en un simulador o emulador cuyo tamaño de pantalla la tienda acepte tal cual: iPhone 17 Pro Max para el formato de iPhone más grande y un AVD 16:9 para Play.
- Quita el canal alfa antes de subir una captura directamente a cualquiera de las dos tiendas.
- Carga datos de demo realistas y concede los permisos de antemano para que ningún estado vacío ni diálogo del sistema se cuele en una captura.
- Automatiza con un script los cambios de modo claro/oscuro e idioma para que todas las variantes salgan de la misma configuración.
Preguntas frecuentes
05- ¿Cómo cambio la hora a 9:41 en el simulador de iOS?
- Ejecuta xcrun simctl status_bar booted override --time 9:41 en Terminal con el simulador en marcha. El override también acepta flags para el estado y el nivel de batería, las barras de Wi-Fi y de datos móviles, el tipo de red y el nombre del operador. Dura hasta que ejecutes xcrun simctl status_bar booted clear o borres el dispositivo, así que puedes capturar un set completo sin repetirlo.
- ¿Cómo oculto las notificaciones en la barra de estado del emulador de Android?
- Activa el modo demo de System UI con adb shell settings put global sysui_demo_allowed 1 y luego envía el broadcast adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false. El modo demo también te deja fijar el reloj y mostrar la batería y la señal al máximo. Cuando termines, envía el comando exit para devolverle la barra de estado al sistema.
- ¿Por qué App Store Connect rechaza mi captura del simulador?
- Las dos causas habituales son el tamaño y la transparencia. App Store Connect solo acepta dimensiones concretas en píxeles para cada tamaño de pantalla, así que la captura tiene que salir de un simulador cuya pantalla coincida con un tamaño aceptado. Además, rechaza imágenes con canal alfa, y simctl guarda los PNG con uno. Capturar con --type=jpeg, o convertir el PNG a JPEG, evita el error de transparencia.
- ¿Puedo usar capturas del simulador sin editar como capturas de pantalla del App Store?
- Sí. Apple acepta capturas sin más siempre que tengan un tamaño aceptado y muestren la app en uso, como pide la directriz 2.3.3 de revisión de apps. Aun así, muchas apps añaden un titular y un fondo, porque una pantalla sola no explica para qué sirve la función. En cualquier caso, parte de una captura limpia: barra de estado fija, datos realistas y nada de overlays de depuración.
- ¿Qué emulador de Android uso para las capturas de Google Play?
- Elige un perfil de dispositivo cuya pantalla no mida más del doble de alto que de ancho, porque Google Play rechaza las capturas en las que el lado largo supera el doble del corto. Muchos teléfonos actuales son más alargados que 2:1, así que sus capturas directas no pasan. Un perfil 16:9, como un teléfono de 1080 × 1920, funciona tal cual, o puedes colocar las capturas más altas dentro de un marco diseñado en 9:16.
