Action Extension är ett iOS-tillägg som utför anpassade åtgärder med innehåll från andra appar utan att växla sammanhang. Till skillnad från Share Extension, som skickar data till en annan app, transformerar Action Extension innehållet direkt på plats: översätter text, ändrar bildfilter, kontrollerar stavning eller genererar PDF. Enligt Apple (2024) är Action Extension den näst mest populära tilläggstypen efter Share Extension, som används i 42 % av apparna i kategorin “Produktivitet”. Omedelbar åtgärd utan att starta huvudappen — en viktig fördel för användaren.
Huvudpunkter
Action Extension — är en typ av iOS-apptillägg som låter dig utföra en åtgärd på innehåll direkt i värdappens sammanhang. Användaren markerar text i Safari, trycker på “Åtgärder” och väljer till exempel “Kontrollera stavning” — tillägget bearbetar texten och returnerar resultatet utan att lämna webbläsaren. Tillägget tar emot indata via NSExtensionContext och kan returnera det ändrade innehållet.
Action Extension dök upp i iOS 8 som en del av arkitekturen för apptillägg. Dess viktigaste egenskap är att tillägget inte har något eget gränssnitt (valfritt) och körs i värdappens sammanhang. Användaren lämnar inte den aktuella skärmen, vilket säkerställer minimalt kognitivt avbrott. Enligt Apple är Action Extension den enda typen av tillägg som samtidigt kan läsa och ändra innehållet i värdappen (via NSExtensionContext med returnering av resultatet).
Action Extension används i olika scenarier: översättning av text i webbläsaren, skapa PDF från en webbsida, applicera ett filter på ett foto i galleriet, kontrollera stavning i valfritt textfält, förkorta URL, kryptera text och lägga till i bokmärken. Action Extensions mångsidighet gör det till ett populärt verktyg för appar i kategorierna “Verktyg” och “Produktivitet”.
Action Extension och Share Extension förväxlas ofta, men deras syfte är fundamentalt olika. Share Extension skickar innehåll från värdappen till din app; Action Extension bearbetar innehållet och skickar tillbaka det. Skillnaden påverkar arkitekturen, användarupplevelsen och konfigurationskraven för Info.plist.
| Egenskap | Action Extension | Share Extension |
|---|---|---|
| Syfte | Transformation av innehåll | Överföring av innehåll till app |
| Gränssnitt | Valfritt (anpassat) | SLComposeServiceViewController |
| Returnering av data | Ja, via completeRequest | Nej |
| Sammanhang | Stannar i värdappen | Växlar till tillägget |
| Position i menyn | Action Sheet (övre delen) | Share Sheet (nedre delen) |
| Typisk åtgärd | Översättning, korrigering, filter | Spara, publicera |
Action Extension visas i åtgärdsmenyn (Action Sheet) när knappen “Dela” eller “...” trycks in. iOS placerar automatiskt Action Extensions i den övre delen av arket (åtgärder) och Share Extensions i den nedre delen (appar). Användarscenario: markerade text → tryckte på “Åtgärder” → valde ditt Action Extension → fick bearbetat resultat utan att växla appar.
Action Extension består av en target i Xcode, UIViewController för att visa gränssnittet (valfritt), NSExtensionContext för in- och utdata samt Info.plist-konfiguration. Arkitekturen är enklare än för Share Extension: det finns inget obligatoriskt kompositionsgränssnitt och tillägget kan fungera helt utan UI.
Target — en separat bundle med en identifierare som ärvs från huvudappen. UIViewController — valfritt gränssnitt för att visa förlopp, inställningar eller resultat. NSExtensionContext — behållare med indata (inputItems) och metoden completeRequest för att returnera resultatet. Info.plist — aktiveringskonfiguration via NSExtensionActivationRule och attribut (NSExtensionAttributes) för att ange vilka innehållstyper som stöds.
Action Extension tar emot indata via extensionContext?.inputItems — en array av NSExtensionItem. Varje element innehåller bilagor med data och UTI. Efter bearbetning anropar tillägget completeRequest(returningItems:) med en array av utgående NSExtensionItem. Värdappen tar emot den bearbetade datan och visar den. Asynkron modell: tillägget kan utföra långvariga operationer och hålla sammanhanget i upp till 30 sekunder.
Låt oss titta på att skapa ett Action Extension i Swift för att översätta markerad text. Tillägget tar emot text från värdappen, skickar den till en översättningsserver och returnerar resultatet. ActionViewController — den grundläggande kontrollern som Xcode skapar när du lägger till en 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
}
}
}
}
}
}
Efter bearbetning returnerar tillägget resultatet till värdappen. completeRequest med utdata — det alternativa scenariot när tillägget inte visar UI utan omedelbart returnerar det bearbetade innehållet.
// Returnera bearbetad text till värdappen
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 fungera i två lägen: med UI och utan UI. I läget utan UI utför tillägget åtgärden helt i bakgrunden och anropar completeRequest omedelbart efter bearbetning. I läget med UI visar tillägget en kontroller, användaren bekräftar åtgärden och först då skickar completeRequest resultatet. Val av läge beror på åtgärdens komplexitet och behovet av användarinmatning.
Metoden loadItem(forTypeIdentifier:) fungerar asynkront — data kan vara stor (bilder, video). NSItemProvider hanterar strömningsladdning och cachning. För bilder använd kUTTypeImage, för filer — kUTTypeFileURL. Viktigt: loadItem kan anropas på en bakgrundstråd — uppdatera UI endast via DispatchQueue.main.
Action Extension returnerar bearbetad data via completeRequest med en array av NSExtensionItem. Varje element motsvarar typen av utdata. Värdappen kan ersätta det ursprungliga innehållet med bearbetat — till exempel ersätta den ursprungliga bilden med en filtrerad. NSExtensionItem stöder samma UTI som vid inmatning, plus ytterligare (till exempel public.html för webbinnehåll).
Action Extension tillämpas i dussintals scenarier — från enkla verktyg till komplexa affärsprocesser. Klassiska exempel omfattar text-, grafik- och filoperationer, samt integration med webbinnehåll.
Action Extension för text: översättning, stavningskontroll, teckenräkning, ändring av skiftläge, kryptering, skapa QR-kod från text. Användaren markerar text i valfri app med ett textfält (Safari, Anteckningar, Mail) och utför åtgärden med ett klick. Syntaxmarkering av kod, Markdown-formatering och URL-förkortning — populära exempel på Action Extension för avancerade användare.
För bilder erbjuder Action Extension: applicera filter, beskrära, ändra storlek, formatkonvertering (HEIC till JPEG), lägga till vattenstämpel, textigenkänning (OCR) och komprimering. Bildbehandling måste vara snabb — användaren förväntar sig resultat inom 2–3 sekunder. För tunga operationer, använd Core Image på GPU eller bakgrundsköer.
Action Extension för URL: skapa PDF från en webbsida, spara i Pocket/Pinterest, kontrollera webbplatshastighet, arkivera sida, hämta Open Graph-metadata, generera skärmdump av sida. PDF-generering — ett av de mest populära scenarierna: användaren konverterar en webbsida till PDF utan att öppna tredjepartstjänster.
Vanliga frågor
Share Extension skickar innehåll från värdappen till din app. Action Extension bearbetar innehållet på plats och returnerar resultatet. Share — överföring, Action — transformation. Detta är den grundläggande skillnaden som bestämmer arkitekturen och UX.
Ja. Om åtgärden inte kräver indata från användaren (till exempel teckenräkning), kan tillägget utföra den i bakgrunden och omedelbart returnera resultatet via completeRequest. I Info.plist måste NSExtensionActivationSupportsWebURL eller en annan UTI som motsvarar datatypen anges.
I alla appar som stöder UIActivityViewController eller standardåtgärdskontroller. Dessa inkluderar Safari, Foton, Filer, Anteckningar, Mail och tusentals tredjepartsappar. Action Extension fungerar inte i appar som inte använder standardmekanismer i iOS för åtgärder.
Via extensionContext.completeRequest(returningItems:) med en array av NSExtensionItem. Varje utdataelement innehåller NSItemProvider med bearbetad data. Värdappen tar emot resultatet i delegaten för UIActivityViewController eller i en liknande callback.
Tillägget fungerar i upp till 30 sekunder, varefter iOS tvångsavslutar det. Det finns ingen direkt åtkomst till huvudappen — endast via App Groups. Action Extension kan inte utföra bakgrundsuppgifter efter avslutad körning. För långvariga operationer, använd bakgrunds-NSURLSession med en notifiering vid nästa start.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också