Share Extension — wat het is, hoe het werkt en ontwikkeling van de extensie

Auteur: IT Sectr Gepubliceerd: 2026-06-15 Leestijd: 10 min

Share Extension — is een iOS-extensie die uw app toevoegt aan het systeemmenu „Delen” (Share Sheet). De gebruiker kan inhoud uit Safari, Foto’s, Bestanden of een andere app rechtstreeks naar de uwe sturen — zonder kopiëren en schakelen tussen vensters. Volgens gegevens van Apple (2024) ontvangen apps met Share Extension 35% meer gebruikersinhoud dan apps zonder deelmogelijkheid. De extensie verwerkt tekst, afbeeldingen, video, URL’s en bestanden via een uniforme NSExtensionItem-interface.

Belangrijkste punten

  • Share Extension — iOS-extensie voor het verzenden van inhoud naar de app vanuit andere programma’s.
  • NSExtensionItem — container voor gegevensoverdracht tussen de host-app en de extensie.
  • Info.plist — configuratie van inhoudstypen die de extensie verwerkt.
  • SLServiceTypes — mapping naar sociale netwerken (Twitter, Facebook) voor de verouderde modus.
  • App Groups — gedeelde opslag voor gegevensoverdracht tussen extensie en app.

Wat is Share Extension

Share Extension — is een type iOS app extension dat verschijnt in het systeemmenu „Delen” bij het selecteren van inhoud in elke app. De gebruiker selecteert tekst in Safari, drukt op „Delen” en ziet uw app in de lijst met beschikbare acties. Na selectie wordt de inhoud naar de extensie gestuurd voor verwerking: opslaan, publiceren, verzenden of transformeren.

In tegenstelling tot Action Extension is Share Extension gespecialiseerd in het ontvangen van inhoud van externe apps. Action Extension daarentegen stuurt gegevens van uw app naar buiten. Share Extension is het toegangspunt voor gebruikersinhoud, een sleutelelement voor gebruikerswerving: de gebruiker probeert de app via Share Extension zonder deze volledig te installeren. App Store verbiedt apps waarvan de enige functie het tonen van advertenties via Share Extension is (App Store Review Guideline 4.2).

Waarom Share Extension belangrijk is voor de app

Share Extension verlaagt de drempel: de gebruiker stuurt inhoud naar uw app vanuit een vertrouwde context — browser, galerij, bestandsbeheer. Volgens gegevens van Branch (2024) vertonen apps met Share Extension op dag 7 een 28% hogere retentie. Een extra effect — viraliteit: elke keer dat de gebruiker uw app in Share Sheet ziet, vindt er passieve branding plaats zonder advertentiekosten.

Hoe werkt Share Extension

Het mechanisme van Share Extension is gebaseerd op het overdragen van inhoud via systeemcontainers NSExtensionItem. De host-app (Safari, Foto’s) verpakt de geselecteerde inhoud in NSExtensionItem met specificatie van het type (public.image, public.url, public.plain-text). Het systeem geeft deze container door aan de extensie, die de gegevens extraheert via extensionContext.inputItems.

Levenscyclus van de extensie

Share Extension wordt gestart in een apart proces met beperkte uitvoeringstijd — ongeveer 30 seconden voor verwerking. De extensie mag geen langdurige bewerkingen synchroon uitvoeren. Gebruik NSURLSession met achtergrondconfiguratie voor het laden van grote bestanden. SLComposeServiceViewController — de basisklasse voor Share Extension met voorbeeld van inhoud en een verzendknop.

Gegevenstypen en Uniform Type Identifiers

iOS gebruikt Uniform Type Identifiers (UTI) om het type overgedragen inhoud te bepalen. De belangrijkste UTI’s voor Share Extension: public.image (foto’s, schermafbeeldingen), public.url (links), public.plain-text (tekst), public.video (videobestanden) en public.file-url (bestanden). De extensie registreert ondersteunde UTI’s in Info.plist via de sleutel NSExtensionActivationRule.

Architectuur van de extensie

Share Extension bestaat uit drie componenten: de doel-target in Xcode, SLComposeServiceViewController en de Info.plist-configuratie. De architectuur bepaalt welke inhoudstypen worden verwerkt, hoe de interface wordt weergegeven en waar gegevens worden opgeslagen.

ComponentDoelKenmerken
TargetTarget van de extensie in XcodeAparte bundle met identificatie
ViewControllerInterface en verwerkingslogicaSLComposeServiceViewController of aangepast
Info.plistConfiguratie van activering en UTINSExtensionActivationRule met predikaten
App GroupsGedeelde opslag met de appUserDefaults suite voor gegevensoverdracht

NSExtensionActivationRule

Het sleutelelement van de Share Extension-configuratie — de activeringsregel. Deze bepaalt onder welke voorwaarden de extensie in Share Sheet verschijnt. De regel wordt in Info.plist gedefinieerd als een woordenboek met beperkingen: maximaal aantal afbeeldingen, minimale tekstlengte, verplichte aanwezigheid van een URL. De standaardregel activeert de extensie voor elk willekeurig inhoudstype.

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

Share Extension maken

Laten we een praktisch voorbeeld bekijken van het maken van Share Extension in Swift voor een bladwijzer-app. De extensie ontvangt een URL uit Safari, toont een interface met voorbeeld en slaat de link op in App Group. SLComposeServiceViewController biedt een kant-en-klare UI met een tekstveld en een Post-knop.

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)
            }
        }
    }
}

Na het verzenden van inhoud beëindigt de extensie zijn werk met het aanroepen van completeRequest — dit is een verplichte stap, zonder dit geeft het systeem het proces van de extensie niet vrij. Belangrijk: Share Extension werkt in een beperkte omgeving met beperkte toegang tot het netwerk en bestandssysteem — gebruik achtergrondsessies voor het laden van inhoud.

Inhoudstypen verwerken

Share Extension moet verschillende soorten invoergegevens correct verwerken: tekst, afbeeldingen, video, URL’s en bestanden. Voor elk type wordt een eigen UTI en eigen methode voor gegevensextractie gebruikt. Universele verwerking — via een lus over attachment.attachments met controle van hasItemConformingToTypeIdentifier.

Afbeeldingen verwerken

Afbeeldingen worden verzonden als public.image met de mogelijkheid om ze via UIImage of Data te verkrijgen. Gebruik voor grote afbeeldingen jpegData(compressionQuality:) voor het opslaan. Share Extension mag de originele afbeelding niet wijzigen zonder expliciete toestemming van de gebruiker. Het wordt aanbevolen het origineel in App Group op te slaan en een voorbeeld te maken voor weergave in de interface.

URL en tekst verwerken

Safari en andere browsers verzenden de URL als public.url en de geselecteerde tekst als public.plain-text. Eén NSExtensionItem kan beide typen tegelijk bevatten — de URL van de pagina en de geselecteerde tekst erop. Share Extension moet alle attachments controleren en relevante gegevens extraheren. Gecombineerd scenario: de URL opslaan als bladwijzer en de tekst als notitie erbij.

App Groups en gegevensoverdracht

Share Extension en de hoofdapp werken in verschillende processen en hebben geen gedeelde toegang tot het bestandssysteem. Voor gegevensuitwisseling wordt het mechanisme App Groups gebruikt: een gedeelde container met identificatie group.*. Na het opslaan van gegevens in App Group stelt de extensie de app op de hoogte via CFNotificationCenter of Darwin Notify.

App Groups instellen

App Groups worden ingeschakeld in de Capabilities van de target: selecteer „App Groups” en voeg een identificatie toe (bijvoorbeeld group.com.example.myapp). Beide targets — de hoofdapp en de extensie — moeten toegang hebben tot dezelfde groep. UserDefaults suite maakt het mogelijk om gegevens te lezen en te schrijven in de gedeelde opslag met minimale overhead.

swift
// Gegevens opslaan in App Group vanuit 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()

Veelgestelde vragen

Wat is het verschil tussen Share Extension en Action Extension?

Share Extension ontvangt inhoud van andere apps in uw app. Action Extension daarentegen voert een actie uit op inhoud binnen de host-app — tekstvertaling, afbeeldingswijziging. Share Extension — ontvangst, Action Extension — transformatie.

Welke UTI’s moeten worden opgegeven in Info.plist?

Hangt af van het inhoudstype van uw app. Voor bladwijzers — public.url. Voor fotobewerker — public.image. Voor notities — public.plain-text. Voor meerdere typen gebruikt u NSExtensionActivationRule met een combinatie van AND/OR-predikaten.

Waarom verschijnt Share Extension niet in Share Sheet?

Veelvoorkomende oorzaak — een onjuiste NSExtensionActivationRule of UTI-mismatch. Controleer in Info.plist: de activeringsregel moet overeenkomen met het geteste inhoudstype. Zorg er ook voor dat de extensie is ingeschakeld in Instellingen → uw app → Siri & Zoeken. Xcode clean build lost het probleem vaak op.

Hoeveel tijd krijgt Share Extension voor verwerking?

Het systeem wijst ongeveer 30 seconden toe voor uitvoering. Daarna beëindigt iOS het proces van de extensie geforceerd. Gebruik voor langdurige bewerkingen achtergrond-NSURLSession met verwerking van het resultaat bij de volgende start van de app.

Kan ik een aangepaste interface weergeven in Share Extension?

Ja, in plaats van SLComposeServiceViewController kan een gewone UIViewController worden gebruikt. In dat geval heeft u volledige controle over de interface. De verzend- en annuleerknoppen moet u echter zelf implementeren. Aangepaste interface wordt aanbevolen voor niet-standaard scenario’s voor inhoudsverwerking.

Samenvatting

  • Share Extension — iOS-extensie die de app toevoegt aan het systeemmenu „Delen”.
  • Inhoud wordt overgedragen via NSExtensionItem met Uniform Type Identifiers.
  • Activeringsconfiguratie wordt in Info.plist gedefinieerd via NSExtensionActivationRule.
  • SLComposeServiceViewController — basisinterface met voorbeeld en verzending.
  • App Groups — mechanisme voor gegevensuitwisseling tussen extensie en app.
  • Share Extension werkt in een beperkte omgeving (30 sec, beperkte toegang).
  • Apps met Share Extension ontvangen 35% meer gebruikersinhoud.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook