0Pricing
Swift Academy · Leçon

Présentation des extensions d’app

Découvrez les extensions de partage, d’action et autres extensions.

Présentation des extensions d’app est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Que sont les extensions d’application

Une extension d’application permet à votre application de fournir des fonctionnalités dans d’autres applications ou surfaces système — partage de contenu, claviers personnalisés, indexation Spotlight, etc. Chaque extension est une cible distincte avec son propre cycle de vie, bac à sable et point d’entrée défini par le système.

// Extensions run in their own process, launched
// by the host (Photos, Safari, Messages, the system),
// not by your main app.

Application hôte, conteneur et bac à sable

Trois acteurs interviennent : l’application hôte lance l’extension, votre application conteneur la fournit, et l’extension elle-même s’exécute dans un bac à sable. L’extension ne peut pas communiquer librement avec votre application — elles communiquent par l’intermédiaire d’un groupe d’apps, jamais par accès direct à la mémoire.

import Foundation
// Container app + Extension target share data via
// an App Group, e.g. group.com.example.app
let group = "group.com.example.app"
_ = group

Extensions de partage

Une extension de partage apparaît dans la feuille de partage du système et permet aux utilisateurs d’envoyer du contenu (texte, URL, images) depuis n’importe quelle application vers la vôtre. Elle hérite d’un contrôleur de vue ou en héberge un, et lit les éléments partagés depuis le contexte de l’extension.

import Foundation
// Share extension reads incoming items:
// extensionContext?.inputItems
//   each NSExtensionItem has attachments (NSItemProvider)
let share = "appears in the share sheet"
_ = share

Lire les éléments partagés

Le contenu partagé arrive sous forme de pièces jointes NSItemProvider. Vous vérifiez l’identifiant de type et chargez la valeur de manière asynchrone. C’est ainsi qu’une extension de partage récupère l’URL ou l’image que l’utilisateur partage.

import UniformTypeIdentifiers
func handle(_ provider: NSItemProvider) {
    if provider.hasItemConformingToTypeIdentifier(
        UTType.url.identifier) {
        provider.loadItem(
            forTypeIdentifier: UTType.url.identifier) {
            value, _ in
            print("shared url:", value ?? "none")
        }
    }
}

Extensions d’action

Une extension d’action transforme ou affiche le contenu sur place — traduire du texte sélectionné, annoter un PDF — et peut renvoyer un résultat à l’hôte. Contrairement à une extension de partage, elle est destinée à agir sur le contenu plutôt qu’à l’envoyer ailleurs.

import Foundation
// Action extension may return modified items:
// extensionContext?.completeRequest(
//     returningItems: outputItems)
let action = "acts on content, can return a result"
_ = action

Extension de service de notification

Une extension de service de notification intercepte les notifications push entrantes contenant mutable-content: 1 afin de les modifier avant leur affichage — déchiffrer le corps, télécharger une pièce jointe multimédia ou réécrire le titre — dans un délai très court.

import UserNotifications
// Override in UNNotificationServiceExtension:
// didReceive(_ request:, withContentHandler:)
//   mutate bestAttemptContent, then call the handler
let service = "modifies push before it shows"
_ = service

Extension de contenu de notification

Une extension de contenu de notification fournit une interface personnalisée pour une notification développée — une carte, un lecteur multimédia ou des commandes interactives — qui s’affiche lorsque l’utilisateur appuie longuement sur la bannière. Elle est associée à une catégorie de notification.

import UserNotifications
// UNNotificationContentExtension renders a custom view
// for a given UNNotificationCategory when expanded.
let content = "custom expanded notification UI"
_ = content

Le cycle de vie de completeRequest

Les extensions ont une durée de vie courte. Lorsque vous avez terminé, appelez extensionContext?.completeRequest(returningItems:completionHandler:) pour signaler la fin et permettre à l’hôte de vous fermer. Pour abandonner, utilisez cancelRequest(withError:). Maintenir le processus ouvert gaspille des ressources et peut entraîner son arrêt.

import Foundation
func finish(context: NSExtensionContext?) {
    context?.completeRequest(
        returningItems: [], completionHandler: nil)
}

Autres points d’extension

iOS propose de nombreux points d’extension : claviers personnalisés, fournisseurs de documents, indexation Spotlight, bloqueurs de contenu Safari, intentions Siri, retouche photo et extensions de fournisseurs de fichiers. Chacune adopte un protocole défini par le système, déclaré par un NSExtensionPointIdentifier dans son Info.plist.

// Info.plist of an extension declares its point:
// NSExtension > NSExtensionPointIdentifier
//   e.g. com.apple.share-services
//        com.apple.usernotifications.service
let point = "each extension declares its point"
_ = point

Limites de mémoire et de temps

Les extensions sont soumises à des limites plus strictes que l’application principale — moins de mémoire et un délai d’exécution très court. Effectuez un travail minimal, évitez les allocations importantes et déportez si possible le traitement lourd vers l’application principale au moyen du stockage partagé.

import Foundation
// Tight memory + short runtime.
// Pattern: extension stages data in the App Group,
// the main app processes it fully on next launch.
let limits = "keep extensions lean and fast"
_ = limits

Partager le code entre les cibles

Pour éviter de dupliquer la logique, placez les modèles et utilitaires partagés dans une bibliothèque ou un paquet Swift dont dépendent l’application et l’extension. Déclarez uniquement ce dont chaque cible a besoin ; l’extension lie le même code sans le recopier.

import Foundation
// Shared Swift package 'AppCore' linked by:
//   - main app target
//   - share extension target
//   - widget extension target
let shared = "one source of truth for models"
_ = shared

Vérification rapide

Rappelez-vous comment une extension communique avec son application conteneur.

Récapitulatif

Vous avez découvert les extensions d’application :

  • Les extensions sont des cibles distinctes et isolées, lancées par un hôte ; elles comprennent notamment les extensions de partage, d’action, de service de notification et de contenu de notification.
  • Lisez le contenu entrant via NSItemProvider et terminez avec completeRequest.
  • Chaque extension déclare son NSExtensionPointIdentifier et s’exécute sous des limites strictes de mémoire et de temps.
  • Partagez les données au moyen d’un groupe d’apps et réutilisez le code grâce à un paquet partagé.

Questions Fréquemment Posées

La leçon « Présentation des extensions d’app » est-elle gratuite ?

Oui — le texte complet de « Présentation des extensions d’app » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Présentation des extensions d’app » ?

Découvrez les extensions de partage, d’action et autres extensions. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Présentation des extensions d’app » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Créer un widget avec WidgetKit
  2. Fournisseurs de chronologie et instantanés
  3. Présentation des extensions d’app
  4. App Intents et raccourcis
← Retour à Swift Academy