Action Extension: ce este, cum funcționează și dezvoltarea extensiei

Autor: IT Sectr Publicat: 2026-06-15 Timp de citire: 10 min

Action Extension este o extensie iOS care execută acțiuni personalizate cu conținut din alte aplicații fără a comuta contextul. Spre deosebire de Share Extension, care trimite date către o altă aplicație, Action Extension transformă conținutul direct pe loc: traduce text, schimbă filtrele imaginii, verifică ortografia sau generează PDF. Potrivit Apple (2024), Action Extension este al doilea cel mai popular tip de extensie după Share Extension, utilizat în 42% dintre aplicații din categoria „Productivitate”. Acțiunea instantanee fără a lansa aplicația principală — avantajul cheie pentru utilizator.

Principalele

  • Action Extension — extensie iOS pentru transformarea conținutului în aplicația gazdă.
  • NSExtensionContext — context de execuție cu date de intrare și ieșire.
  • UTI — Uniform Type Identifiers pentru determinarea tipului de conținut procesat.
  • UIActivity — mecanism legacy pentru implementarea acțiunilor în iOS 6–7.
  • App Groups — transmiterea datelor procesate înapoi în aplicație.

Ce este Action Extension

Action Extension este un tip de extensie iOS care permite efectuarea unei acțiuni asupra conținutului direct în contextul aplicației gazdă. Utilizatorul selectează text în Safari, apasă „Acțiuni” și alege, de exemplu, „Verifică ortografia” — extensia procesează textul și returnează rezultatul fără a părăsi browserul. Extensia primește datele de intrare prin NSExtensionContext și poate returna conținutul modificat înapoi.

Action Extension a apărut în iOS 8 ca parte a arhitecturii extensiilor de aplicații. Caracteristica sa cheie este că extensia nu are interfață proprie (opțional) și rulează în contextul aplicației gazdă. Utilizatorul nu părăsește ecranul curent, ceea ce asigură o întrerupere cognitivă minimă. Potrivit Apple, Action Extension este singurul tip de extensie care poate citi și modifica simultan conținutul aplicației gazdă (prin NSExtensionContext cu returnarea rezultatului).

Unde se aplică Action Extension

Action Extension este utilizat în diverse scenarii: traducerea textului în browser, crearea PDF dintr-o pagină web, aplicarea unui filtru unei fotografii în galerie, verificarea ortografiei în orice câmp de text, scurtarea URL, criptarea textului și adăugarea la marcaje. Versatilitatea Action Extension îl face un instrument popular pentru aplicațiile din categoria „Utilități” și „Productivitate”.

Action Extension versus Share Extension

Action Extension și Share Extension sunt adesea confundate, dar scopul lor este fundamental diferit. Share Extension trimite conținutul din aplicația gazdă către aplicația ta; Action Extension procesează conținutul și îl returnează înapoi. Diferența afectează arhitectura, experiența utilizatorului și cerințele de configurare Info.plist.

CaracteristicăAction ExtensionShare Extension
ScopTransformarea conținutuluiTransmiterea conținutului în aplicație
InterfațăOpțional (personalizat)SLComposeServiceViewController
Returnare dateDa, prin completeRequestNu
ContextRămâne în aplicația gazdăSe comută în extensie
Poziție în meniuAction Sheet (partea de sus)Share Sheet (partea de jos)
Acțiune tipicăTraducere, corectare, filtruSalvare, publicare

Cum alege utilizatorul acțiunea

Action Extension apare în meniul de acțiuni (Action Sheet) la apăsarea butonului „Partajează” sau „...”. iOS plasează automat Action Extensions în partea de sus a foii (acțiuni), iar Share Extensions în partea de jos (aplicații). Scenariul utilizatorului: a selectat text → a apăsat „Acțiuni” → a ales Action Extension → a primit rezultatul procesat fără a comuta aplicațiile.

Arhitectura Action Extension

Action Extension constă dintr-un target în Xcode, UIViewController pentru afișarea interfeței (opțional), NSExtensionContext pentru intrare-ieșire date și configurarea Info.plist. Arhitectura este mai simplă decât la Share Extension: nu există o interfață de compunere obligatorie, iar extensia poate funcționa complet fără UI.

Componentele Action Extension

Target — un bundle separat cu un identificator moștenit de la aplicația principală. UIViewController — interfață opțională pentru afișarea progresului, setărilor sau rezultatului. NSExtensionContext — container cu date de intrare (inputItems) și metoda completeRequest pentru returnarea rezultatului. Info.plist — configurarea activării prin NSExtensionActivationRule și atribute (NSExtensionAttributes) pentru specificarea tipurilor de conținut suportate.

NSExtensionContext și fluxurile de date

Action Extension primește datele de intrare prin extensionContext?.inputItems — un array de NSExtensionItem. Fiecare element conține atașamente cu date și UTI. După procesare, extensia apelează completeRequest(returningItems:) cu un array de NSExtensionItem de ieșire. Aplicația gazdă primește datele procesate și le afișează. Model asincron: extensia poate efectua operații lungi, menținând contextul până la 30 de secunde.

Crearea Action Extension

Să examinăm crearea unui Action Extension în Swift pentru traducerea textului selectat. Extensia primește textul din aplicația gazdă, îl trimite la serverul de traducere și returnează rezultatul. ActionViewController — controllerul de bază creat de Xcode la adăugarea targetului.

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

După procesare, extensia returnează rezultatul în aplicația gazdă. completeRequest cu date de ieșire — scenariul alternativ, când extensia nu afișează UI, ci returnează imediat conținutul procesat.

swift
// Returnarea textului procesat către aplicația gazdă
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
)

Procesarea datelor și returnarea rezultatului

Action Extension poate funcționa în două moduri: cu UI și fără UI. În modul fără UI, extensia execută acțiunea complet în fundal și apelează completeRequest imediat după procesare. În modul cu UI, extensia afișează un controller, utilizatorul confirmă acțiunea și abia apoi completeRequest trimite rezultatul. Alegerea modului depinde de complexitatea acțiunii și de necesitatea intrării utilizatorului.

Încărcarea datelor din atașament

Metoda loadItem(forTypeIdentifier:) funcționează asincron — datele pot fi mari (imagini, video). NSItemProvider gestionează încărcarea în flux și stocarea în cache. Pentru imagini utilizați kUTTypeImage, pentru fișiere — kUTTypeFileURL. Important: loadItem poate fi apelat pe un fir de execuție de fundal — actualizați UI doar prin DispatchQueue.main.

Returnarea datelor modificate

Action Extension returnează datele procesate prin completeRequest cu un array de NSExtensionItem. Fiecare element corespunde tipului de date de ieșire. Aplicația gazdă poate înlocui conținutul original cu cel procesat — de exemplu, poate înlocui imaginea originală cu una filtrată. NSExtensionItem suportă aceleași UTI ca la intrare, plus altele suplimentare (de exemplu, public.html pentru conținut web).

Scenarii de utilizare Action Extension

Action Extension se aplică în zeci de scenarii — de la utilități simple la procese de afaceri complexe. Exemplele clasice includ operații text, grafice și fișiere, precum și integrarea cu conținut web.

Scenarii text

Action Extension pentru text: traducere, verificare ortografie, numărare caractere, schimbare litere mari/mici, criptare, creare cod QR din text. Utilizatorul selectează textul în orice aplicație cu câmp text (Safari, Note, Mail) și cu un singur clic execută acțiunea. Evidențierea sintaxei codului, formatarea Markdown și scurtarea URL — exemple populare de Action Extension pentru utilizatori avansați.

Scenarii grafice

Pentru imagini, Action Extension oferă: aplicarea filtrelor, decuparea, redimensionarea, conversia formatelor (HEIC în JPEG), adăugarea filigranului, recunoașterea textului (OCR) și compresia. Procesarea imaginilor trebuie să fie rapidă — utilizatorul așteaptă rezultatul în 2–3 secunde. Pentru operații grele, utilizați Core Image pe GPU sau cozi de fundal.

Scenarii web

Action Extension pentru URL: crearea PDF dintr-o pagină web, salvarea în Pocket/Pinterest, verificarea vitezei site-ului, arhivarea paginii, obținerea metadatelor Open Graph, generarea capturii de ecran a paginii. Generarea PDF — unul dintre cele mai populare scenarii: utilizatorul convertește o pagină web în PDF fără a deschide servicii terțe.

Întrebări frecvente

Care este diferența cheie dintre Action Extension și Share Extension?

Share Extension trimite conținutul din aplicația gazdă către aplicația ta. Action Extension procesează conținutul pe loc și returnează rezultatul înapoi. Share — transmitere, Action — transformare. Aceasta este diferența fundamentală care determină arhitectura și UX.

Poate Action Extension să nu aibă interfață?

Da. Dacă acțiunea nu necesită introducere de la utilizator (de exemplu, numărarea caracterelor), extensia o poate executa în fundal și poate returna imediat rezultatul prin completeRequest. În Info.plist trebuie specificat NSExtensionActivationSupportsWebURL sau un alt UTI corespunzător tipului de date.

În ce aplicații apare Action Extension?

În orice aplicații care suportă UIActivityViewController sau controllerele standard de acțiuni. Acestea includ Safari, Fotografii, Fișiere, Note, Mail și mii de aplicații terțe. Action Extension nu funcționează în aplicațiile care nu utilizează mecanismele standard iOS pentru acțiuni.

Cum returnăm conținutul procesat în aplicația gazdă?

Prin extensionContext.completeRequest(returningItems:) cu un array de NSExtensionItem. Fiecare element de ieșire conține NSItemProvider cu datele procesate. Aplicația gazdă primește rezultatul în delegatul UIActivityViewController sau într-un callback similar.

Care sunt limitările Action Extension?

Extensia funcționează până la 30 de secunde, după care iOS o încheie forțat. Nu există acces direct la aplicația principală — doar prin App Groups. Action Extension nu poate executa sarcini în fundal după terminare. Pentru operații lungi, utilizați NSURLSession în fundal cu notificare la următoarea lansare.

Rezumat

  • Action Extension — extensie iOS pentru transformarea conținutului direct în aplicația gazdă.
  • Se deosebește de Share Extension prin returnarea datelor procesate prin NSExtensionContext.
  • Poate funcționa cu UI sau complet în fundal fără interfață.
  • Suportă toate tipurile de conținut: text, imagini, URL, fișiere prin UTI.
  • Folosit pentru traducere, filtre, generare PDF, OCR și verificare ortografică.
  • Limitare de timp de execuție — 30 de secunde, acces la aplicație — prin App Groups.
  • Action Extension este utilizat în 42% din aplicațiile din categoria „Productivitate”.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și