← Todos los articulos

Cómo construir una app de cámara responsiva en iOS 27

El equipo de rendimiento de cámara de Apple redujo a la mitad el tiempo de lanzamiento de la cámara aplazando todo excepto la salida de previsualización: un lanzamiento que rondaba el segundo cae a aproximadamente la mitad, una mejora del doble medida sobre un panel de luces de laboratorio1. La palanca es la API Deferred Start, disponible en iOS 26 y posteriores, y el principio detrás de ella es contundente. El factor más importante para que el lanzamiento de una cámara se sienta rápido es la rapidez con la que el fotograma de previsualización aparece en la pantalla1.

El marco de este artículo es “lo que una app de AVFoundation tiene que hacer para sentirse instantánea”, porque la brecha entre una cámara que técnicamente está funcionando y una que se siente lista para usarse es exactamente la brecha por la que se cuela una ficha de dominó que cae. Tres sesiones de WWDC26 cubren la superficie: la sesión 303 sobre lanzamiento responsivo y captura sostenida, la sesión 304 sobre captura de alta resolución sin perder responsividad, y la sesión 341 sobre la nueva cámara frontal cuadrada de Center Stage. Se conectan a través de la misma arquitectura de sesión de captura, así que adoptar una abarata las demás.

TL;DR

  • La secuencia de lanzamiento de cuatro etapas (lanzamiento de la app, configuración/inicio de la sesión, inicialización de las salidas, transmisión de previsualización) pasa la mayor parte de su tiempo inicializando salidas. Deferred Start pospone todas las salidas excepto la que renderiza la previsualización, reduciendo el lanzamiento a la mitad en la medición de laboratorio de Apple1.
  • Las apps basadas en AVCaptureVideoPreviewLayer recompiladas contra iOS 26+ obtienen Deferred Start automático gratis; las apps con salida de datos de video deben adoptar el modo manual para reclamar la misma ganancia1.
  • Aplazar la salida de fotos acelera la previsualización pero no la primera captura, así que combínalo con isResponsiveCaptureEnabled en AVCapturePhotoOutput para almacenar la toma en búfer hasta que el procesamiento esté listo1.
  • Pro Video Storage, nuevo en iOS 27, preasigna un pool de almacenamiento a nivel de sistema para que las escrituras ProRes de alta tasa de datos permanezcan deterministas en lugar de tartamudear bajo la contención del sistema de archivos1.
  • La cámara frontal de Center Stage (iPhone 17, iPhone Air, iPhone 17 Pro) es un sensor cuadrado expuesto como la cámara frontal .builtInUltraWideCamera; dynamicAspectRatio recorta cualquier relación de aspecto del cuadrado sin reconstruir la sesión, y AVCaptureSmartFramingMonitor impulsa el Auto Zoom y la Auto Rotación2.

La secuencia de lanzamiento tiene cuatro etapas

Watch on Apple Developer ↗

Jake, ingeniero del equipo de rendimiento de cámara de Apple, recorre las cuatro etapas de lanzamiento en la sesión 303.

El lanzamiento de una cámara atraviesa cuatro etapas, y el ingeniero de Apple Jake las desglosa en orden1. Primero se lanza la app: el linker carga el binario, se ejecutan los inicializadores estáticos, se crean las escenas de la UI. Segundo se configura e inicia la sesión: inicializar AVCaptureSession, confirmar la configuración e iniciar la sesión consume tiempo y recursos del sistema. Tercero se inicializa cada AVCaptureOutput, y ese tiempo escala con el número de salidas y sus ajustes de calidad. Cuarto la previsualización comienza a transmitirse y los fotogramas fluyen hacia la app1.

El trabajo para hacer esto rápido empieza en la UI. Divide el lanzamiento en dos fases: recursos críticos para mostrar la previsualización, y recursos que pueden esperar hasta después de que la previsualización corra1. En AVCam, la clásica app de cámara de ejemplo de AVFoundation, la previsualización de la cámara y el botón del obturador son los únicos elementos que alguien necesita en el instante en que la lanza; el pozo de imágenes y el selector de modo pueden aparecer gradualmente después. El principio se generaliza más allá de la UI. Cualquier recurso creado antes de que la previsualización se renderice se suma al tiempo de lanzamiento1.

La sesión en sí es el siguiente punto de presión. Como AVCaptureSession coordina cada objeto de captura, Jake la crea primero, en cuanto el hilo principal termina la configuración de la UI. Pero crear la sesión bloquea el hilo principal, así que despacha su creación fuera del hilo principal para que corra en paralelo con la configuración de las escenas de la UI y evites un bloqueo1. La misma precaución aplica a startRunning() y stopRunning(): ambas son llamadas bloqueantes, y llamarlas en el hilo principal congelará la app1. Confirma una única configuración por adelantado en lugar de confirmar varias, ya que cada reconfiguración alarga el lanzamiento1.

Deferred Start: la ganancia del doble

Inicializar las salidas es la parte más costosa del lanzamiento, y la mayoría de las salidas son peso muerto en ese momento. Para renderizar la previsualización, la app solo necesita una capa de previsualización o una única salida; la salida de archivo de película y la salida de fotos no aportan nada al primer fotograma1. Deferred Start explota eso. Pospone la inicialización de las salidas hasta que el lanzamiento haya terminado, de modo que solo la salida de previsualización se inicializa antes de que se muestre el primer fotograma1.

Cada AVCaptureOutput y la AVCaptureVideoPreviewLayer llevan una propiedad isDeferredStartEnabled; ponla en true para aplazar esa salida, y aplaza todo excepto la que renderiza la previsualización1. Hay dos modos para decidir cuándo corre el trabajo aplazado. En el modo automático, el sistema elige el mejor momento, poco después de que aparece la previsualización, y dispara dos callbacks del delegado para que la app pueda rastrearlo: sessionWillRunDeferredStart antes de que comience la inicialización, y sessionDidRunDeferredStart después de que se complete1. Las apps recompiladas contra el SDK de iOS 26 o posterior obtienen el modo automático por defecto, con automaticallyRunsDeferredStart ya puesto en true1.

// Automatic mode — defer everything but the preview layer
session.beginConfiguration()
session.automaticallyRunsDeferredStart = true      // true by default on iOS 26+ SDK

photoOutput.isDeferredStartEnabled = true           // defer the photo output
// videoPreviewLayer renders preview, so it is NOT deferred

session.commitConfiguration()
session.startRunning()                              // call off the main thread

El modo manual devuelve el control a la app. Pon automaticallyRunsDeferredStart en false, haz el trabajo de arranque que deba ir primero (leer preferencias, construir UI no crítica), y luego llama a runDeferredStartWhenNeeded() para decirle al sistema que puede proceder1. El modo manual importa para una arquitectura en particular: las apps que renderizan la previsualización con AVCaptureVideoDataOutput. Deferred Start no aplica automáticamente a una salida de datos, así que esas apps adoptan Deferred Start manual para reclamar la misma ganancia de lanzamiento, típicamente disparándolo una vez que el primer fotograma se ha presentado (Jake rastrea la presentación a través de una CAMetalLayer)1.

Apple verificó el resultado sobre un panel de luces de laboratorio, comparando dos teléfonos capturando un patrón de LED en expansión. El teléfono con Deferred Start activado atrapó el patrón mientras tanto los LED rojos como los verdes estaban encendidos; el teléfono sin él terminó de lanzarse solo después de que los LED verdes casi se habían apagado1. Cronometrado, el lanzamiento sin Deferred Start rondaba el segundo; con él, el lanzamiento se redujo a la mitad, una mejora del doble, con las sesiones de captura complejas viendo aún más1.

Agrupa los cambios disruptivos para que el grafo se reconstruya una sola vez

La disciplina de configuración única de la secuencia de lanzamiento tiene un mecanismo detrás que un ingeniero de cámara del panel de laboratorio de la WWDC26 detalló. AVCaptureSession coordina un grafo de objetos de captura, y cada vez que estableces una propiedad que fuerza un cambio disruptivo, la sesión vuelve a resolver ese grafo5. Reconfigurar normalmente significa cambiar más de una cosa a la vez, pasar del modo foto al modo video o bajar un formato activo a una resolución menor, así que establecer cada propiedad por su cuenta hace que el grafo se reconstruya en cada paso5. Envuelve todo el lote en beginConfiguration() y commitConfiguration() y el grafo se vuelve a resolver exactamente una vez, al confirmar, ya sea que el lote contenga un cambio o veinte5. El panelista comparó el par con una transacción bancaria: beginConfiguration() la abre, el retiro y el depósito quedan pendientes, y commitConfiguration() los liquida juntos5.

Deferred Start se compone limpiamente con una palanca más previa al lanzamiento. El panel confirmó que Deferred Start y el array de ajustes de foto preparados (setPreparedPhotoSettingsArray(_:completionHandler:) en AVCapturePhotoOutput) son ortogonales y complementarios, uno aplazando la disponibilidad de la salida para que la previsualización aparezca primero mientras el otro preasigna los recursos del peor caso del pipeline de fotos fijas, componibles sin conflicto5.

Previsualización rápida no es captura rápida

Aplazar la salida de fotos tiene una trampa que vale la pena decir con claridad: la previsualización arranca mucho antes, pero el tiempo hasta la primera captura permanece igual, porque el sistema todavía tiene que terminar de inicializar la salida de fotos aplazada antes de que una captura pueda comenzar1. La previsualización está activa, el usuario toca el obturador, y la toma ya se fue.

La solución es isResponsiveCaptureEnabled en AVCapturePhotoOutput. La propiedad añade un búfer entre iniciar una captura y el momento en que comienza el procesamiento, de modo que alguien pueda capturar el momento incluso si la salida de fotos no está completamente lista1. En la demo del dominó de Apple, el teléfono que ejecutaba la captura responsiva junto con Deferred Start obtuvo una toma nítida de las fichas de dominó cayendo mientras el teléfono de control la perdió por completo1. El emparejamiento es el patrón recomendado: adopta Deferred Start con la salida de fotos de calidad, mantén el lanzamiento rápido, y deja que la captura responsiva cubra la ventana antes de que la salida de fotos termine de inicializarse1.

Captura rápida y consecutiva de alta resolución

Watch on Apple Developer ↗

Mohit, ingeniero del equipo de Software de Cámara de Apple, demuestra la priorización de captura rápida en una cancha de básquetbol en la sesión 304.

La sesión 304 extiende la historia de la responsividad a las ráfagas de alta resolución. El mecanismo es isFastCapturePrioritizationEnabled en AVCapturePhotoOutput, una propiedad existente y no una nueva: cuando se activa, el sistema detecta múltiples capturas en rápida sucesión y adapta la calidad de la foto del ajuste de máxima calidad a uno balanceado, que necesita menos tiempo tanto para la captura como para el procesamiento4. La parte nueva llega con el sistema operativo. A partir de iOS 27 en el iPhone 16 y el iPhone 17, el sistema también procesa esas capturas rápidas balanceadas más tarde usando el procesamiento de fotos aplazado, el pipeline en segundo plano de la WWDC23 que termina una foto sin bloquear la siguiente captura (distinto de la API de lanzamiento Deferred Start de arriba)4. En la demo de básquetbol de Apple, la diferencia fue una captura bloqueada frente a cinco tomas responsivas de la misma jugada una vez que el procesamiento aplazado, la captura responsiva y la priorización de captura rápida estaban todos activados4.

La misma sesión actualiza la tabla de cobertura de alta resolución. El soporte de captura de 24MP y 48MP se extiende a la cámara teleobjetivo en el iPhone 16 Pro y a la cámara ultra gran angular en el iPhone 17, y existe una opción de 18MP solo en la cámara frontal de Center Stage del iPhone 174. El ajuste de priorización condiciona lo que puedes solicitar: 12MP funciona en los tres niveles de priorización, los 48MP de un solo fotograma necesitan balanceado o calidad, y los formatos fusionados de múltiples fotogramas de 18MP y 24MP requieren la priorización de calidad por su procesamiento más largo4. El procesamiento aplazado es lo que hace prácticas esas fusiones de múltiples fotogramas en una app responsiva, ya que el trabajo pesado ocurre en segundo plano sin compartir memoria con la sesión de captura4.

Renderizar la previsualización: capa frente a salida de datos

Dos salidas pueden impulsar la previsualización, y la elección determina cuánto más tienes que hacer. AVCaptureVideoPreviewLayer muestra exactamente lo que la cámara ve sin trabajo por fotograma en la app: maneja el mapeo de tonos HDR automáticamente, mantiene baja la sobrecarga de CPU y GPU, y se ajusta para una visualización de baja latencia1. La contrapartida es que no ofrece acceso por fotograma1. (Para el lado HDR de ese mapeo de tonos automático, el artículo sobre AVFoundation HDR y Apple Log cubre el pipeline de captura y visualización en profundidad.)

AVCaptureVideoDataOutput es la alternativa cuando el procesamiento por fotograma es la prioridad. Toma el lugar de la capa de previsualización como la salida de visualización principal y le da a la app control sobre el flujo de fotogramas: superposiciones de UI personalizadas por fotograma, integración con Metal, análisis de fotogramas1. El costo es la adopción manual de Deferred Start señalada arriba, además de una regla de disciplina: mantén corto el trabajo por fotograma para evitar caídas de fotogramas y mantener la experiencia fluida1. Usa la capa de previsualización cuando solo necesites mostrar la transmisión; recurre a la salida de datos cuando realmente proceses fotogramas.

Sostener el rendimiento bajo presión

La mayor parte del desarrollo de cámara ocurre en un escritorio en un entorno controlado, pero la gente usa la app en un día soleado y caluroso, y el sistema se ralentiza a medida que el dispositivo se calienta1. Dos APIs de costo le permiten a una app ver eso venir. El costo de hardware devuelve un valor entre 0 y 1 que representa la proporción del hardware de la sesión en uso; por encima de 1 significa que el sistema no puede soportar la configuración1. El costo sube con el número de cámaras, los formatos activos (1080p frente a 4K), la tasa de fotogramas, y si el formato está agrupado (binned). El costo de hardware asume la tasa de fotogramas máxima de un formato, así que una app que corre a 30 fps en un formato de 60 fps debería establecer la anulación de la tasa de fotogramas para bajar el costo reportado1.

El costo de presión del sistema también devuelve de 0 a 1, representando el costo del estado actual, y cruzar 1 hace insostenible la configuración1. El patrón de adopción: después de confirmar la configuración, verifica que el costo de hardware permanezca en 1 o por debajo, luego observa el systemPressureState de AVCaptureDevice y registra un manejador para los cambios1. A medida que la presión sube, el manejador reduce la tasa de fotogramas del dispositivo de captura, ralentiza el trabajo de la GPU o del Apple Neural Engine, y minimiza el trabajo de la UI1.

Pro Video Storage: escrituras ProRes deterministas

Watch on Apple Developer ↗

La sesión 303 introduce Pro Video Storage, nuevo en iOS 27, para la captura de video de alta tasa de datos.

La E/S tradicional del sistema de archivos no es determinista: el sistema hace malabares con operaciones que compiten entre sí, la fragmentación de memoria y el desgaste del almacenamiento, así que el tiempo de escritura varía1. Las capturas de alta tasa de datos como ProRes necesitan una E/S sostenida de alto ancho de banda para grabar sin perder fotogramas, y el tiempo variable es exactamente la propiedad equivocada. Pro Video Storage, nuevo en iOS 27, aborda el problema rastreando y gestionando almacenamiento preasignado para las capturas de alta tasa de datos. Es un recurso a nivel de sistema que todas las apps comparten, y se conecta a las APIs de grabación de película existentes1.

Las apps lo activan estableciendo usesProVideoStorage en AVCaptureMovieFileOutput, o en AVAssetWriter cuando graban desde una salida de datos de video1. El almacenamiento entonces maneja la asignación y la E/S de archivos, manteniendo consistente el rendimiento de escritura para los códecs de alta tasa de datos. La secuencia de adopción: Pro Video Storage es un singleton, así que obtenlo a través de su accesor compartido y confirma el soporte; construye la salida de archivo de película, la sesión, las conexiones y el formato elegido; verifica isProVideoStorageSupported en la salida de archivo de película; confirma que el almacenamiento no esté ocupado redimensionando o atendiendo la creación o eliminación de archivos; luego actívalo e inicia la grabación1. Durante la captura, la grabación escribe en el pool preasignado y se mueve a la ubicación final una vez que la captura termina1. Los ajustes de la cámara ahora le permiten a la gente controlar cuánto almacenamiento asignar, el método remainingCapacity reporta lo que queda, y un método de abrir-ajustes lleva al usuario a esa UI desde la app1.

La cámara frontal de Center Stage es cuadrada

Watch on Apple Developer ↗

Tracy, ingeniera del equipo de Software de Cámara de Apple, presenta la cámara frontal cuadrada de Center Stage en la sesión 341.

Los sensores frontales tradicionales tienen una relación de aspecto de 4x3 que fija el encuadre a la orientación del teléfono. La cámara frontal de Center Stage en el iPhone 17, el iPhone Air y el iPhone 17 Pro usa un sensor de imagen cuadrado emparejado con un lente de 95 grados, el campo de visión más amplio de cualquier cámara frontal de iPhone2. La ingeniera de Apple Tracy enmarca la recompensa: la forma cuadrada le permite al usuario elegir cualquier relación de aspecto, tomando una selfie en retrato o paisaje sin rotar el teléfono, lo que mantiene un agarre seguro con una mano y una imagen centrada con contacto visual natural2.

La configuración de la sesión es AVFoundation convencional3. Crea un AVCaptureSession, encuentra la cámara como un AVCaptureDevice con el tipo de dispositivo frontal .builtInUltraWideCamera, envuélvela en un AVCaptureDeviceInput, añade una AVCaptureVideoPreviewLayer para la previsualización y un AVCapturePhotoOutput para las fotos; la sesión forma AVCaptureConnections de manera implícita entre tipos de medios compatibles2.

El bloque de construcción es dynamicAspectRatio en AVCaptureDevice, disponible a partir de iOS 26. Establecer la propiedad recorta la relación de aspecto elegida del sensor cuadrado sin reconstruir la sesión ni interrumpir la previsualización, así que el cambio es continuo2. La propiedad soporta cinco relaciones de aspecto (3x4, 4x3, 9x16, 16x9 y 1x1) en formatos cuadrados desde 1280 hasta 4032, con una restricción: el formato de foto de 4032 solo soporta 3x4 y 4x3, porque esos preservan la resolución más alta2.

// Tap to Rotate using dynamicAspectRatio
let discovery = AVCaptureDevice.DiscoverySession(
    deviceTypes: [.builtInUltraWideCamera],
    mediaType: .video,
    position: .front
)
guard let device = discovery.devices.first else { return }

// Find a format that supports the desired ratio
guard let format = device.formats.first(where: {
    $0.supportedDynamicAspectRatios.contains(.ratio4x3)
}) else { return }

try device.lockForConfiguration()
device.activeFormat = format
let timestamp = device.setDynamicAspectRatio(.ratio4x3)  // returns first-buffer timestamp
device.unlockForConfiguration()

Cada formato anuncia sus supportedDynamicAspectRatios, y establecer la relación devuelve el timestamp del primer búfer donde el cambio surte efecto2. El timestamp devuelto no es decoración: para la grabación de video es la costura que te permite terminar un clip y empezar el siguiente en la nueva relación de aspecto.

Auto Zoom, Auto Rotación y compensación del sensor

AVCaptureSmartFramingMonitor (iOS 26 y posteriores, obtenido de la cámara) se sitúa sobre dynamicAspectRatio y alimenta el Auto Zoom y la Auto Rotación2. El monitor da recomendaciones de encuadre periódicas a partir de la detección automática de rostro y mirada, cada una con una relación de aspecto y un factor de zoom que la app puede aplicar o ignorar; como apunta a la captura de fotos, solo recomienda cuando el formato de foto de 4032 está activo2. Por defecto no recomienda nada, así que establece enabledFramings (a todos los supportedFramings, o a un subconjunto elegido), luego observa con key-value el recommendedFraming y aplica cada recomendación. El orden importa para una transición fluida: establece primero la relación de aspecto, luego el factor de zoom2. El monitor puede arrancar mientras la sesión corre; desactivar el encuadre automático significa cancelar el registro del KVO y llamar a stopMonitoring2.

Una trampa de corrección viene con el nuevo sensor. Las cámaras frontales de iPhone anteriores montaban el sensor en Landscape Left, así que una selfie en retrato llegaba en la orientación nativa del sensor cargando una etiqueta EXIF que pedía una rotación de 270 grados en la reproducción. El sensor de Center Stage está montado en Portrait, así que las apps que dependen de los viejos valores de rotación renderizarían las fotos de lado o al revés2. AVCapturePhotoOutput maneja esto por defecto mediante la compensación de orientación del sensor: rota físicamente las fotos procesadas HEIC, JPEG y sin comprimir, y actualiza los metadatos EXIF para que la salida quede en Landscape Left como antes, dejando que la lógica de rotación existente siga funcionando2. Dos salvedades: la compensación nunca aplica a Bayer RAW ni a Apple ProRAW, y Apple recomienda probar con la compensación desactivada (mediante cameraSensorOrientationCompensationEnabled) para obtener el mejor rendimiento, confirmando que la orientación permanezca correcta2.

Center Stage para video y llamadas

Para la grabación de video, dynamicAspectRatio funciona igual, pero las pistas de película QuickTime requieren que todas las muestras compartan dimensiones, así que cambiar la relación a mitad de captura detiene la grabación2. Con AVCaptureMovieFileOutput, la grabación se detiene automáticamente ante el cambio; con AVCaptureVideoDataOutput más AVAssetWriter, el timestamp de finalización de setDynamicAspectRatio es el punto de corte para terminar una grabación y empezar otra en la nueva relación2. Las grabaciones también ganan dos modos de estabilización cinematográfica con conciencia del rostro en esta cámara, cinematicExtended y cinematicExtendedEnhanced, que priorizan mantener al sujeto estable por encima del fondo2.

Las videollamadas tienen el camino más simple. Center Stage ya está activo para las apps de conferencia que usan el modo de fondo Voice over IP, alternado por el usuario desde el menú de Efectos de Video del Centro de Control2. Las apps sin ese modo de fondo adoptan la API de Center Stage directamente: se activa por proceso (como Portrait, Studio Light y Gestures), así que establece un modo de control (cooperative para permitir un botón dentro de la app, o app), luego pon isCenterStageEnabled en true, y el encuadre mantiene a todos centrados2. Una mejora más de videollamada viene desactivada por defecto: un modo de estabilización de baja latencia en tiempo real, activado estableciendo el preferredVideoStabilizationMode de la conexión en lowLatency2.

Guía de adopción

Las tres sesiones recompensan una adopción por capas.

Para cada app de cámara de AVFoundation: Adopta Deferred Start primero. Si renderizas la previsualización con AVCaptureVideoPreviewLayer y recompilas contra el SDK de iOS 26+, el modo automático está activado gratis; verifícalo confirmando que automaticallyRunsDeferredStart sea true y que cada salida que no sea de previsualización tenga isDeferredStartEnabled = true1. Combínalo con isResponsiveCaptureEnabled en la salida de fotos para que una previsualización rápida sea también un obturador utilizable1.

Para pipelines de salida de datos y Metal: Renuncias a la ganancia gratuita. Adopta Deferred Start manual, dispara runDeferredStartWhenNeeded() después de que el primer fotograma se presente, y mantén corto el trabajo por fotograma1. Conecta la observación de systemPressureState para que el pipeline se degrade con gracia en un dispositivo caliente1.

Para ProRes y video de alta tasa de datos: Adopta Pro Video Storage en iOS 27 para que las escrituras sostenidas sean deterministas, condicionando en isProVideoStorageSupported y la verificación de ocupado antes de grabar1.

Para apps de cámara frontal y selfies en iPhone 17 / Air / 17 Pro: Descubre la cámara frontal .builtInUltraWideCamera, expón Tap to Rotate mediante dynamicAspectRatio, y superpón AVCaptureSmartFramingMonitor para el Auto Zoom y la Auto Rotación. Deja activada la compensación de orientación del sensor a menos que hayas medido una razón para desactivarla, y recuerda que nunca toca RAW2.

Preguntas frecuentes

¿Cuánto más rápido hace realmente el lanzamiento Deferred Start?

Apple midió aproximadamente el doble de rápido sobre un panel de luces de laboratorio: un lanzamiento que rondaba el segundo cayó a cerca de la mitad de eso con Deferred Start activado, y las sesiones de captura complejas pueden mejorar más1. La ganancia viene de inicializar solo la salida de previsualización antes del primer fotograma, aplazando todas las demás salidas hasta después de que la previsualización aparece1.

¿Obtengo Deferred Start automáticamente?

Si tu app renderiza la previsualización con AVCaptureVideoPreviewLayer y recompila contra el SDK de iOS 26 o posterior, sí: el modo automático está activado y automaticallyRunsDeferredStart tiene true por defecto1. Las apps que renderizan la previsualización con AVCaptureVideoDataOutput no lo obtienen automáticamente y deben adoptar Deferred Start manual para reclamar la misma ganancia de lanzamiento1.

¿Por qué mi primera foto sigue siendo lenta incluso con Deferred Start?

Aplazar la salida de fotos acelera la previsualización pero no la primera captura, porque el sistema todavía termina de inicializar la salida de fotos aplazada antes de que una captura pueda comenzar1. Establece isResponsiveCaptureEnabled en AVCapturePhotoOutput para almacenar la captura en búfer de modo que el momento quede registrado incluso antes de que la salida de fotos esté completamente lista1.

¿Cómo encuentro la cámara frontal de Center Stage en el código?

Usa un AVCaptureDevice.DiscoverySession solicitando el tipo de dispositivo .builtInUltraWideCamera en la posición .front; la cámara frontal de Center Stage se expone como ese dispositivo frontal ultra gran angular en el iPhone 17, el iPhone Air y el iPhone 17 Pro2. A partir de ahí, establece dynamicAspectRatio para recortar cualquier relación de aspecto soportada del sensor cuadrado sin reconstruir la sesión2.

¿Se romperá la vieja lógica de rotación de la cámara frontal en el nuevo sensor?

Puede romperse, porque el sensor de Center Stage está montado en Portrait en lugar del histórico Landscape Left, así que los búferes sin compensar aparecerían de lado o al revés2. AVCapturePhotoOutput aplica la compensación de orientación del sensor por defecto para fotos procesadas HEIC, JPEG y sin comprimir (nunca RAW), así que los valores de rotación existentes siguen funcionando a menos que desactives cameraSensorOrientationCompensationEnabled2.

El clúster del Ecosistema de Apple

Este artículo se sitúa en el carril de la cámara y la captura: el flujo de trabajo de AVFoundation HDR y Apple Log para la captura y visualización de video profesional; las tres superficies de una app de iOS para dónde encaja la captura en la arquitectura de la app; de qué está hecho SwiftUI para la capa de UI que aloja la previsualización; y la matriz de plataformas de Apple para qué funciones llegan a dónde. El centro es la Serie del Ecosistema de Apple. Para contexto de iOS con agentes de IA, consulta la guía de Desarrollo de Agentes en iOS.

Referencias


  1. Apple, “Build a responsive camera app that launches quickly,” WWDC26 Session 303. Presented by Jake of Apple’s camera performance team. Covers the four-stage launch sequence, the Deferred Start API (automatic and manual modes, isDeferredStartEnabled, automaticallyRunsDeferredStart, runDeferredStartWhenNeeded(), and the sessionWillRunDeferredStart / sessionDidRunDeferredStart callbacks), isResponsiveCaptureEnabled, preview rendering via AVCaptureVideoPreviewLayer versus AVCaptureVideoDataOutput, hardware cost and system pressure APIs, and Pro Video Storage (usesProVideoStorage, isProVideoStorageSupported, remainingCapacity) new in iOS 27. 

  2. Apple, “Support the Center Stage front camera in your iOS app,” WWDC26 Session 341. Presented by Tracy of Apple’s Camera Software team. Covers the square Center Stage front-camera sensor on iPhone 17, iPhone Air, and iPhone 17 Pro accessed as the front .builtInUltraWideCamera; dynamicAspectRatio and supportedDynamicAspectRatios; AVCaptureSmartFramingMonitor (enabledFramings, supportedFramings, recommendedFraming, stopMonitoring) for Auto Zoom and Auto Rotate; sensor orientation compensation (cameraSensorOrientationCompensationEnabled); cinematic stabilization modes; and the Center Stage video-call API (isCenterStageEnabled, control modes) plus lowLatency video stabilization. 

  3. Apple Developer Documentation: AVFoundation. The framework reference covering capture, editing, and playback APIs (AVCaptureSession, AVCaptureDevice, AVCaptureDeviceInput, AVCaptureVideoPreviewLayer, AVCapturePhotoOutput, AVCaptureMovieFileOutput, AVCaptureVideoDataOutput, AVAssetWriter, and AVCaptureConnection) referenced throughout both sessions. 

  4. Apple, “Implement high resolution photo capture,” WWDC26 Session 304. Presented by Mohit of Apple’s Camera Software team. Source for fast capture prioritization behavior (the system detecting rapid captures and adapting quality to balanced), the iOS 27 deferred processing of balanced fast captures on iPhone 16 and iPhone 17, the basketball demo (one blocked capture versus five responsive shots), the 24MP/48MP extension to the iPhone 16 Pro telephoto and iPhone 17 ultra wide cameras, the 18MP Center Stage front camera format, and the prioritization-level requirements per resolution. The property name isFastCapturePrioritizationEnabled (iOS 17.0+) verified against Apple’s AVCapturePhotoOutput documentation

  5. Apple, “Camera and Photo Technologies Group Lab,” WWDC26 Lab 8018. Source for the session-reconfiguration batching rule (the capture session re-resolving its object graph on disruptive property changes, and the bank-transaction analogy for beginConfiguration() / commitConfiguration()) and the confirmation that Deferred Start and the prepared-photo-settings array are orthogonal and complementary. Paraphrased from a locally transcribed recording of the WWDC 2026 Camera and Photo Technologies Group Lab; Apple publishes no captions for the labs. The symbols beginConfiguration() and commitConfiguration() on AVCaptureSession, and setPreparedPhotoSettingsArray(_:completionHandler:) on AVCapturePhotoOutput, verified against Apple’s AVCaptureSession documentation and AVCapturePhotoOutput documentation

Artículos relacionados

Entrada de imágenes en Foundation Models en iOS 27

iOS 27 le da Vision al LLM Foundation Models en el dispositivo: coloca una UIImage, una CGImage o un pixel buffer en un …

12 min de lectura

Novedades de SwiftUI para iOS 27

iOS 27 rehace las listas, los documentos, las barras de herramientas y los errores de SwiftUI: arrastrar para reordenar,…

25 min de lectura

The Robots Are Taking Exams in My Search Console

First-party GSC data: 91% of 3.8M impressions fail a human-query filter. Exam questions, pasted errors, and agent sweeps…

10 min de lectura