¿Qué hace simreel?
Graba la app real del usuario en el Simulador de iOS y genera dos archivos:
reel-1080x1920.mp4: la grabación dentro de un cuerpo de teléfono sobre un degradado, una leyenda por escena y una tarjeta final. Para X, Reels, TikTok, Product Hunt.appstore-preview-886x1920.mp4: la grabación sin adornos, dimensionada y codificada para App Store Connect.
Todo se ejecuta localmente con Xcode y ffmpeg. Sin cuentas, sin APIs de pago.
Reglas
- Muestra solo lo que la app realmente hace. Las leyendas describen lo que aparece en pantalla; nunca agregues afirmaciones, números ni reseñas que el metraje no muestre.
- Mantén los datos privados fuera del encuadre. Usa un simulador nuevo o datos de demostración, y revisa los fotogramas antes de entregar.
- Toca solo el simulador que se te indicó usar. Otros simuladores iniciados pueden pertenecer al trabajo de alguien más; nunca pases
bootedcuando hay más de uno ejecutándose. - Rechaza las solicitudes de seguimiento y cookies durante la grabación a menos que el usuario indique lo contrario.
Pasos
- Encuentra el simulador.
xcrun simctl list devices booted. Si la app no está instalada, constrúyela e instálala con las herramientas propias del usuario. - Recorre la app una vez sin grabar. Elige entre 3 y 5 momentos que muestren las funciones principales. Elimina ahora los diálogos de incorporación, permisos y cookies para que no aparezcan en la toma.
- Graba una sola toma.
Haz una pausa de aproximadamente un segundo en cada pantalla que quieras conservar. Si los toques fallan justo después de iniciar el simulador, espera 20 segundos y reintenta.scripts/record.sh start work/raw.mp4 <UDID> # maneja la app: tu herramienta de simulador, un XCUITest en el proyecto, o pídele al usuario que navegue tocando scripts/record.sh stop <UDID> - Revisa la toma. El archivo termina en el último cambio de pantalla, por lo que una pantalla final estática se corta y una toma de una pantalla que nunca cambia queda casi vacía. Mide los tiempos de las escenas desde el archivo, no de memoria.
Abrepython3 scripts/compose.py frames work/raw.mp4 workwork/contact-sheet.png: 8 mosaicos por fila, el mosaico N es el segundo N. - Escribe
storyboard.json.{ "app_name": "MiApp", "background": ["#0B1020", "#3B2AA8"], "scenes": [ {"start": 0.3, "end": 5.8, "caption": "Qué hace esta pantalla"}, {"start": 8.0, "end": 10.0, "speed": 0.8, "caption": "Siguiente paso"} ], "end_card": {"title": "MiApp", "subtitle": "El eslogan de la app"} }start/endestán en segundos dentro de la grabación.speedpor debajo de 1 ralentiza una escena, por encima de 1 la acelera.holdcongela el último fotograma de la escena durante esa cantidad de segundos, que es como te detienes en una pantalla de resultados.backgroundadmite un color o un degradado de arriba a abajo;text_colorycaption_sizeson opcionales. Omiteend_cardpara terminar en la última escena. Recorta los indicadores de carga. Las escenas deben sumar entre 15 y 30 segundos, de lo contrario App Store Connect rechazará la vista previa. - Renderiza.
Muestrapython3 scripts/compose.py render work/raw.mp4 storyboard.json outout/report.jsony advierte cuando la duración de la vista previa esté fuera del rango. - Verifica antes de entregar. Extrae un fotograma de cada escena (
ffmpeg -ss <t> -i out/reel-1080x1920.mp4 -frames:v 1 f.png) y revísalo: la leyenda coincide con la pantalla, nada privado, nada recortado.
Notas
- Requisitos: macOS, Xcode (para
simctlyswift), ffmpeg, python3. record.shajusta la barra de estado a las 9:41 con batería y señal completas. Límpiala después conxcrun simctl status_bar <UDID> clear.- Los números de vista previa de App Store usados aquí (886×1920, 15-30 s, 30 fps, H.264 High 4.0, AAC estéreo) provienen de las especificaciones de vista previa de apps de Apple. Consulta esa página si la subida es rechazada.
- La pista de audio está en silencio. Agrega música o voz en un editor si quieres sonido.