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 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).
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 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.
| Kenmerk | Action Extension | Share Extension |
|---|---|---|
| Doel | Inhoud transformeren | Inhoud naar app verzenden |
| Interface | Optioneel (aangepast) | SLComposeServiceViewController |
| Gegevens retourneren | Ja, via completeRequest | Nee |
| Context | Blijft in de host-app | Schakelt over naar extensie |
| Positie in menu | Action Sheet (bovenste gedeelte) | Share Sheet (onderste gedeelte) |
| Typische actie | Vertaling, correctie, filter | Opslaan, publiceren |
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.
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.
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.
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.
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.
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.
// 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
)
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.
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.
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).
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.
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.
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.
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
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.
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 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.
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.
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
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.
Lees ook