Action Extension ist eine iOS-Erweiterung, die benutzerdefinierte Aktionen für Inhalte aus anderen Apps ausführt, ohne den Kontext zu wechseln. Im Gegensatz zur Share Extension, die Daten an eine andere App sendet, transformiert Action Extension den Inhalt direkt vor Ort: Text übersetzen, Bildfilter ändern, Rechtschreibung prüfen oder PDF erstellen. Laut Apple (2024) ist Action Extension nach Share Extension der zweitbeliebteste Erweiterungstyp, der in 42% der Apps der Kategorie „Produktivität“ verwendet wird. Die sofortige Aktion ohne Start der Haupt-App ist der entscheidende Vorteil für den Benutzer.
Wichtige Punkte
Action Extension ist eine Art iOS-App-Erweiterung, die es ermöglicht, Aktionen für Inhalte direkt im Kontext der Host-App auszuführen. Der Benutzer wählt Text in Safari aus, tippt auf „Aktionen“ und wählt zum Beispiel „Rechtschreibung prüfen“ — die Erweiterung verarbeitet den Text und gibt das Ergebnis zurück, ohne den Browser zu verlassen. Die Erweiterung empfängt Eingabedaten über NSExtensionContext und kann modifizierte Inhalte zurückgeben.
Action Extension erschien in iOS 8 als Teil der App-Erweiterungsarchitektur. Das Hauptmerkmal ist, dass die Erweiterung keine eigene Oberfläche hat (optional) und im Kontext der Host-App ausgeführt wird. Der Benutzer verlässt den aktuellen Bildschirm nicht, was für minimale kognitive Reibung sorgt. Laut Apple ist Action Extension der einzige Erweiterungstyp, der gleichzeitig Host-App-Inhalte lesen und ändern kann (via NSExtensionContext mit Ergebnisrückgabe).
Action Extension wird in verschiedenen Szenarien eingesetzt: Text im Browser übersetzen, PDF aus einer Webseite erstellen, Filter auf ein Foto in der Galerie anwenden, Rechtschreibung in jedem Textfeld prüfen, URL kürzen, Text verschlüsseln und Lesezeichen hinzufügen. Die Vielseitigkeit macht Action Extension zu einem beliebten Werkzeug für Apps der Kategorien „Dienstprogramme“ und „Produktivität“.
Action Extension und Share Extension werden oft verwechselt, aber ihre Zwecke sind grundlegend verschieden. Share Extension sendet Inhalte von der Host-App an Ihre App; Action Extension verarbeitet Inhalte und gibt sie zurück. Der Unterschied wirkt sich auf die Architektur, das Benutzererlebnis und die Info.plist-Konfigurationsanforderungen aus.
| Eigenschaft | Action Extension | Share Extension |
|---|---|---|
| Zweck | Inhaltstransformation | Inhaltsübertragung zur App |
| Oberfläche | Optional (benutzerdefiniert) | SLComposeServiceViewController |
| Datenrückgabe | Ja, über completeRequest | Nein |
| Kontext | Bleibt in der Host-App | Wechselt zur Erweiterung |
| Menüposition | Action Sheet (oberer Teil) | Share Sheet (unterer Teil) |
| Typische Aktion | Übersetzung, Korrektur, Filter | Speichern, Veröffentlichen |
Action Extension erscheint im Aktionsmenü (Action Sheet) beim Tippen auf die Schaltfläche „Teilen“ oder „...“. iOS platziert Action Extensions automatisch im oberen Teil des Blatts (Aktionen) und Share Extensions im unteren Teil (Apps). Benutzerszenario: Text ausgewählt → „Aktionen“ getippt → Ihre Action Extension ausgewählt → verarbeitetes Ergebnis erhalten ohne App-Wechsel.
Action Extension besteht aus einem Target in Xcode, einem UIViewController zur Anzeige der Oberfläche (optional), NSExtensionContext für Daten-Ein-/Ausgabe und Info.plist-Konfiguration. Die Architektur ist einfacher als bei Share Extension: Es gibt keine obligatorische Compose-Oberfläche, und die Erweiterung kann vollständig ohne UI arbeiten.
Target — ein separates Bundle mit einer von der Haupt-App geerbten Kennung. UIViewController — optionale Oberfläche zur Anzeige von Fortschritt, Einstellungen oder Ergebnissen. NSExtensionContext — ein Container mit Eingabedaten (inputItems) und der Methode completeRequest zur Ergebnisrückgabe. Info.plist — Aktivierungskonfiguration über NSExtensionActivationRule und Attribute (NSExtensionAttributes) zur Angabe unterstützter Inhaltstypen.
Action Extension empfängt Eingabedaten über extensionContext?.inputItems — ein Array von NSExtensionItem. Jedes Element enthält Anhänge mit Daten und UTI. Nach der Verarbeitung ruft die Erweiterung completeRequest(returningItems:) mit einem Array von Ausgabe-NSExtensionItems auf. Die Host-App empfängt die verarbeiteten Daten und zeigt sie an. Asynchrones Modell: Die Erweiterung kann langlaufende Operationen durchführen, wobei der Kontext bis zu 30 Sekunden gehalten wird.
Betrachten wir die Erstellung einer Action Extension in Swift zur Übersetzung von ausgewähltem Text. Die Erweiterung empfängt Text von der Host-App, sendet ihn an einen Übersetzungsserver und gibt das Ergebnis zurück. ActionViewController ist der Basis-Controller, der von Xcode beim Hinzufügen eines Targets erstellt wird.
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
}
}
}
}
}
}
Nach der Verarbeitung gibt die Erweiterung das Ergebnis an die Host-App zurück. completeRequest mit Ausgabedaten ist ein alternatives Szenario, bei dem die Erweiterung keine UI anzeigt, sondern sofort den verarbeiteten Inhalt zurückgibt.
// Returning processed text to 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 kann in zwei Modi arbeiten: mit UI und ohne UI. Im Modus ohne UI führt die Erweiterung die Aktion vollständig im Hintergrund aus und ruft completeRequest sofort nach der Verarbeitung auf. Im UI-Modus zeigt die Erweiterung einen Controller an, der Benutzer bestätigt die Aktion, und erst dann sendet completeRequest das Ergebnis. Die Modusauswahl hängt von der Komplexität der Aktion und der Notwendigkeit von Benutzereingaben ab.
Die Methode loadItem(forTypeIdentifier:) arbeitet asynchron — Daten können groß sein (Bilder, Videos). NSItemProvider verwaltet Streaming und Caching. Für Bilder verwenden Sie kUTTypeImage, für Dateien kUTTypeFileURL. Wichtig: loadItem kann in einem Hintergrundthread aufgerufen werden — aktualisieren Sie die UI nur über DispatchQueue.main.
Action Extension gibt verarbeitete Daten über completeRequest mit einem Array von NSExtensionItem zurück. Jedes Element entspricht dem Ausgabedatentyp. Die Host-App kann den ursprünglichen Inhalt durch den verarbeiteten ersetzen — zum Beispiel das Originalbild durch ein gefiltertes ersetzen. NSExtensionItem unterstützt dieselben UTIs wie die Eingabe sowie zusätzliche (z.B. public.html für Webinhalte).
Action Extension wird in Dutzenden von Szenarien eingesetzt — von einfachen Dienstprogrammen bis hin zu komplexen Geschäftsabläufen. Klassische Beispiele umfassen Text-, Grafik- und Dateioperationen sowie die Integration von Webinhalten.
Action Extension für Text: Übersetzung, Rechtschreibprüfung, Zeichenzählung, Groß-/Kleinschreibung ändern, Verschlüsselung, QR-Code aus Text erstellen. Der Benutzer wählt Text in einer beliebigen App mit Textfeld (Safari, Notizen, Mail) und führt die Aktion mit einem Tippen aus. Syntaxhervorhebung von Code, Markdown-Formatierung und URL-Kürzung sind beliebte Action Extension-Beispiele für fortgeschrittene Benutzer.
Für Bilder bietet Action Extension: Filter anwenden, Zuschneiden, Größe ändern, Formate konvertieren (HEIC in JPEG), Wasserzeichen hinzufügen, Texterkennung (OCR) und Komprimierung. Die Bildverarbeitung sollte schnell sein — der Benutzer erwartet ein Ergebnis innerhalb von 2–3 Sekunden. Für schwere Operationen verwenden Sie Core Image auf der GPU oder Hintergrundwarteschlangen.
Action Extension für URLs: PDF aus einer Webseite erstellen, in Pocket/Pinterest speichern, Website-Geschwindigkeit prüfen, Seite archivieren, Open Graph-Metadaten abrufen, Bildschirmfoto der Seite erstellen. Die PDF-Generierung ist eines der gefragtesten Szenarien: Der Benutzer konvertiert eine Webseite in PDF, ohne Drittanbieterdienste zu öffnen.
Häufig gestellte Fragen
Share Extension sendet Inhalte von der Host-App an Ihre App. Action Extension verarbeitet Inhalte vor Ort und gibt das Ergebnis zurück. Share — Übertragung, Action — Transformation. Dieser grundlegende Unterschied bestimmt die Architektur und die UX.
Ja. Wenn die Aktion keine Benutzereingabe erfordert (z.B. Zeichenzählung), kann die Erweiterung sie im Hintergrund ausführen und das Ergebnis sofort über completeRequest zurückgeben. In Info.plist müssen Sie NSExtensionActivationSupportsWebURL oder eine andere UTI angeben, die dem Datentyp entspricht.
In allen Apps, die UIActivityViewController oder Standard-Aktionscontroller unterstützen. Dazu gehören Safari, Fotos, Dateien, Notizen, Mail und Tausende von Drittanbieter-Apps. Action Extension funktioniert nicht in Apps, die keine standardmäßigen iOS-Aktionsmechanismen verwenden.
Über extensionContext.completeRequest(returningItems:) mit einem Array von NSExtensionItem. Jedes Ausgabeelement enthält einen NSItemProvider mit den verarbeiteten Daten. Die Host-App empfängt das Ergebnis im Delegaten von UIActivityViewController oder einem ähnlichen Callback.
Die Erweiterung läuft maximal 30 Sekunden, danach beendet iOS sie zwangsweise. Es gibt keinen direkten Zugriff auf die Haupt-App — nur über App Groups. Action Extension kann nach Abschluss keine Hintergrundaufgaben ausführen. Für langlaufende Operationen verwenden Sie eine Hintergrund-NSURLSession mit einer Benachrichtigung beim nächsten Start.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch