Share Extension — ce que c'est, comment ça marche et développement de l'extension

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

Share Extension est une extension iOS qui ajoute votre application au menu Partager du système. L'utilisateur peut envoyer du contenu depuis Safari, Photos, Fichiers ou toute autre application directement dans la vôtre — sans copier ni changer de fenêtre. Selon Apple (2024), les applications avec Share Extension reçoivent 35% de contenu utilisateur en plus que les applications sans capacité de partage. L'extension traite le texte, les images, les vidéos, les URL et les fichiers via une interface unifiée NSExtensionItem.

Points clés

  • Share Extension — extension iOS pour envoyer du contenu à une application depuis d'autres programmes.
  • NSExtensionItem — conteneur pour transférer des données entre l'application hôte et l'extension.
  • Info.plist — configuration des types de contenu que l'extension traite.
  • SLServiceTypes — mappage vers les réseaux sociaux (Twitter, Facebook) pour le mode hérité.
  • App Groups — stockage partagé pour transférer des données entre l'extension et l'application.

Qu'est-ce que Share Extension

Share Extension est un type d'extension d'application iOS qui apparaît dans le menu Partager du système lors de la sélection de contenu dans n'importe quelle application. L'utilisateur surligne du texte dans Safari, appuie sur Partager et voit votre application dans la liste des actions disponibles. Après la sélection, le contenu est transmis à l'extension pour traitement : sauvegarde, publication, envoi ou transformation.

Contrairement à Action Extension, Share Extension est spécialisée dans la réception de contenu provenant d'applications externes. Action Extension, quant à elle, envoie des données de votre application vers l'extérieur. Share Extension est un point d'entrée pour le contenu utilisateur, un élément clé de l'acquisition d'utilisateurs : les utilisateurs testent votre application via Share Extension sans l'installer complètement. L'App Store interdit les applications dont la seule fonction est d'afficher des publicités via Share Extension (App Store Review Guideline 4.2).

Pourquoi Share Extension est importante pour votre application

Share Extension abaisse la barrière d'entrée : les utilisateurs envoient du contenu à votre application depuis un contexte familier — navigateur, galerie, gestionnaire de fichiers. Selon Branch (2024), les applications avec Share Extension affichent une rétention 28% plus élevée au 7e jour. Un effet supplémentaire est la viralité : chaque fois qu'un utilisateur voit votre application dans la feuille Partager, un branding passif se produit sans dépenses publicitaires.

Comment fonctionne Share Extension

Le mécanisme de Share Extension repose sur le transfert de contenu via des conteneurs système NSExtensionItem. L'application hôte (Safari, Photos) empaquette le contenu sélectionné dans un NSExtensionItem avec un type spécifié (public.image, public.url, public.plain-text). Le système transmet ce conteneur à l'extension, qui extrait les données via extensionContext.inputItems.

Cycle de vie de l'extension

Share Extension s'exécute dans un processus séparé avec un temps d'exécution limité — environ 30 secondes pour le traitement. L'extension ne doit pas effectuer d'opérations synchrones longues. Pour télécharger des fichiers volumineux, utilisez NSURLSession avec une configuration en arrière-plan. SLComposeServiceViewController est la classe de base pour Share Extension avec un aperçu du contenu et un bouton d'envoi.

Types de données et Uniform Type Identifiers

iOS utilise les Uniform Type Identifiers (UTI) pour déterminer le type de contenu transféré. Les principales UTI pour Share Extension : public.image (photos, captures d'écran), public.url (liens), public.plain-text (texte), public.video (fichiers vidéo) et public.file-url (fichiers). L'extension enregistre les UTI prises en charge dans Info.plist via la clé NSExtensionActivationRule.

Architecture de l'extension

Share Extension se compose de trois composants : la cible Xcode, SLComposeServiceViewController et la configuration Info.plist. L'architecture détermine quels types de contenu sont traités, comment l'interface est affichée et où les données sont sauvegardées.

ComposantFonctionCaractéristiques
TargetCible de l'extension dans XcodeBundle séparé avec un identifiant
ViewControllerInterface et logique de traitementSLComposeServiceViewController ou personnalisé
Info.plistConfiguration d'activation et UTINSExtensionActivationRule avec prédicats
App GroupsStockage partagé avec l'applicationSuite UserDefaults pour le transfert de données

NSExtensionActivationRule

L'élément clé de la configuration de Share Extension est la règle d'activation. Elle détermine dans quelles conditions l'extension apparaît dans la feuille Partager. La règle est définie dans Info.plist sous forme de dictionnaire avec des contraintes : nombre maximum d'images, longueur minimale du texte, présence obligatoire d'une URL. La règle standard active l'extension pour un seul type de contenu quelconque.

objective-c
// Info.plist — NSExtensionActivationRule pour Share Extension
<key>NSExtensionActivationRule</key>
<dict>
    <key>NSExtensionActivationSupportsImageWithMaxCount</key>
    <integer>5</integer>
    <key>NSExtensionActivationSupportsText</key>
    <true/>
    <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
    <integer>1</integer>
</dict>

Création d'une Share Extension

Prenons un exemple pratique de création d'une Share Extension en Swift pour une application de signets. L'extension reçoit une URL de Safari, affiche une interface d'aperçu et sauvegarde le lien dans App Group. SLComposeServiceViewController fournit une interface utilisateur prête à l'emploi avec un champ de texte et un bouton Publier.

swift
import Social
import MobileCoreServices

class ShareViewController: SLComposeServiceViewController {

    override func isContentValid() -> Bool {
        return !(contentText?.isEmpty() ?? true)
    }

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

        for attachment in item.attachments ?? [] {
            attachment.loadItem(forTypeIdentifier: kUTTypeURL as String) {
                [weak self] (item, error) in
                if let url = item as? URL {
                    BookmarkService().save(url, title: self?.contentText)
                }
                self?.extensionContext?.completeRequest(
                    returningItems: [], completionHandler: nil)
            }
        }
    }
}

Après l'envoi du contenu, l'extension se termine en appelant completeRequest — c'est une étape obligatoire ; sans elle, le système ne libérera pas le processus de l'extension. Important : Share Extension s'exécute dans un environnement limité avec un accès restreint au réseau et au système de fichiers — utilisez des sessions en arrière-plan pour le téléchargement de contenu.

Traitement des types de contenu

Share Extension doit gérer correctement différents types de données d'entrée : texte, images, vidéo, URL et fichiers. Chaque type utilise sa propre UTI et méthode d'extraction. Traitement universel — en itérant sur attachment.attachments avec des vérifications hasItemConformingToTypeIdentifier.

Traitement des images

Les images sont transmises en tant que public.image avec la possibilité de les récupérer via UIImage ou Data. Pour les grandes images, utilisez jpegData(compressionQuality:) avant de sauvegarder. Share Extension ne doit pas modifier l'image originale sans l'autorisation explicite de l'utilisateur. Il est recommandé de sauvegarder l'original dans App Group et de créer un aperçu pour l'affichage dans l'interface.

Traitement des URL et du texte

Safari et les autres navigateurs transmettent les URL en tant que public.url et le texte sélectionné en tant que public.plain-text. Un seul NSExtensionItem peut contenir les deux types simultanément — l'URL de la page et le texte sélectionné dessus. Share Extension doit vérifier toutes les pièces jointes et extraire les données pertinentes. Scénario combiné : sauvegarder l'URL comme signet et le texte comme note qui y est attachée.

App Groups et transfert de données

Share Extension et l'application principale s'exécutent dans des processus différents et n'ont pas d'accès partagé au système de fichiers. L'échange de données utilise le mécanisme des App Groups : un conteneur partagé avec un identifiant group.*. Après avoir sauvegardé des données dans App Group, l'extension notifie l'application via CFNotificationCenter ou Darwin Notify.

Configuration des App Groups

Les App Groups sont activés dans les Capacités de la cible : sélectionnez App Groups et ajoutez un identifiant (par exemple, group.com.example.myapp). Les deux cibles — l'application principale et l'extension — doivent avoir accès au même groupe. La suite UserDefaults permet de lire et d'écrire des données dans le stockage partagé avec une surcharge minimale.

swift
// Sauvegarde des données dans App Group depuis Share Extension
let sharedDefaults = UserDefaults(suiteName: "group.com.example.myapp")
let bookmark: [String: Any] = [
    "url": url.absoluteString,
    "title": contentText ?? "",
    "date": Date().timeIntervalSince1970
]
sharedDefaults?.set(bookmark, forKey: "bookmark_\(Date().timeIntervalSince1970)")
sharedDefaults?.synchronize()

Questions fréquentes

En quoi Share Extension diffère-t-elle d'Action Extension ?

Share Extension reçoit du contenu d'autres applications dans la vôtre. Action Extension, en revanche, effectue une action sur le contenu au sein de l'application hôte — traduire du texte, modifier une image. Share Extension est la réception, Action Extension est la transformation.

Quelles UTI dois-je spécifier dans Info.plist ?

Cela dépend du type de contenu que votre application traite. Pour les signets — public.url. Pour un éditeur de photos — public.image. Pour les notes — public.plain-text. Pour plusieurs types, utilisez NSExtensionActivationRule avec une combinaison de prédicats AND/OR.

Pourquoi Share Extension n'apparaît-elle pas dans la feuille Partager ?

Une cause fréquente est une règle NSExtensionActivationRule incorrecte ou une incompatibilité d'UTI. Vérifiez dans Info.plist : la règle d'activation doit correspondre au type de contenu testé. Assurez-vous également que l'extension est activée dans Réglages → votre application → Siri et Recherche. Xcode clean build résout souvent le problème.

Combien de temps Share Extension a-t-elle pour traiter ?

Le système alloue environ 30 secondes pour l'exécution. Après cela, iOS met fin de force au processus de l'extension. Pour les opérations de longue durée, utilisez une NSURLSession en arrière-plan et gérez le résultat au prochain lancement de l'application.

Puis-je afficher une interface personnalisée dans Share Extension ?

Oui, au lieu de SLComposeServiceViewController, vous pouvez utiliser un UIViewController standard. Dans ce cas, vous contrôlez entièrement l'interface. Cependant, vous devez implémenter vous-même les boutons d'envoi et d'annulation. L'interface personnalisée est recommandée pour les scénarios de traitement de contenu non standard.

Résumé

  • Share Extension — extension iOS qui ajoute votre application au menu Partager du système.
  • Le contenu est transféré via NSExtensionItem avec des Uniform Type Identifiers.
  • La configuration d'activation est définie dans Info.plist via NSExtensionActivationRule.
  • SLComposeServiceViewController — interface de base avec aperçu et publication.
  • App Groups — mécanisme d'échange de données entre l'extension et l'application.
  • Share Extension fonctionne dans un environnement limité (30 s, accès restreint).
  • Les applications avec Share Extension reçoivent 35% de contenu utilisateur en plus.

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