Action Extension: co to je, jak funguje a vývoj rozšíření

Autor: IT Sectr Publikováno: 2026-06-15 Doba čtení: 10 min

Action Extension je rozšíření iOS, které provádí uživatelské akce s obsahem z jiných aplikací bez přepínání kontextu. Na rozdíl od Share Extension, které odesílá data do jiné aplikace, Action Extension transformuje obsah přímo na místě: překládá text, mění filtry obrázků, kontroluje pravopis nebo generuje PDF. Podle údajů Apple (2024) je Action Extension druhým nejoblíbenějším typem rozšíření po Share Extension, používaným ve 42 % aplikací kategorie „Produktivita”. Okamžitá akce bez spuštění hlavní aplikace — klíčová výhoda pro uživatele.

Hlavní body

  • Action Extension — rozšíření iOS pro transformaci obsahu v hostitelské aplikaci.
  • NSExtensionContext — kontext spuštění se vstupními a výstupními daty.
  • UTI — Uniform Type Identifiers pro určení typu zpracovávaného obsahu.
  • UIActivity — starší mechanismus pro implementaci akcí v iOS 6–7.
  • App Groups — přenos zpracovaných dat zpět do aplikace.

Co je Action Extension

Action Extension je typ rozšíření iOS, který umožňuje provést akci s obsahem přímo v kontextu hostitelské aplikace. Uživatel vybere text v Safari, stiskne „Akce” a zvolí například „Kontrola pravopisu” — rozšíření zpracuje text a vrátí výsledek, aniž by opustil prohlížeč. Rozšíření přijímá vstupní data prostřednictvím NSExtensionContext a může vrátit upravený obsah zpět.

Action Extension se objevil v iOS 8 jako součást architektury rozšíření aplikací. Jeho klíčovou vlastností je, že rozšíření nemá vlastní rozhraní (volitelně) a běží v kontextu hostitelské aplikace. Uživatel neopouští aktuální obrazovku, což zajišťuje minimální kognitivní přerušení. Podle Apple je Action Extension jediným typem rozšíření, které může současně číst a upravovat obsah hostitelské aplikace (prostřednictvím NSExtensionContext s vrácením výsledku).

Kde se Action Extension používá

Action Extension se používá v různých scénářích: překlad textu v prohlížeči, vytvoření PDF z webové stránky, aplikace filtru na fotografii v galerii, kontrola pravopisu v libovolném textovém poli, zkrácení URL, šifrování textu a přidání do záložek. Univerzálnost Action Extension z něj činí oblíbený nástroj pro aplikace kategorií „Nástroje” a „Produktivita”.

Action Extension vs Share Extension

Action Extension a Share Extension jsou často zaměňovány, ale jejich účel je zásadně odlišný. Share Extension odesílá obsah z hostitelské aplikace do vaší aplikace; Action Extension obsah zpracovává a vrací jej zpět. Rozdíl ovlivňuje architekturu, uživatelský zážitek a požadavky na konfiguraci Info.plist.

VlastnostAction ExtensionShare Extension
ÚčelTransformace obsahuPřenos obsahu do aplikace
RozhraníVolitelné (vlastní)SLComposeServiceViewController
Vrácení datAno, prostřednictvím completeRequestNe
KontextZůstává v hostitelské aplikaciPřepíná do rozšíření
Pozice v nabídceAction Sheet (horní část)Share Sheet (spodní část)
Typická akcePřeklad, korekce, filtrUložení, publikování

Jak uživatel vybírá akci

Action Extension se zobrazí v nabídce akcí (Action Sheet) po stisknutí tlačítka „Sdílet” nebo „...”. iOS automaticky umísťuje Action Extensions do horní části listu (akce) a Share Extensions do spodní části (aplikace). Uživatelský scénář: vybral text → stiskl „Akce” → zvolil vaše Action Extension → obdržel zpracovaný výsledek bez přepínání aplikací.

Architektura Action Extension

Action Extension se skládá z targetu v Xcode, UIViewController pro zobrazení rozhraní (volitelně), NSExtensionContext pro vstup-výstup dat a konfigurace Info.plist. Architektura je jednodušší než u Share Extension: není povinné rozhraní pro skládání a rozšíření může fungovat zcela bez UI.

Komponenty Action Extension

Target — samostatný bundle s identifikátorem zděděným z hlavní aplikace. UIViewController — volitelné rozhraní pro zobrazení průběhu, nastavení nebo výsledku. NSExtensionContext — kontejner se vstupními daty (inputItems) a metodou completeRequest pro vrácení výsledku. Info.plist — konfigurace aktivace prostřednictvím NSExtensionActivationRule a atributů (NSExtensionAttributes) pro určení podporovaných typů obsahu.

NSExtensionContext a datové toky

Action Extension přijímá vstupní data prostřednictvím extensionContext?.inputItems — pole NSExtensionItem. Každý prvek obsahuje přílohy s daty a UTI. Po zpracování rozšíření zavolá completeRequest(returningItems:) s polem výstupních NSExtensionItem. Hostitelská aplikace obdrží zpracovaná data a zobrazí je. Asynchronní model: rozšíření může provádět dlouhé operace, přičemž kontext udržuje až 30 sekund.

Vytvoření Action Extension

Podívejme se na vytvoření Action Extension v Swift pro překlad vybraného textu. Rozšíření obdrží text z hostitelské aplikace, odešle jej na překladový server a vrátí výsledek. ActionViewController — základní kontrolér vytvořený Xcode při přidání targetu.

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

Po zpracování rozšíření vrátí výsledek do hostitelské aplikace. completeRequest s výstupními daty — alternativní scénář, kdy rozšíření nezobrazuje UI, ale okamžitě vrací zpracovaný obsah.

swift
// Vrácení zpracovaného textu hostitelské aplikaci
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
)

Zpracování dat a vrácení výsledku

Action Extension může pracovat ve dvou režimech: s UI a bez UI. V režimu bez UI rozšíření provede akci zcela na pozadí a zavolá completeRequest ihned po zpracování. V režimu s UI rozšíření zobrazí kontrolér, uživatel potvrdí akci a teprve poté completeRequest odešle výsledek. Volba režimu závisí na složitosti akce a potřebě vstupu uživatele.

Načtení dat z přílohy

Metoda loadItem(forTypeIdentifier:) pracuje asynchronně — data mohou být velká (obrázky, videa). NSItemProvider spravuje streamované načítání a ukládání do mezipaměti. Pro obrázky použijte kUTTypeImage, pro soubory — kUTTypeFileURL. Důležité: loadItem může být volán na vlákně na pozadí — aktualizujte UI pouze prostřednictvím DispatchQueue.main.

Vrácení upravených dat

Action Extension vrací zpracovaná data prostřednictvím completeRequest s polem NSExtensionItem. Každý prvek odpovídá typu výstupních dat. Hostitelská aplikace může nahradit původní obsah zpracovaným — například nahradit původní obrázek filtrovaným. NSExtensionItem podporuje stejná UTI jako na vstupu, plus další (např. public.html pro webový obsah).

Scénáře použití Action Extension

Action Extension se uplatňuje v desítkách scénářů — od jednoduchých nástrojů po složité obchodní procesy. Klasické příklady zahrnují textové, grafické a souborové operace, stejně jako integraci s webovým obsahem.

Textové scénáře

Action Extension pro text: překlad, kontrola pravopisu, počítání znaků, změna velikosti písmen, šifrování, vytvoření QR kódu z textu. Uživatel vybere text v libovolné aplikaci s textovým polem (Safari, Poznámky, Pošta) a jedním kliknutím provede akci. Zvýrazňování syntaxe kódu, formátování Markdown a zkracování URL — oblíbené příklady Action Extension pro pokročilé uživatele.

Grafické scénáře

Pro obrázky Action Extension nabízí: použití filtrů, oříznutí, změnu velikosti, konverzi formátů (HEIC na JPEG), přidání vodoznaku, rozpoznávání textu (OCR) a kompresi. Zpracování obrázků musí být rychlé — uživatel očekává výsledek do 2–3 sekund. Pro náročné operace použijte Core Image na GPU nebo fronty na pozadí.

Webové scénáře

Action Extension pro URL: vytvoření PDF z webové stránky, uložení do Pocket/Pinterest, kontrola rychlosti webu, archivace stránky, získání metadat Open Graph, generování snímku obrazovky stránky. Generování PDF — jeden z nejoblíbenějších scénářů: uživatel převede webovou stránku do PDF bez otevírání služeb třetích stran.

Často kladené otázky

Jaký je klíčový rozdíl mezi Action Extension a Share Extension?

Share Extension odesílá obsah z hostitelské aplikace do vaší aplikace. Action Extension zpracovává obsah na místě a vrací výsledek zpět. Share — přenos, Action — transformace. To je zásadní rozdíl určující architekturu a UX.

Může Action Extension nemít rozhraní?

Ano. Pokud akce nevyžaduje vstup od uživatele (například počítání znaků), rozšíření ji může provést na pozadí a okamžitě vrátit výsledek prostřednictvím completeRequest. V Info.plist je třeba uvést NSExtensionActivationSupportsWebURL nebo jiné UTI odpovídající typu dat.

Ve kterých aplikacích se Action Extension zobrazuje?

Ve všech aplikacích, které podporují UIActivityViewController nebo standardní kontroléry akcí. Patří mezi ně Safari, Fotky, Soubory, Poznámky, Pošta a tisíce aplikací třetích stran. Action Extension nefunguje v aplikacích, které nepoužívají standardní mechanismy iOS pro akce.

Jak vrátit zpracovaný obsah do hostitelské aplikace?

Prostřednictvím extensionContext.completeRequest(returningItems:) s polem NSExtensionItem. Každý výstupní prvek obsahuje NSItemProvider se zpracovanými daty. Hostitelská aplikace obdrží výsledek v delegátu UIActivityViewController nebo podobném callbacku.

Jaká jsou omezení Action Extension?

Rozšíření pracuje až 30 sekund, poté jej iOS násilně ukončí. Neexistuje přímý přístup k hlavní aplikaci — pouze prostřednictvím App Groups. Action Extension nemůže po dokončení provádět úlohy na pozadí. Pro dlouhé operace použijte NSURLSession na pozadí s oznámením při příštím spuštění.

Shrnutí

  • Action Extension — rozšíření iOS pro přímou transformaci obsahu v hostitelské aplikaci.
  • Liší se od Share Extension vracením zpracovaných dat prostřednictvím NSExtensionContext.
  • Může pracovat s UI nebo zcela na pozadí bez rozhraní.
  • Podporuje všechny typy obsahu: text, obrázky, URL, soubory prostřednictvím UTI.
  • Používá se pro překlad, filtry, generování PDF, OCR a kontrolu pravopisu.
  • Časové omezení provádění — 30 sekund, přístup k aplikaci — prostřednictvím App Groups.
  • Action Extension se používá ve 42 % aplikací kategorie „Produktivita”.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také