Action Extension: wat is het, hoe werkt het en het ontwikkelen van extensies

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

Action Extension is een iOS-extensie die gebruikersacties met inhoud uit andere apps uitvoert zonder van context te wisselen. In tegenstelling tot Share Extension, die gegevens naar een andere app stuurt, transformeert Action Extension de inhoud ter plaatse: tekst vertalen, afbeeldingsfilters wijzigen, spelling controleren of PDF genereren. Volgens Apple (2024) is Action Extension het op een na populairste extensietype na Share Extension, gebruikt in 42% van de apps in de categorie „Productiviteit”. Directe actie zonder de hoofd-app te starten — het belangrijkste voordeel voor de gebruiker.

Belangrijkste punten

  • Action Extension — iOS-extensie voor het transformeren van inhoud in de host-app.
  • NSExtensionContext — uitvoeringscontext met invoer- en uitvoergegevens.
  • UTI — Uniform Type Identifiers voor het bepalen van het type verwerkte inhoud.
  • UIActivity — verouderd mechanisme voor het implementeren van acties in iOS 6–7.
  • App Groups — het terugsturen van verwerkte gegevens naar de app.

Wat is Action Extension

Action Extension is een type iOS-app-extensie waarmee u een actie op inhoud kunt uitvoeren direct in de context van de host-app. De gebruiker selecteert tekst in Safari, drukt op „Acties” en kiest bijvoorbeeld „Spelling controleren” — de extensie verwerkt de tekst en retourneert het resultaat zonder de browser te verlaten. De extensie ontvangt invoergegevens via NSExtensionContext en kan de gewijzigde inhoud terugsturen.

Action Extension verscheen in iOS 8 als onderdeel van de architectuur van app-extensies. Het belangrijkste kenmerk is dat de extensie geen eigen interface heeft (optioneel) en wordt uitgevoerd in de context van de host-app. De gebruiker verlaat het huidige scherm niet, wat zorgt voor een minimale cognitieve onderbreking. Volgens Apple is Action Extension het enige type extensie dat tegelijkertijd de inhoud van de host-app kan lezen en wijzigen (via NSExtensionContext met retournering van het resultaat).

Waar wordt Action Extension toegepast

Action Extension wordt gebruikt in verschillende scenario's: tekst vertalen in de browser, PDF maken van een webpagina, een filter toepassen op een foto in de galerij, spelling controleren in elk tekstveld, URL verkorten, tekst versleutelen en toevoegen aan bladwijzers. De veelzijdigheid van Action Extension maakt het een populair hulpmiddel voor apps in de categorieën „Hulpprogramma's” en „Productiviteit”.

Action Extension versus Share Extension

Action Extension en Share Extension worden vaak verward, maar hun doel is fundamenteel verschillend. Share Extension stuurt inhoud van de host-app naar uw app; Action Extension verwerkt de inhoud en stuurt deze terug. Het verschil heeft invloed op de architectuur, gebruikerservaring en configuratievereisten van Info.plist.

KenmerkAction ExtensionShare Extension
DoelInhoud transformerenInhoud naar app verzenden
InterfaceOptioneel (aangepast)SLComposeServiceViewController
Gegevens retournerenJa, via completeRequestNee
ContextBlijft in de host-appSchakelt over naar extensie
Positie in menuAction Sheet (bovenste gedeelte)Share Sheet (onderste gedeelte)
Typische actieVertaling, correctie, filterOpslaan, publiceren

Hoe kiest de gebruiker een actie

Action Extension verschijnt in het actiemenu (Action Sheet) wanneer op de knop „Delen” of „...” wordt gedrukt. iOS plaatst Action Extensions automatisch in het bovenste gedeelte van het blad (acties) en Share Extensions in het onderste gedeelte (apps). Gebruikersscenario: tekst geselecteerd → „Acties” ingedrukt → uw Action Extension gekozen → verwerkt resultaat ontvangen zonder van app te wisselen.

Architectuur van Action Extension

Action Extension bestaat uit een target in Xcode, UIViewController voor het weergeven van de interface (optioneel), NSExtensionContext voor invoer-uitvoer van gegevens en Info.plist-configuratie. De architectuur is eenvoudiger dan die van Share Extension: er is geen verplichte compose-interface en de extensie kan volledig zonder UI werken.

Componenten van Action Extension

Target — een aparte bundle met een identifier die is overgenomen van de hoofd-app. UIViewController — optionele interface voor het weergeven van voortgang, instellingen of resultaat. NSExtensionContext — container met invoergegevens (inputItems) en de methode completeRequest voor het retourneren van het resultaat. Info.plist — activeringsconfiguratie via NSExtensionActivationRule en attributen (NSExtensionAttributes) voor het specificeren van ondersteunde inhoudstypen.

NSExtensionContext en gegevensstromen

Action Extension ontvangt invoergegevens via extensionContext?.inputItems — een array van NSExtensionItem. Elk element bevat bijlagen met gegevens en UTI. Na verwerking roept de extensie completeRequest(returningItems:) aan met een array van uitvoer-NSExtensionItem. De host-app ontvangt de verwerkte gegevens en geeft deze weer. Asynchroon model: de extensie kan langdurige bewerkingen uitvoeren, waarbij de context tot 30 seconden wordt vastgehouden.

Een Action Extension maken

Laten we het maken van een Action Extension in Swift bekijken voor het vertalen van geselecteerde tekst. De extensie ontvangt tekst van de host-app, stuurt deze naar een vertaalserver en retourneert het resultaat. ActionViewController — de basiscontroller die Xcode maakt bij het toevoegen van een target.

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

Na verwerking retourneert de extensie het resultaat naar de host-app. completeRequest met uitvoergegevens — het alternatieve scenario wanneer de extensie geen UI toont maar direct de verwerkte inhoud retourneert.

swift
// Verwerkte tekst retourneren naar de 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
)

Gegevensverwerking en resultaat retourneren

Action Extension kan in twee modi werken: met UI en zonder UI. In de modus zonder UI voert de extensie de actie volledig op de achtergrond uit en roept direct na verwerking completeRequest aan. In de modus met UI toont de extensie een controller, bevestigt de gebruiker de actie en pas daarna verzendt completeRequest het resultaat. De moduskeuze hangt af van de complexiteit van de actie en de noodzaak van gebruikersinvoer.

Gegevens laden uit bijlage

De methode loadItem(forTypeIdentifier:) werkt asynchroon — gegevens kunnen groot zijn (afbeeldingen, video). NSItemProvider beheert het streamen en cachen. Gebruik voor afbeeldingen kUTTypeImage, voor bestanden kUTTypeFileURL. Belangrijk: loadItem kan op een achtergrondthread worden aangeroepen — werk UI alleen bij via DispatchQueue.main.

Gewijzigde gegevens retourneren

Action Extension retourneert verwerkte gegevens via completeRequest met een array van NSExtensionItem. Elk element komt overeen met het uitvoergegevenstype. De host-app kan de originele inhoud vervangen door verwerkte inhoud — bijvoorbeeld de originele afbeelding vervangen door een gefilterde. NSExtensionItem ondersteunt dezelfde UTI's als bij invoer, plus extra (bijvoorbeeld public.html voor webinhoud).

Gebruiksscenario's van Action Extension

Action Extension wordt toegepast in tientallen scenario's — van eenvoudige hulpprogramma's tot complexe bedrijfsprocessen. Klassieke voorbeelden omvatten tekst-, grafische en bestandsbewerkingen, evenals integratie met webinhoud.

Tekstscenario's

Action Extension voor tekst: vertaling, spellingcontrole, tekentelling, wijzigen van hoofdlettergebruik, versleuteling, QR-code genereren uit tekst. De gebruiker selecteert tekst in elke app met een tekstveld (Safari, Notities, Mail) en voert met één klik de actie uit. Syntax highlighting van code, Markdown-opmaak en URL-verkorting — populaire voorbeelden van Action Extension voor gevorderde gebruikers.

Grafische scenario's

Voor afbeeldingen biedt Action Extension: filters toepassen, bijsnijden, formaat wijzigen, formaatconversie (HEIC naar JPEG), watermerk toevoegen, tekstherkenning (OCR) en compressie. Afbeeldingsverwerking moet snel zijn — de gebruiker verwacht binnen 2–3 seconden resultaat. Gebruik voor zware bewerkingen Core Image op de GPU of achtergrondwachtrijen.

Webscenario's

Action Extension voor URL: PDF maken van een webpagina, opslaan in Pocket/Pinterest, sitesnelheid controleren, pagina archiveren, Open Graph-metadata ophalen, schermafbeelding van pagina genereren. PDF-generatie — een van de populairste scenario's: de gebruiker converteert een webpagina naar PDF zonder externe services te openen.

Veelgestelde vragen

Wat is het belangrijkste verschil tussen Action Extension en Share Extension?

Share Extension stuurt inhoud van de host-app naar uw app. Action Extension verwerkt de inhoud ter plaatse en retourneert het resultaat. Share — verzending, Action — transformatie. Dit fundamentele verschil bepaalt de architectuur en UX.

Kan een Action Extension geen interface hebben?

Ja. Als de actie geen gebruikersinvoer vereist (bijvoorbeeld tekentelling), kan de extensie deze op de achtergrond uitvoeren en direct het resultaat retourneren via completeRequest. In Info.plist moet NSExtensionActivationSupportsWebURL of een andere UTI die overeenkomt met het gegevenstype worden opgegeven.

In welke apps verschijnt Action Extension?

In alle apps die UIActivityViewController of standaard actiecontrollers ondersteunen. Dit zijn Safari, Foto's, Bestanden, Notities, Mail en duizenden apps van derden. Action Extension werkt niet in apps die geen standaard iOS-mechanismen voor acties gebruiken.

Hoe retourneer ik verwerkte inhoud naar de host-app?

Via extensionContext.completeRequest(returningItems:) met een array van NSExtensionItem. Elk uitvoerelement bevat NSItemProvider met verwerkte gegevens. De host-app ontvangt het resultaat in de delegate van UIActivityViewController of een soortgelijke callback.

Wat zijn de beperkingen van Action Extension?

De extensie werkt tot 30 seconden, waarna iOS deze geforceerd bebeëindigt. Er is geen directe toegang tot de hoofd-app — alleen via App Groups. Action Extension kan geen achtergrondtaken uitvoeren na voltooiing. Gebruik voor langdurige bewerkingen NSURLSession op de achtergrond met een melding bij de volgende start.

Samenvatting

  • Action Extension — iOS-extensie voor het direct transformeren van inhoud in de host-app.
  • Verschilt van Share Extension door het retourneren van verwerkte gegevens via NSExtensionContext.
  • Kan werken met UI of volledig op de achtergrond zonder interface.
  • Ondersteunt alle inhoudstypen: tekst, afbeeldingen, URL, bestanden via UTI.
  • Gebruikt voor vertaling, filters, PDF-generatie, OCR en spellingcontrole.
  • Uitvoeringstijdlimiet — 30 seconden, toegang tot app — via App Groups.
  • Action Extension wordt gebruikt in 42% van de apps in de categorie „Productiviteit”.

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