Photo Editing Extension : ce que c'est et les capacités de l'extension pour iOS

Auteur : IT Sectr Publié le : 2026-06-15 Temps de lecture : 9 min

Photo Editing Extension est un mécanisme iOS qui permet aux applications tierces d'ajouter des outils d'édition directement dans l'application Photos système. Contrairement aux éditeurs complets, l'extension ne charge pas la photo dans une application séparée — l'utilisateur applique des filtres, ajuste les couleurs ou ajoute des effets sans quitter l'interface standard. Selon la documentation développeur Apple (2025), PhotoKit fournit plus de 40 API pour travailler avec les ressources photo, y compris PHAdjustmentData et PHContentEditingController.

Points clés

  • Photo Editing Extension intègre des outils d'édition dans l'application Photos standard d'iOS sans changer de programme
  • L'architecture repose sur le protocole PHContentEditingController, qui gère l'affichage de l'interface et l'obtention de l'image originale
  • L'extension utilise l'édition non destructive — toutes les modifications sont enregistrées sous forme de AdjustmentData, tandis que l'original reste intact
  • Pour travailler avec l'image, l'extension reçoit PHContentEditingInput avec le fichier photo complet et les métadonnées
  • PhotoKit fournit un accès aux ressources photo via PHAsset, PHAssetResource et PHImageManager

Qu'est-ce que Photo Editing Extension sur iOS

Photo Editing Extension est un type d'extension d'application sur iOS qui intègre des outils de traitement d'image dans l'interface standard de l'application Photos. L'utilisateur ouvre une photo, appuie sur le bouton Modifier et sélectionne l'extension souhaitée dans la liste des extensions installées. Après l'édition, le résultat est enregistré dans la bibliothèque et le fichier original reste disponible pour une restauration.

Cette architecture résout un problème clé de l'expérience utilisateur : il n'est pas nécessaire de changer d'application, d'exporter et d'importer des images, ou de suivre les versions. Selon la WWDC 2025, toutes les extensions fonctionnent dans un processus isolé avec leur propre bac à sable et un temps d'exécution limité — jusqu'à 30 secondes par opération d'édition.

L'extension n'a pas accès aux fichiers arbitraires dans la mémoire de l'appareil — seulement à la photo que l'utilisateur a explicitement transmise via l'interface de sélection. Cela garantit la sécurité des données utilisateur lors de l'utilisation d'outils tiers.

PhotoKit : Architecture et composants clés

PhotoKit est un framework Apple pour travailler avec la bibliothèque multimédia de l'appareil, introduit dans iOS 8. Il fournit un accès programmatique aux ressources Photos, y compris les images, les vidéos, les albums et les métadonnées. Pour les extensions d'édition, PhotoKit sert de couche intermédiaire entre le stockage et l'interface de modification.

PHAsset et PHAssetResource

PHAsset représente un objet multimédia individuel dans la bibliothèque — une photo ou une vidéo. Via PHAsset, on peut obtenir des métadonnées : date de capture, type de fichier, emplacement sur la carte et orientation de l'appareil photo. PHAssetResource donne accès aux ressources sous-jacentes — par exemple, au fichier photo original au format RAW ou HEIC.

Pour une extension d'édition, PHContentEditingInput est d'une importance cruciale — un objet qui contient le fichier image (ou vidéo) complet disponible pour la lecture et le traitement. L'extension reçoit cet objet au moment de l'activation et l'utilise comme matériel source.

PHImageManager et mise en cache

PHImageManager gère le chargement et la mise en cache des images. Pour une extension d'édition, il n'est pas utilisé directement — l'extension reçoit le fichier complet via PHContentEditingInput. Cependant, PHImageRequestOptions permet de configurer les paramètres de requête : taille, type de livraison (synchrone ou asynchrone) et format du résultat.

Selon Apple, PHImageManager met automatiquement en cache les vignettes d'images dans la RAM, ce qui accélère l'affichage répété des aperçus. Pour les extensions d'édition, il est recommandé d'utiliser PHImageRequestOptionsDeliveryModeHighQualityFormat pour obtenir la meilleure qualité d'image.

swift
let options = PHImageRequestOptions()
options.deliveryMode = .highQualityFormat
options.isSynchronous = true

PHImageManager.default().requestImage(
    for: asset,
    targetSize: .init(width: 1024, height: 1024),
    contentMode: .aspectFill,
    options: options
) { image, _ in
    // use image for display
}

Création d'une extension : PHContentEditingController

Chaque Photo Editing Extension implémente le protocole PHContentEditingController — l'élément central de contrôle de l'extension. Le protocole définit des méthodes pour afficher l'interface, recevoir les données d'entrée et enregistrer le résultat.

Méthodes clés du protocole

beginContentEditing(with:) est appelé au début de la session d'édition. L'extension reçoit PHContentEditingInput et doit afficher l'interface avec l'image originale. finishContentEditing(completionHandler:) termine l'édition — l'extension retourne PHContentEditingOutput avec le fichier modifié et AdjustmentData. cancelContentEditing() annule les modifications sans les enregistrer.

Une nuance importante : au moment de l'appel de beginContentEditing, l'extension obtient accès à une seule version de la photo — celle qui a été demandée par l'utilisateur. Elle ne peut pas accéder à une autre photo ou à un album. Il s'agit d'une restriction de bac à sable introduite par Apple pour des raisons de sécurité.

swift
class PhotoEditingViewController: UIViewController {

    override func beginContentEditing(
        with input: PHContentEditingInput
    ) {
        guard let url = input.fullSizeImageURL else { return }
        let image = CIImage(contentsOf: url)
        displayImage.image = UIImage(ciImage: image)
    }
}

Architecture de séparation

PHContentEditingController sépare l'interface d'édition de la logique d'enregistrement. Le processus principal iOS appelle beginContentEditing, l'extension affiche son interface utilisateur, l'utilisateur effectue des modifications, puis finishContentEditing génère un nouveau fichier. Apple recommande d'effectuer tous les traitements gourmands en ressources — filtres CIFilter, manipulations Core Image — dans un thread d'arrière-plan, et non dans le thread principal, afin de ne pas bloquer l'interface.

Édition non destructive via AdjustmentData

PHAdjustmentData est le mécanisme clé qui permet l'édition non destructive dans Photo Editing Extension. C'est un objet qui contient des informations sur les modifications appliquées dans un format arbitraire. L'extension sérialise les paramètres de filtres, les masques et les réglages dans AdjustmentData et les enregistre avec l'image modifiée.

Lors de la réouverture de la photo, l'extension lit AdjustmentData, restaure l'état précédent de l'interface et permet à l'utilisateur de continuer l'édition là où il s'était arrêté. Si l'extension n'est pas installée, la photo s'affiche dans la dernière version enregistrée, tandis que l'original est stocké séparément.

Selon la documentation Apple, PHAdjustmentData stocke formatIdentifier et formatVersion — des chaînes pour identifier le format des données. Lors de la mise à jour de l'extension, vous devez vérifier la version et gérer correctement les anciens formats.

swift
let adjustmentData = PHAdjustmentData(
    formatIdentifier: "com.example.photoediting",
    formatVersion: "1.0",
    data: NSKeyedArchiver.archivedData(
        withRootObject: params,
        requiringSecureCoding: true
    )
)
output.adjustmentData = adjustmentData

Au moment de finishContentEditing, l'extension écrit AdjustmentData dans l'objet PHContentEditingOutput avec le fichier image modifié. Le système enregistre ensuite les deux composants : la version pour l'affichage et les métadonnées pour restaurer la session d'édition.

Intégration avec l'application Photos

Photo Editing Extension apparaît automatiquement dans le menu de l'application Photos après l'installation de l'application qui la contient. L'utilisateur ouvre une photo, sélectionne Modifier, et dans la rangée inférieure d'outils, toutes les extensions d'édition installées — système et tierces — sont affichées.

Enregistrement de l'extension

L'extension est enregistrée via le Info.plist de l'application principale avec la clé NSExtensionActivationRule, qui spécifie quels types de contenu activent l'extension. Pour un éditeur de photos, ActivationRule nécessite généralement image — l'extension n'apparaîtra pas pour les vidéos ou les Live Photos.

Apple recommande de spécifier des types d'activation concrets pour ne pas surcharger le menu d'édition. Si l'extension ne prend en charge que JPEG et HEIC, il convient de limiter l'activation à ces formats.

xml
<!-- Info.plist -->
<key>NSExtension</key>
<dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.photo-editing</string>
    <key>NSExtensionActivationRule</key>
    <string>SUBQUERY (extensionItems,
        @count <= 1)</string>
</dict>

Interaction avec l'utilisateur

Après la sélection d'une extension, iOS crée un processus séparé avec un UIViewController personnalisé qui s'affiche par-dessus l'interface Photos. L'utilisateur voit sa photo, les outils de l'extension et les boutons Annuler/Terminé. L'extension ne peut pas modifier la navigation en dehors de son propre contrôleur ni accéder à d'autres parties du système.

Selon les Règles d'Interface Humaine d'Apple, l'interface de l'extension doit être minimale et fonctionnelle — sans publicité, liens superflus ou éléments de navigation inutiles. Il est recommandé d'utiliser UIScrollView pour afficher la palette d'outils afin de ne pas encombrer l'écran.

Questions fréquentes

Comment Photo Editing Extension obtient-elle l'accès à la photo ?

L'extension reçoit PHContentEditingInput avec l'URL du fichier image complet via la méthode beginContentEditing(with:). L'accès est accordé uniquement à une seule photo sélectionnée — sans droits sur les autres ressources de la bibliothèque.

L'extension peut-elle modifier la photo originale ?

Non, l'original n'est jamais modifié. L'extension crée une nouvelle version via PHContentEditingOutput, et AdjustmentData stocke les paramètres des modifications pour permettre un retour à l'état original.

Quels types de fichiers Photo Editing Extension prend-elle en charge ?

L'extension fonctionne avec tous les formats pris en charge par PhotoKit : JPEG, HEIC, RAW, PNG, TIFF et Live Photos. Les limitations sont définies via NSExtensionActivationRule dans le Info.plist de l'extension.

Combien de temps est accordé pour l'édition ?

iOS alloue jusqu'à 30 secondes pour l'opération finishContentEditing. Si la limite est dépassée, l'extension est terminée de force et les modifications ne sont pas enregistrées. Le traitement en arrière-plan avec CIFilter ne prolonge pas ce temps.

Puis-je utiliser Core Image et Metal dans l'extension ?

Oui, Core Image (CIFilter) et Metal (pour les shaders personnalisés) sont entièrement pris en charge. Apple recommande de déléguer les calculs lourds à des threads d'arrière-plan via Grand Central Dispatch.

Résumé

  • Photo Editing Extension est un outil d'édition intégrable dans l'application Photos qui fonctionne sans changer d'application
  • L'architecture utilise PHContentEditingController pour gérer la session d'édition et recevoir les données d'entrée
  • PhotoKit fournit PHAsset, PHImageManager et PHContentEditingInput pour accéder aux ressources média de l'appareil
  • PHAdjustmentData permet l'édition non destructive — sérialisation des paramètres de modification avec possibilité de retour en arrière
  • L'extension fonctionne dans un bac à sable avec une limite de 30 secondes et l'accès à une seule photo par session
  • Core Image, Metal et tous les formats PhotoKit sont pris en charge : JPEG, HEIC, RAW, PNG, TIFF et Live Photos

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi