← Tous les articles

Créer une application photo réactive sous iOS 27

L’équipe performance de l’appareil photo d’Apple a réduit de moitié le temps de lancement de l’appareil photo en différant tout sauf la sortie d’aperçu : un lancement qui approchait la seconde tombe à environ la moitié, soit une amélioration d’un facteur deux mesurée sur un panneau lumineux de laboratoire1. Le levier est l’API Deferred Start, disponible à partir d’iOS 26, et le principe qui la sous-tend est sans détour. Le facteur le plus important pour qu’un lancement d’appareil photo paraisse rapide est la vitesse à laquelle l’image d’aperçu apparaît à l’écran1.

Le cadre de cet article est « ce qu’une application AVFoundation doit faire pour paraître instantanée », car l’écart entre un appareil photo techniquement en marche et un appareil photo qui paraît prêt à l’emploi est exactement celui par lequel se glisse un domino qui tombe. Trois sessions de la WWDC26 couvrent le sujet : la session 303 sur le lancement réactif et la capture continue, la session 304 sur la capture haute résolution sans perte de réactivité, et la session 341 sur la nouvelle caméra frontale carrée Center Stage. Elles se rejoignent à travers la même architecture de session de capture, si bien qu’adopter l’une rend les autres moins coûteuses.

TL;DR

  • La séquence de lancement en quatre étapes (lancement de l’application, configuration/démarrage de la session, initialisation des sorties, diffusion de l’aperçu) passe l’essentiel de son temps à initialiser les sorties. Deferred Start reporte toutes les sorties sauf celle qui restitue l’aperçu, divisant par deux le lancement dans la mesure de laboratoire d’Apple1.
  • Les applications basées sur AVCaptureVideoPreviewLayer recompilées avec iOS 26+ obtiennent automatiquement Deferred Start gratuitement ; les applications à sortie de données vidéo doivent adopter le mode manuel pour revendiquer le même gain1.
  • Différer la sortie photo accélère l’aperçu mais pas la première capture, alors associez-la à isResponsiveCaptureEnabled sur AVCapturePhotoOutput pour mettre la prise en mémoire tampon jusqu’à ce que le traitement soit prêt1.
  • Pro Video Storage, nouveauté d’iOS 27, préalloue un pool de stockage à l’échelle du système afin que les écritures ProRes à haut débit restent déterministes au lieu de saccader sous la contention du système de fichiers1.
  • La caméra frontale Center Stage (iPhone 17, iPhone Air, iPhone 17 Pro) est un capteur carré exposé sous forme de .builtInUltraWideCamera frontale ; dynamicAspectRatio recadre n’importe quel format à partir du carré sans reconstruire la session, et AVCaptureSmartFramingMonitor pilote Auto Zoom et Auto Rotate2.

La séquence de lancement comporte quatre étapes

Watch on Apple Developer ↗

Jake, ingénieur de l’équipe performance de l’appareil photo d’Apple, parcourt les quatre étapes de lancement dans la session 303.

Un lancement d’appareil photo traverse quatre étapes, et Jake, ingénieur d’Apple, les décompose dans l’ordre1. D’abord l’application se lance : l’éditeur de liens charge le binaire, les initialiseurs statiques s’exécutent, les scènes d’interface sont créées. Ensuite la session est configurée et démarrée : l’initialisation d’AVCaptureSession, la validation de la configuration et le démarrage de la session consomment tous du temps et des ressources système. Troisièmement, chaque AVCaptureOutput s’initialise, et ce temps croît avec le nombre de sorties et leurs réglages de qualité. Quatrièmement, l’aperçu commence à se diffuser et les images parviennent à l’application1.

Le travail pour rendre cela rapide commence dans l’interface. Divisez le lancement en deux phases : les ressources critiques pour afficher l’aperçu, et les ressources qui peuvent attendre que l’aperçu fonctionne1. Dans AVCam, l’application photo d’exemple classique d’AVFoundation, l’aperçu de l’appareil photo et le bouton de déclenchement sont les seuls éléments dont quelqu’un a besoin dès le lancement ; la vignette de l’image et le sélecteur de mode peuvent apparaître en fondu ensuite. Le principe se généralise au-delà de l’interface. Toute ressource créée avant que l’aperçu ne s’affiche allonge le temps de lancement1.

La session elle-même est le point de pression suivant. Comme AVCaptureSession coordonne chaque objet de capture, Jake la crée en premier, dès que le thread principal termine la configuration de l’interface. Mais créer la session bloque le thread principal, alors déléguez sa création hors du thread principal pour qu’elle s’exécute en parallèle de la configuration des scènes d’interface et éviter un blocage1. La même prudence s’applique à startRunning() et stopRunning() : ce sont tous deux des appels bloquants, et les invoquer sur le thread principal bloquera l’application1. Validez une seule configuration au départ plutôt que d’en valider plusieurs, puisque chaque reconfiguration allonge le lancement1.

Deferred Start : le gain d’un facteur deux

L’initialisation des sorties est la partie la plus coûteuse du lancement, et la plupart des sorties sont du poids mort à cet instant. Pour restituer l’aperçu, l’application n’a besoin que d’une couche d’aperçu ou d’une seule sortie ; la sortie de fichier vidéo et la sortie photo ne contribuent en rien à la première image1. Deferred Start exploite cela. Il reporte l’initialisation des sorties jusqu’à ce que le lancement soit terminé, de sorte que seule la sortie d’aperçu s’initialise avant l’affichage de la première image1.

Chaque AVCaptureOutput et l’AVCaptureVideoPreviewLayer portent une propriété isDeferredStartEnabled ; réglez-la sur true pour différer cette sortie, et différez tout sauf celle qui restitue l’aperçu1. Il existe deux modes pour décider du moment où le travail différé s’exécute. En mode automatique, le système choisit le meilleur moment, peu après l’apparition de l’aperçu, et déclenche deux rappels de délégué pour que l’application puisse le suivre : sessionWillRunDeferredStart avant le début de l’initialisation, et sessionDidRunDeferredStart après son achèvement1. Les applications recompilées avec le SDK iOS 26 ou ultérieur obtiennent le mode automatique par défaut, avec automaticallyRunsDeferredStart déjà réglé sur 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

Le mode manuel rend le contrôle à l’application. Réglez automaticallyRunsDeferredStart sur false, effectuez le travail de démarrage qui doit venir en premier (lecture des préférences, construction de l’interface non critique), puis appelez runDeferredStartWhenNeeded() pour indiquer au système qu’il peut procéder1. Le mode manuel compte pour une architecture en particulier : les applications qui restituent l’aperçu avec AVCaptureVideoDataOutput. Deferred Start ne s’applique pas automatiquement à une sortie de données, alors ces applications adoptent Deferred Start en mode manuel pour revendiquer le même gain de lancement, le déclenchant généralement une fois la première image présentée (Jake suit la présentation via un CAMetalLayer)1.

Apple a vérifié le résultat sur un panneau lumineux de laboratoire, en comparant deux téléphones capturant un motif de LED en expansion. Le téléphone avec Deferred Start activé a saisi le motif alors que les LED rouges et vertes étaient allumées ; celui sans cette fonctionnalité n’a fini de se lancer qu’après que les LED vertes se sont presque éteintes1. Chronométré, le lancement sans Deferred Start approchait la seconde ; avec lui, le lancement était divisé par deux, une amélioration d’un facteur deux, les sessions de capture complexes en bénéficiant encore davantage1.

Regroupez les changements perturbateurs pour que le graphe se reconstruise une seule fois

La discipline de configuration unique de la séquence de lancement repose sur un mécanisme qu’un ingénieur appareil photo du panel de laboratoire de la WWDC26 a explicité. AVCaptureSession coordonne un graphe d’objets de capture, et chaque fois que vous définissez une propriété qui force un changement perturbateur, la session re-résout ce graphe5. Reconfigurer signifie généralement changer plus d’une chose à la fois, passer du mode photo au mode vidéo ou abaisser un format actif vers une résolution inférieure, si bien que définir chaque propriété isolément fait reconstruire le graphe à chaque étape5. Enveloppez tout le lot dans beginConfiguration() et commitConfiguration() et le graphe se re-résout exactement une fois, à la validation, que le lot contienne un changement ou vingt5. Le membre du panel a comparé la paire à une transaction bancaire : beginConfiguration() l’ouvre, le retrait et le dépôt restent en attente, et commitConfiguration() les règle ensemble5.

Deferred Start se compose proprement avec un levier de pré-lancement de plus. Le panel a confirmé que Deferred Start et le tableau de réglages photo préparés (setPreparedPhotoSettingsArray(_:completionHandler:) sur AVCapturePhotoOutput) sont orthogonaux et complémentaires : l’un diffère la disponibilité de la sortie pour que l’aperçu apparaisse en premier tandis que l’autre préalloue les ressources du pipeline d’image fixe dans le pire des cas, combinables sans conflit5.

Un aperçu rapide n’est pas une capture rapide

Différer la sortie photo a un piège qu’il vaut la peine d’énoncer clairement : l’aperçu démarre bien plus tôt, mais le temps avant la première capture reste le même, car le système doit toujours terminer l’initialisation de la sortie photo différée avant qu’une capture puisse commencer1. L’aperçu est affiché, l’utilisateur appuie sur le déclencheur, et le cliché est tout de même manqué.

La solution est isResponsiveCaptureEnabled sur AVCapturePhotoOutput. La propriété ajoute une mise en mémoire tampon entre le démarrage d’une capture et le moment où le traitement commence, de sorte que quelqu’un peut capturer l’instant même si la sortie photo n’est pas entièrement prête1. Dans la démo des dominos d’Apple, le téléphone exécutant la capture réactive aux côtés de Deferred Start a obtenu un cliché net des dominos qui tombaient, tandis que le téléphone témoin l’a entièrement manqué1. L’association est le modèle recommandé : adoptez Deferred Start avec la sortie photo de qualité, gardez un lancement rapide, et laissez la capture réactive couvrir la fenêtre avant que la sortie photo ne finisse de s’initialiser1.

Capture haute résolution en rafale

Watch on Apple Developer ↗

Mohit, ingénieur de l’équipe Camera Software d’Apple, démontre la priorisation de capture rapide sur un terrain de basket dans la session 304.

La session 304 prolonge l’histoire de la réactivité aux rafales haute résolution. Le mécanisme est isFastCapturePrioritizationEnabled sur AVCapturePhotoOutput, une propriété existante plutôt qu’une nouveauté : une fois activée, le système détecte plusieurs captures rapprochées et adapte la qualité photo, du réglage de qualité maximale vers un réglage équilibré, qui demande moins de temps tant pour la capture que pour le traitement4. La nouveauté arrive avec le système d’exploitation. À partir d’iOS 27 sur iPhone 16 et iPhone 17, le système traite également ces captures rapides équilibrées plus tard via le traitement photo différé, le pipeline d’arrière-plan de la WWDC23 qui termine une photo sans bloquer la capture suivante (à distinguer de l’API de lancement Deferred Start ci-dessus)4. Dans la démo de basket d’Apple, la différence était d’une capture bloquée contre cinq clichés réactifs de la même action une fois le traitement différé, la capture réactive et la priorisation de capture rapide tous activés4.

La même session met à jour le tableau de couverture haute résolution. La prise en charge de la capture 24 MP et 48 MP s’étend à l’appareil photo téléobjectif sur iPhone 16 Pro et à l’appareil photo ultra grand-angle sur iPhone 17, et une option 18 MP n’existe que sur la caméra frontale Center Stage de l’iPhone 174. Le réglage de priorisation conditionne ce que vous pouvez demander : le 12 MP fonctionne sur les trois niveaux de priorisation, le 48 MP en image unique nécessite le niveau équilibré ou qualité, et les formats fusionnés multi-images 18 MP et 24 MP exigent la priorisation qualité en raison de leur traitement plus long4. Le traitement différé est ce qui rend ces fusions multi-images praticables dans une application réactive, puisque le gros du travail se déroule en arrière-plan sans partager de mémoire avec la session de capture4.

Restituer l’aperçu : couche ou sortie de données

Deux sorties peuvent piloter l’aperçu, et le choix détermine la quantité de travail restante. AVCaptureVideoPreviewLayer affiche exactement ce que voit l’appareil photo sans aucun travail par image dans l’application : elle gère automatiquement le mappage tonal HDR, maintient une faible charge CPU et GPU, et est optimisée pour un affichage à faible latence1. La contrepartie est qu’elle n’offre aucun accès par image1. (Pour le volet HDR de ce mappage tonal automatique, l’article sur AVFoundation HDR et Apple Log couvre en profondeur le pipeline de capture et d’affichage.)

AVCaptureVideoDataOutput est l’alternative lorsque le traitement par image est la priorité. Elle prend la place de la couche d’aperçu comme sortie d’affichage principale et donne à l’application le contrôle du flux d’images : surimpressions d’interface personnalisées par image, intégration de Metal, analyse d’image1. Le coût est l’adoption manuelle de Deferred Start notée ci-dessus, plus une règle de discipline : gardez le travail par image court pour éviter les pertes d’images et maintenir une expérience fluide1. Utilisez la couche d’aperçu lorsque vous n’avez besoin que d’afficher le flux ; recourez à la sortie de données lorsque vous traitez réellement les images.

Maintenir les performances sous pression

L’essentiel du développement d’appareil photo se fait à un bureau, dans un environnement contrôlé, mais les gens utilisent l’application par une journée chaude et ensoleillée, et le système se ralentit à mesure que l’appareil chauffe1. Deux API de coût permettent à une application de l’anticiper. Le coût matériel renvoie une valeur entre 0 et 1 représentant la part du matériel de la session en cours d’utilisation ; au-dessus de 1, cela signifie que le système ne peut pas prendre en charge la configuration1. Le coût augmente avec le nombre d’appareils photo, les formats actifs (1080p contre 4K), la cadence d’images et le fait que le format soit groupé (« binned »). Le coût matériel suppose la cadence d’images maximale d’un format, alors une application fonctionnant à 30 ips sur un format 60 ips devrait définir le remplacement de cadence d’images pour abaisser le coût signalé1.

Le coût de pression système renvoie également 0 à 1, représentant le coût de l’état actuel, et franchir 1 rend la configuration intenable1. Le modèle d’adoption : après avoir validé la configuration, vérifiez que le coût matériel reste à 1 ou en dessous, puis observez le systemPressureState d’AVCaptureDevice et enregistrez un gestionnaire de changements1. À mesure que la pression augmente, le gestionnaire réduit la cadence d’images de l’appareil de capture, limite le travail du GPU ou de l’Apple Neural Engine, et minimise le travail d’interface1.

Pro Video Storage : des écritures ProRes déterministes

Watch on Apple Developer ↗

La session 303 présente Pro Video Storage, nouveauté d’iOS 27, pour la capture vidéo à haut débit.

L’E/S traditionnelle du système de fichiers est non déterministe : le système jongle entre des opérations concurrentes, la fragmentation de la mémoire et l’usure du stockage, si bien que le timing d’écriture varie1. Les captures à haut débit comme ProRes nécessitent une E/S soutenue à large bande passante pour enregistrer sans perdre d’images, et un timing variable est exactement la mauvaise propriété. Pro Video Storage, nouveauté d’iOS 27, résout le problème en suivant et en gérant un stockage préalloué pour les captures à haut débit. C’est une ressource à l’échelle du système que toutes les applications partagent, et elle se branche sur les API d’enregistrement vidéo existantes1.

Les applications y adhèrent en réglant usesProVideoStorage sur AVCaptureMovieFileOutput, ou sur AVAssetWriter lors d’un enregistrement à partir d’une sortie de données vidéo1. Le stockage gère alors l’allocation et l’E/S de fichiers, en maintenant des performances d’écriture constantes pour les codecs à haut débit. La séquence d’adoption : Pro Video Storage est un singleton, alors obtenez-le via son accesseur partagé et confirmez la prise en charge ; construisez la sortie de fichier vidéo, la session, les connexions et le format choisi ; vérifiez isProVideoStorageSupported sur la sortie de fichier vidéo ; confirmez que le stockage n’est pas occupé à redimensionner ou à traiter une création ou une suppression de fichier ; puis activez-le et démarrez l’enregistrement1. Pendant la capture, l’enregistrement écrit dans le pool préalloué et se déplace vers l’emplacement final une fois la capture terminée1. Les réglages de l’appareil photo permettent désormais aux gens de contrôler la quantité de stockage à allouer, la méthode remainingCapacity indique ce qu’il reste, et une méthode d’ouverture des réglages amène l’utilisateur vers cette interface depuis l’application1.

La caméra frontale Center Stage est carrée

Watch on Apple Developer ↗

Tracy, ingénieure de l’équipe Camera Software d’Apple, présente la caméra frontale carrée Center Stage dans la session 341.

Les capteurs frontaux traditionnels ont un rapport d’aspect 4x3 qui verrouille le cadrage sur l’orientation du téléphone. La caméra frontale Center Stage sur iPhone 17, iPhone Air et iPhone 17 Pro utilise un capteur d’image carré associé à un objectif de 95 degrés, le champ de vision le plus large de toutes les caméras frontales d’iPhone2. Tracy, ingénieure d’Apple, résume le bénéfice : la forme carrée permet à l’utilisateur de choisir n’importe quel rapport d’aspect, en prenant un selfie portrait ou paysage sans faire pivoter le téléphone, ce qui maintient une prise en main sécurisée à une seule main et une image centrée au contact visuel naturel2.

La configuration de la session relève de l’AVFoundation conventionnel3. Créez une AVCaptureSession, trouvez l’appareil photo en tant qu’AVCaptureDevice avec le type de périphérique .builtInUltraWideCamera frontal, enveloppez-le dans une AVCaptureDeviceInput, ajoutez une AVCaptureVideoPreviewLayer pour l’aperçu et un AVCapturePhotoOutput pour les photos ; la session forme implicitement les AVCaptureConnection entre les types de média compatibles2.

La brique de base est dynamicAspectRatio sur AVCaptureDevice, disponible à partir d’iOS 26. Régler la propriété recadre le rapport d’aspect choisi à partir du capteur carré sans reconstruire la session ni interrompre l’aperçu, si bien que le changement est transparent2. La propriété prend en charge cinq rapports d’aspect (3x4, 4x3, 9x16, 16x9 et 1x1) sur les formats carrés de 1280 jusqu’à 4032, avec une contrainte : le format photo 4032 ne prend en charge que les rapports 3x4 et 4x3, car ceux-ci préservent la plus haute résolution2.

// 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()

Chaque format annonce ses supportedDynamicAspectRatios, et régler le rapport renvoie l’horodatage de la première image où le changement prend effet2. L’horodatage renvoyé n’est pas décoratif : pour l’enregistrement vidéo, c’est la couture qui vous permet de terminer un clip et de commencer le suivant au nouveau rapport d’aspect.

Auto Zoom, Auto Rotate et compensation du capteur

AVCaptureSmartFramingMonitor (iOS 26 et ultérieur, obtenu auprès de l’appareil photo) se place au-dessus de dynamicAspectRatio et alimente Auto Zoom et Auto Rotate2. Le moniteur fournit des recommandations de cadrage périodiques issues de la détection automatique du visage et du regard, chacune portant un rapport d’aspect et un facteur de zoom que l’application peut appliquer ou ignorer ; comme il cible la capture photo, il ne recommande que lorsque le format photo 4032 est actif2. Par défaut, il ne recommande rien, alors définissez enabledFramings (sur tous les supportedFramings, ou un sous-ensemble choisi), puis observez par clé-valeur recommendedFraming et appliquez chaque recommandation. L’ordre compte pour une transition fluide : définissez d’abord le rapport d’aspect, puis le facteur de zoom2. Le moniteur peut démarrer pendant que la session tourne ; désactiver le cadrage automatique signifie désinscrire le KVO et appeler stopMonitoring2.

Un piège de correction accompagne le nouveau capteur. Les caméras frontales d’iPhone précédentes montaient le capteur en orientation Landscape Left, si bien qu’un selfie portrait arrivait dans l’orientation native du capteur en portant une balise EXIF demandant une rotation de 270 degrés à la lecture. Le capteur Center Stage est monté en orientation Portrait, de sorte que les applications s’appuyant sur les anciennes valeurs de rotation afficheraient les photos de côté ou à l’envers2. AVCapturePhotoOutput gère cela par défaut grâce à la compensation d’orientation du capteur : il fait physiquement pivoter les photos traitées HEIC, JPEG et non compressées et met à jour les métadonnées EXIF de sorte que la sortie arrive en Landscape Left comme auparavant, permettant à la logique de rotation existante de continuer à fonctionner2. Deux réserves : la compensation ne s’applique jamais au Bayer RAW ni à l’Apple ProRAW, et Apple recommande de tester avec la compensation désactivée (via cameraSensorOrientationCompensationEnabled) pour de meilleures performances, en confirmant que l’orientation reste correcte2.

Center Stage pour la vidéo et les appels

Pour l’enregistrement vidéo, dynamicAspectRatio fonctionne de la même manière, mais les pistes vidéo QuickTime exigent que tous les échantillons partagent les mêmes dimensions, si bien que changer le rapport en cours de capture arrête l’enregistrement2. Avec AVCaptureMovieFileOutput, l’enregistrement s’arrête automatiquement au changement ; avec AVCaptureVideoDataOutput plus AVAssetWriter, l’horodatage de complétion de setDynamicAspectRatio est le point de coupe pour terminer un enregistrement et en commencer un autre au nouveau rapport2. Les enregistrements gagnent aussi deux modes de stabilisation cinématique sensibles au visage sur cette caméra, cinematicExtended et cinematicExtendedEnhanced, qui privilégient le maintien du sujet stable par rapport à l’arrière-plan2.

Les appels vidéo ont le chemin le plus simple. Center Stage est déjà actif pour les applications de conférence qui utilisent le mode d’arrière-plan Voice over IP, basculé par l’utilisateur depuis le menu Effets vidéo du Centre de contrôle2. Les applications dépourvues de ce mode d’arrière-plan adoptent l’API Center Stage directement : elle est activée par processus (comme Portrait, Studio Light et Gestures), alors définissez un mode de contrôle (cooperative pour autoriser un bouton intégré à l’application, ou app), puis réglez isCenterStageEnabled sur true, et le cadrage garde tout le monde centré2. Une amélioration supplémentaire des appels vidéo est livrée désactivée par défaut : un mode de stabilisation à faible latence en temps réel, activé en réglant le preferredVideoStabilizationMode de la connexion sur lowLatency2.

Conseils d’adoption

Les trois sessions récompensent une adoption en couches.

Pour toute application photo AVFoundation : Adoptez Deferred Start en premier. Si vous restituez l’aperçu avec AVCaptureVideoPreviewLayer et recompilez avec le SDK iOS 26+, le mode automatique est activé gratuitement ; vérifiez-le en confirmant qu’automaticallyRunsDeferredStart est true et que chaque sortie hors aperçu a isDeferredStartEnabled = true1. Associez-le à isResponsiveCaptureEnabled sur la sortie photo pour qu’un aperçu rapide soit aussi un déclencheur utilisable1.

Pour les pipelines à sortie de données et Metal : Vous renoncez au gain gratuit. Adoptez Deferred Start en mode manuel, déclenchez runDeferredStartWhenNeeded() après la présentation de la première image, et gardez le travail par image court1. Câblez l’observation de systemPressureState pour que le pipeline se dégrade gracieusement sur un appareil chaud1.

Pour ProRes et la vidéo à haut débit : Adoptez Pro Video Storage sous iOS 27 pour rendre déterministes les écritures soutenues, en conditionnant sur isProVideoStorageSupported et la vérification d’occupation avant l’enregistrement1.

Pour les applications de caméra frontale et de selfie sur iPhone 17 / Air / 17 Pro : Découvrez la .builtInUltraWideCamera frontale, exposez Tap to Rotate via dynamicAspectRatio, et superposez AVCaptureSmartFramingMonitor pour Auto Zoom et Auto Rotate. Laissez la compensation d’orientation du capteur activée à moins d’avoir mesuré une raison de la désactiver, et rappelez-vous qu’elle ne touche jamais au RAW2.

FAQ

À quel point Deferred Start accélère-t-il réellement le lancement ?

Apple a mesuré une vitesse environ deux fois supérieure sur un panneau lumineux de laboratoire : un lancement approchant la seconde est tombé à environ la moitié avec Deferred Start activé, et les sessions de capture complexes peuvent s’améliorer davantage1. Le gain provient de l’initialisation de la seule sortie d’aperçu avant la première image, en différant toutes les autres sorties jusqu’après l’apparition de l’aperçu1.

Est-ce que j’obtiens Deferred Start automatiquement ?

Si votre application restitue l’aperçu avec AVCaptureVideoPreviewLayer et recompile avec le SDK iOS 26 ou ultérieur, oui : le mode automatique est activé et automaticallyRunsDeferredStart vaut true par défaut1. Les applications qui restituent l’aperçu avec AVCaptureVideoDataOutput ne l’obtiennent pas automatiquement et doivent adopter Deferred Start en mode manuel pour revendiquer le même gain de lancement1.

Pourquoi ma première photo est-elle encore lente même avec Deferred Start ?

Différer la sortie photo accélère l’aperçu mais pas la première capture, car le système termine encore d’initialiser la sortie photo différée avant qu’une capture puisse commencer1. Réglez isResponsiveCaptureEnabled sur AVCapturePhotoOutput pour mettre la capture en mémoire tampon afin que l’instant soit enregistré avant même que la sortie photo ne soit entièrement prête1.

Comment trouver la caméra frontale Center Stage dans le code ?

Utilisez une AVCaptureDevice.DiscoverySession demandant le type de périphérique .builtInUltraWideCamera à la position .front ; la caméra frontale Center Stage est exposée comme ce périphérique frontal ultra grand-angle sur iPhone 17, iPhone Air et iPhone 17 Pro2. À partir de là, réglez dynamicAspectRatio pour recadrer n’importe quel rapport d’aspect pris en charge à partir du capteur carré sans reconstruire la session2.

L’ancienne logique de rotation de la caméra frontale va-t-elle casser sur le nouveau capteur ?

C’est possible, car le capteur Center Stage est monté en Portrait plutôt qu’en Landscape Left historique, de sorte que des tampons non compensés apparaîtraient de côté ou à l’envers2. AVCapturePhotoOutput applique par défaut la compensation d’orientation du capteur pour les photos traitées HEIC, JPEG et non compressées (jamais le RAW), si bien que les valeurs de rotation existantes continuent de fonctionner à moins que vous ne désactiviez cameraSensorOrientationCompensationEnabled2.

Le cluster Apple Ecosystem

Cet article s’inscrit dans la voie de la capture et de l’appareil photo : le workflow AVFoundation HDR et Apple Log pour la capture et l’affichage pro-vidéo ; les trois surfaces d’une application iOS pour la place de la capture dans l’architecture d’application ; de quoi est faite SwiftUI pour la couche d’interface qui héberge l’aperçu ; et la matrice des plateformes Apple pour savoir où chaque fonctionnalité atterrit. Le hub est la série Apple Ecosystem. Pour le contexte iOS-avec-agents-IA, consultez le guide de développement d’agents iOS.

Références


  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

Articles connexes

L'entrée d'image dans Foundation Models sous iOS 27

iOS 27 dote le LLM Foundation Models embarqué de capacités Vision : glissez une UIImage, une CGImage ou un pixel buffer …

12 min de lecture

SwiftData dans iOS 27 : observation et historique

iOS 27 dote SwiftData d'une observation des changements de premier ordre avec ResultsObserver, d'une observation de l'hi…

11 min de lecture

Loop Engineering: Loops Win Where Verification Is Cheap

Loop engineering, checked against Boris Cherny's full transcripts: every loop he names has cheap verification. That cons…

19 min de lecture