Action Extension : qu'est-ce que c'est, comment ça fonctionne et développement de l'extension

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

Action Extension est une extension iOS qui exécute des actions personnalisées sur le contenu d'autres applications sans changer de contexte. Contrairement à Share Extension qui envoie des données vers une autre application, Action Extension transforme le contenu sur place : traduit du texte, modifie les filtres d'image, vérifie l'orthographe ou génère un PDF. Selon Apple (2024), Action Extension est le deuxième type d'extension le plus populaire après Share Extension, utilisé dans 42 % des applications de la catégorie « Productivité ». L'action instantanée sans lancer l'application principale est l'avantage clé pour l'utilisateur.

Points clés

  • Action Extension — extension iOS pour transformer le contenu dans l'application hôte.
  • NSExtensionContext — contexte d'exécution avec données d'entrée et de sortie.
  • UTI — Uniform Type Identifiers pour déterminer le type de contenu traité.
  • UIActivity — mécanisme legacy pour implémenter des actions dans iOS 6–7.
  • App Groups — transfert des données traitées vers l'application.

Qu'est-ce qu'Action Extension

Action Extension est un type d'extension iOS qui permet d'effectuer des actions sur le contenu directement dans le contexte de l'application hôte. L'utilisateur sélectionne du texte dans Safari, appuie sur « Actions » et choisit, par exemple, « Vérifier l'orthographe » — l'extension traite le texte et retourne le résultat sans quitter le navigateur. L'extension reçoit les données d'entrée via NSExtensionContext et peut retourner le contenu modifié.

Action Extension est apparue dans iOS 8 dans le cadre de l'architecture des extensions d'applications. Sa caractéristique clé est que l'extension n'a pas sa propre interface (facultative) et s'exécute dans le contexte de l'application hôte. L'utilisateur ne quitte pas l'écran actuel, ce qui garantit une friction cognitive minimale. Selon Apple, Action Extension est le seul type d'extension qui peut lire et modifier simultanément le contenu de l'application hôte (via NSExtensionContext avec retour de résultat).

Où Action Extension est utilisée

Action Extension est utilisée dans divers scénarios : traduire du texte dans le navigateur, créer un PDF à partir d'une page web, appliquer un filtre à une photo dans la galerie, vérifier l'orthographe dans n'importe quel champ de texte, raccourcir une URL, chiffrer du texte et ajouter des favoris. La polyvalence fait d'Action Extension un outil populaire pour les applications des catégories « Utilitaires » et « Productivité ».

Action Extension vs Share Extension

Action Extension et Share Extension sont souvent confondues, mais leurs objectifs sont fondamentalement différents. Share Extension envoie le contenu de l'application hôte vers votre application ; Action Extension traite le contenu et le retourne. La différence affecte l'architecture, l'expérience utilisateur et les exigences de configuration Info.plist.

CaractéristiqueAction ExtensionShare Extension
ObjectifTransformation de contenuTransfert de contenu vers l'application
InterfaceFacultative (personnalisée)SLComposeServiceViewController
Retour des donnéesOui, via completeRequestNon
ContexteReste dans l'application hôtePasse à l'extension
Position dans le menuAction Sheet (partie supérieure)Share Sheet (partie inférieure)
Action typiqueTraduction, correction, filtreEnregistrement, publication

Comment l'utilisateur choisit une action

Action Extension apparaît dans le menu d'actions (Action Sheet) lors de l'appui sur le bouton « Partager » ou « ... ». iOS place automatiquement les Action Extensions dans la partie supérieure de la feuille (actions) et les Share Extensions dans la partie inférieure (applications). Scénario utilisateur : a sélectionné du texte → a appuyé sur « Actions » → a choisi votre Action Extension → a reçu le résultat traité sans changer d'application.

Architecture d'Action Extension

Action Extension se compose d'une cible dans Xcode, d'un UIViewController pour afficher l'interface (facultatif), de NSExtensionContext pour l'entrée/sortie de données et de la configuration Info.plist. L'architecture est plus simple que celle de Share Extension : il n'y a pas d'interface de composition obligatoire et l'extension peut fonctionner entièrement sans UI.

Composants d'Action Extension

Cible — un bundle séparé avec un identifiant hérité de l'application principale. UIViewController — interface facultative pour afficher la progression, les paramètres ou les résultats. NSExtensionContext — un conteneur avec les données d'entrée (inputItems) et la méthode completeRequest pour retourner les résultats. Info.plist — configuration d'activation via NSExtensionActivationRule et attributs (NSExtensionAttributes) pour spécifier les types de contenu pris en charge.

NSExtensionContext et flux de données

Action Extension reçoit les données d'entrée via extensionContext?.inputItems — un tableau de NSExtensionItem. Chaque élément contient des pièces jointes avec des données et des UTI. Après le traitement, l'extension appelle completeRequest(returningItems:) avec un tableau de NSExtensionItem de sortie. L'application hôte reçoit les données traitées et les affiche. Modèle asynchrone : l'extension peut effectuer des opérations longues, en maintenant le contexte jusqu'à 30 secondes.

Créer une Action Extension

Voyons comment créer une Action Extension en Swift pour traduire du texte sélectionné. L'extension reçoit le texte de l'application hôte, l'envoie à un serveur de traduction et retourne le résultat. ActionViewController est le contrôleur de base créé par Xcode lors de l'ajout d'une cible.

swift
import UIKit
import MobileCoreServices

class ActionViewController: UIViewController {

    @IBOutlet var resultLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        extractTextAndTranslate()
    }

    func extractTextAndTranslate() {
        guard let item = extensionContext?.inputItems.first
                as? NSExtensionItem
        else { return }

        for attachment in item.attachments ?? [] {
            attachment.loadItem(
                forTypeIdentifier: kUTTypePlainText as String
            ) { [weak self] (text, error) in
                guard let inputText = text as? String else { return }
                TranslationService().translate(inputText, from: "en", to: "ru") {
                    translated in
                    DispatchQueue.main.async {
                        self?.resultLabel?.text = translated
                    }
                }
            }
        }
    }
}

Après le traitement, l'extension retourne le résultat à l'application hôte. completeRequest avec des données de sortie est un scénario alternatif où l'extension n'affiche pas d'interface utilisateur mais retourne immédiatement le contenu traité.

swift
// Returning processed text to host app
let resultItem = NSExtensionItem()
let resultData = translated.data(using: .utf8)!
let attachment = NSItemProvider(
    item: resultData,
    typeIdentifier: kUTTypePlainText as String
)
resultItem.attachments = [attachment]
extensionContext?.completeRequest(
    returningItems: [resultItem], completionHandler: nil
)

Traitement des données et retour des résultats

Action Extension peut fonctionner dans deux modes : avec UI et sans UI. En mode sans UI, l'extension effectue l'action entièrement en arrière-plan et appelle completeRequest immédiatement après le traitement. En mode avec UI, l'extension affiche un contrôleur, l'utilisateur confirme l'action et ensuite seulement completeRequest envoie le résultat. La sélection du mode dépend de la complexité de l'action et de la nécessité d'une saisie utilisateur.

Chargement des données depuis la pièce jointe

La méthode loadItem(forTypeIdentifier:) fonctionne de manière asynchrone — les données peuvent être volumineuses (images, vidéos). NSItemProvider gère le streaming et la mise en cache. Pour les images, utilisez kUTTypeImage, pour les fichiers, utilisez kUTTypeFileURL. Important : loadItem peut être appelé sur un thread d'arrière-plan — mettez à jour l'interface utilisateur uniquement via DispatchQueue.main.

Retour des données modifiées

Action Extension retourne les données traitées via completeRequest avec un tableau de NSExtensionItem. Chaque élément correspond au type de données de sortie. L'application hôte peut remplacer le contenu original par le contenu traité — par exemple, remplacer l'image originale par une image filtrée. NSExtensionItem prend en charge les mêmes UTI qu'en entrée, plus des UTI supplémentaires (par exemple, public.html pour le contenu web).

Cas d'utilisation d'Action Extension

Action Extension est utilisée dans des dizaines de scénarios — des utilitaires simples aux flux de travail d'entreprise complexes. Les exemples classiques couvrent les opérations textuelles, graphiques et de fichiers, ainsi que l'intégration de contenu web.

Scénarios textuels

Action Extension pour le texte : traduction, vérification orthographique, comptage de caractères, changement de casse, chiffrement, génération de code QR à partir de texte. L'utilisateur sélectionne du texte dans n'importe quelle application avec un champ de texte (Safari, Notes, Mail) et effectue l'action en un seul appui. La coloration syntaxique du code, le formatage Markdown et le raccourcissement d'URL sont des exemples populaires d'Action Extension pour les utilisateurs avancés.

Scénarios graphiques

Pour les images, Action Extension propose : application de filtres, recadrage, redimensionnement, conversion de formats (HEIC en JPEG), ajout de filigrane, reconnaissance de texte (OCR) et compression. Le traitement d'images doit être rapide — l'utilisateur s'attend à un résultat en 2 à 3 secondes. Pour les opérations lourdes, utilisez Core Image sur le GPU ou des files d'attente en arrière-plan.

Scénarios web

Action Extension pour les URL : créer un PDF à partir d'une page web, enregistrer dans Pocket/Pinterest, vérifier la vitesse du site, archiver une page, obtenir les métadonnées Open Graph, générer une capture d'écran de la page. La génération de PDF est l'un des scénarios les plus demandés : l'utilisateur convertit une page web en PDF sans ouvrir de services tiers.

Questions fréquentes

Quelle est la principale différence entre Action Extension et Share Extension ?

Share Extension envoie le contenu de l'application hôte vers votre application. Action Extension traite le contenu sur place et retourne le résultat. Share — transfert, Action — transformation. Cette différence fondamentale détermine l'architecture et l'UX.

Une Action Extension peut-elle ne pas avoir d'interface ?

Oui. Si l'action ne nécessite pas de saisie utilisateur (par exemple, le comptage de caractères), l'extension peut l'effectuer en arrière-plan et retourner immédiatement le résultat via completeRequest. Dans Info.plist, vous devez spécifier NSExtensionActivationSupportsWebURL ou une autre UTI correspondant au type de données.

Dans quelles applications Action Extension apparaît-elle ?

Dans toutes les applications qui prennent en charge UIActivityViewController ou les contrôleurs d'action standard. Cela inclut Safari, Photos, Fichiers, Notes, Mail et des milliers d'applications tierces. Action Extension ne fonctionne pas dans les applications qui n'utilisent pas les mécanismes d'action standard d'iOS.

Comment retourner le contenu traité à l'application hôte ?

Via extensionContext.completeRequest(returningItems:) avec un tableau de NSExtensionItem. Chaque élément de sortie contient un NSItemProvider avec les données traitées. L'application hôte reçoit le résultat dans le délégué UIActivityViewController ou un callback similaire.

Quelles sont les limitations d'Action Extension ?

L'extension s'exécute jusqu'à 30 secondes, après quoi iOS la termine de force. Il n'y a pas d'accès direct à l'application principale — seulement via App Groups. Action Extension ne peut pas effectuer de tâches en arrière-plan après la fin. Pour les opérations longues, utilisez NSURLSession en arrière-plan avec une notification au prochain démarrage.

Résumé

  • Action Extension — extension iOS pour transformer le contenu directement dans l'application hôte.
  • Elle diffère de Share Extension en retournant les données traitées via NSExtensionContext.
  • Peut fonctionner avec UI ou entièrement en arrière-plan sans interface.
  • Prend en charge tous les types de contenu : texte, images, URL, fichiers via UTI.
  • Utilisée pour la traduction, les filtres, la génération de PDF, l'OCR et la vérification orthographique.
  • Limite de temps d'exécution — 30 secondes, accès à l'application — via App Groups.
  • Action Extension est utilisée dans 42 % des applications de la catégorie « Productivité ».

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