Action Extension: co to jest, jak działa i tworzenie rozszerzenia

Autor: IT Sectr Opublikowano: 2026-06-15 Czas czytania: 10 min

Action Extension to rozszerzenie iOS, które wykonuje niestandardowe akcje na treści z innych aplikacji bez przełączania kontekstu. W przeciwieństwie do Share Extension, które wysyła dane do innej aplikacji, Action Extension przekształca treść bezpośrednio na miejscu: tłumaczy tekst, zmienia filtry obrazu, sprawdza pisownię lub generuje PDF. Według danych Apple (2024), Action Extension jest drugim najpopularniejszym typem rozszerzenia po Share Extension, używanym w 42% aplikacji kategorii „Produktywność”. Natychmiastowe działanie bez uruchamiania głównej aplikacji — kluczowa zaleta dla użytkownika.

Najważniejsze

  • Action Extension — rozszerzenie iOS do przekształcania treści w aplikacji hosta.
  • NSExtensionContext — kontekst wykonania z danymi wejściowymi i wyjściowymi.
  • UTI — Uniform Type Identifiers do określania typu przetwarzanej treści.
  • UIActivity — starszy mechanizm do implementacji akcji w iOS 6–7.
  • App Groups — przesyłanie przetworzonych danych z powrotem do aplikacji.

Czym jest Action Extension

Action Extension to typ rozszerzenia iOS app extension, który umożliwia wykonanie akcji na treści bezpośrednio w kontekście aplikacji hosta. Użytkownik zaznacza tekst w Safari, naciska „Akcje” i wybiera na przykład „Sprawdź pisownię” — rozszerzenie przetwarza tekst i zwraca wynik bez opuszczania przeglądarki. Rozszerzenie otrzymuje dane wejściowe przez NSExtensionContext i może zwrócić zmodyfikowaną treść z powrotem.

Action Extension pojawił się w iOS 8 jako część architektury app extensions. Jego kluczową cechą jest to, że rozszerzenie nie ma własnego interfejsu (opcjonalnie) i działa w kontekście aplikacji hosta. Użytkownik nie opuszcza bieżącego ekranu, co zapewnia minimalną przerwę poznawczą. Według Apple, Action Extension to jedyny typ rozszerzenia, który może jednocześnie czytać i modyfikować treść aplikacji hosta (przez NSExtensionContext ze zwrotem wyniku).

Gdzie stosuje się Action Extension

Action Extension jest używany w różnych scenariuszach: tłumaczenie tekstu w przeglądarce, tworzenie PDF ze strony internetowej, stosowanie filtru do zdjęcia w galerii, sprawdzanie pisowni w dowolnym polu tekstowym, skracanie URL, szyfrowanie tekstu i dodawanie do zakładek. Uniwersalność Action Extension czyni go popularnym narzędziem dla aplikacji kategorii „Narzędzia” i „Produktywność”.

Action Extension a Share Extension

Action Extension i Share Extension są często mylone, ale ich przeznaczenie jest zasadniczo różne. Share Extension wysyła treść z aplikacji hosta do twojej aplikacji; Action Extension przetwarza treść i zwraca ją z powrotem. Różnica wpływa na architekturę, doświadczenie użytkownika i wymagania konfiguracji Info.plist.

CechaAction ExtensionShare Extension
PrzeznaczeniePrzekształcanie treściPrzekazywanie treści do aplikacji
InterfejsOpcjonalnie (niestandardowy)SLComposeServiceViewController
Zwrot danychTak, przez completeRequestNie
KontekstPozostaje w aplikacji hostaPrzełącza się do rozszerzenia
Pozycja w menuAction Sheet (górna część)Share Sheet (dolna część)
Typowa akcjaTłumaczenie, korekta, filtrZapisywanie, publikowanie

Jak użytkownik wybiera akcję

Action Extension pojawia się w menu akcji (Action Sheet) po naciśnięciu przycisku „Udostępnij” lub „...”. iOS automatycznie umieszcza Action Extensions w górnej części arkusza (akcje), a Share Extensions w dolnej (aplikacje). Scenariusz użytkownika: zaznaczył tekst → nacisnął „Akcje” → wybrał twoje Action Extension → otrzymał przetworzony wynik bez przełączania aplikacji.

Architektura Action Extension

Action Extension składa się z targetu w Xcode, UIViewController do wyświetlania interfejsu (opcjonalnie), NSExtensionContext do wejścia-wyjścia danych oraz konfiguracji Info.plist. Architektura jest prostsza niż w Share Extension: nie ma obowiązkowego interfejsu compose, a rozszerzenie może działać całkowicie bez UI.

Komponenty Action Extension

Target — oddzielny bundle z identyfikatorem dziedziczonym z głównej aplikacji. UIViewController — opcjonalny interfejs do wyświetlania postępu, ustawień lub wyniku. NSExtensionContext — kontener z danymi wejściowymi (inputItems) i metodą completeRequest do zwracania wyniku. Info.plist — konfiguracja aktywacji przez NSExtensionActivationRule i atrybuty (NSExtensionAttributes) do określania obsługiwanych typów treści.

NSExtensionContext i przepływy danych

Action Extension otrzymuje dane wejściowe przez extensionContext?.inputItems — tablicę NSExtensionItem. Każdy element zawiera załączniki z danymi i UTI. Po przetworzeniu rozszerzenie wywołuje completeRequest(returningItems:) z tablicą wyjściowych NSExtensionItem. Aplikacja hosta otrzymuje przetworzone dane i wyświetla je. Model asynchroniczny: rozszerzenie może wykonywać długotrwałe operacje, utrzymując kontekst do 30 sekund.

Tworzenie Action Extension

Rozważmy tworzenie Action Extension w Swift do tłumaczenia zaznaczonego tekstu. Rozszerzenie otrzymuje tekst z aplikacji hosta, wysyła go na serwer tłumaczeń i zwraca wynik. ActionViewController — podstawowy kontroler tworzony przez Xcode po dodaniu 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 przetworzeniu rozszerzenie zwraca wynik do aplikacji hosta. completeRequest z danymi wyjściowymi — alternatywny scenariusz, gdy rozszerzenie nie pokazuje UI, a od razu zwraca przetworzoną treść.

swift
// Zwracanie przetworzonego tekstu do aplikacji hosta
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
)

Przetwarzanie danych i zwracanie wyniku

Action Extension może działać w dwóch trybach: z UI i bez UI. W trybie bez UI rozszerzenie wykonuje akcję całkowicie w tle i wywołuje completeRequest natychmiast po przetworzeniu. W trybie z UI rozszerzenie pokazuje kontroler, użytkownik potwierdza akcję, i dopiero wtedy completeRequest wysyła wynik. Wybór trybu zależy od złożoności akcji i konieczności wprowadzania danych przez użytkownika.

Wczytywanie danych z załącznika

Metoda loadItem(forTypeIdentifier:) działa asynchronicznie — dane mogą być duże (obrazy, wideo). NSItemProvider zarządza strumieniowym wczytywaniem i buforowaniem. Dla obrazów użyj kUTTypeImage, dla plików — kUTTypeFileURL. Ważne: loadItem może być wywołany na wątku tła — aktualizuj UI tylko przez DispatchQueue.main.

Zwracanie zmodyfikowanych danych

Action Extension zwraca przetworzone dane przez completeRequest z tablicą NSExtensionItem. Każdy element odpowiada typowi danych wyjściowych. Aplikacja hosta może zastąpić oryginalną treść przetworzoną — na przykład zastąpić oryginalny obraz na przefiltrowany. NSExtensionItem obsługuje te same UTI co na wejściu, plus dodatkowe (np. public.html dla treści internetowych).

Scenariusze użycia Action Extension

Action Extension jest stosowany w dziesiątkach scenariuszy — od prostych narzędzi po złożone procesy biznesowe. Klasyczne przykłady obejmują operacje tekstowe, graficzne i plikowe, a także integrację z treściami internetowymi.

Scenariusze tekstowe

Action Extension dla tekstu: tłumaczenie, sprawdzanie pisowni, liczenie znaków, zmiana wielkości liter, szyfrowanie, tworzenie kodu QR z tekstu. Użytkownik zaznacza tekst w dowolnej aplikacji z polem tekstowym (Safari, Notatki, Poczta) i jednym kliknięciem wykonuje akcję. Podświetlanie składni kodu, formatowanie Markdown i skracanie URL — popularne przykłady Action Extension dla zaawansowanych użytkowników.

Scenariusze graficzne

Dla obrazów Action Extension oferuje: stosowanie filtrów, przycinanie, zmianę rozmiaru, konwersję formatów (HEIC na JPEG), dodawanie znaku wodnego, rozpoznawanie tekstu (OCR) i kompresję. Przetwarzanie obrazów powinno być szybkie — użytkownik oczekuje wyniku w ciągu 2–3 sekund. Do ciężkich operacji używaj Core Image na GPU lub kolejek tła.

Scenariusze internetowe

Action Extension dla URL: tworzenie PDF ze strony internetowej, zapisywanie w Pocket/Pinterest, sprawdzanie szybkości strony, archiwizowanie strony, pobieranie metadanych Open Graph, generowanie zrzutu ekranu strony. Generowanie PDF — jeden z najpopularniejszych scenariuszy: użytkownik konwertuje stronę internetową na PDF bez otwierania zewnętrznych serwisów.

Często zadawane pytania

Jaka jest kluczowa różnica między Action Extension a Share Extension?

Share Extension wysyła treść z aplikacji hosta do twojej aplikacji. Action Extension przetwarza treść na miejscu i zwraca wynik z powrotem. Share — przekazywanie, Action — przekształcanie. To fundamentalna różnica określająca architekturę i UX.

Czy Action Extension może nie mieć interfejsu?

Tak. Jeśli akcja nie wymaga wprowadzania danych od użytkownika (na przykład liczenie znaków), rozszerzenie może wykonać ją w tle i natychmiast zwrócić wynik przez completeRequest. W Info.plist należy określić NSExtensionActivationSupportsWebURL lub inny UTI odpowiadający typowi danych.

W jakich aplikacjach pojawia się Action Extension?

We wszystkich aplikacjach obsługujących UIActivityViewController lub standardowe kontrolery akcji. Są to Safari, Zdjęcia, Pliki, Notatki, Poczta i tysiące aplikacji firm trzecich. Action Extension nie działa w aplikacjach, które nie używają standardowych mechanizmów iOS dla akcji.

Jak zwrócić przetworzoną treść do aplikacji hosta?

Przez extensionContext.completeRequest(returningItems:) z tablicą NSExtensionItem. Każdy element wyjściowy zawiera NSItemProvider z przetworzonymi danymi. Aplikacja hosta otrzymuje wynik w delegacie UIActivityViewController lub podobnym callbacku.

Jakie są ograniczenia Action Extension?

Rozszerzenie działa do 30 sekund, po czym iOS wymusza jego zakończenie. Nie ma bezpośredniego dostępu do głównej aplikacji — tylko przez App Groups. Action Extension nie może wykonywać zadań w tle po zakończeniu. Do długotrwałych operacji używaj NSURLSession w tle z powiadomieniem przy następnym uruchomieniu.

Podsumowanie

  • Action Extension — rozszerzenie iOS do przekształcania treści bezpośrednio w aplikacji hosta.
  • Różni się od Share Extension zwrotem przetworzonych danych przez NSExtensionContext.
  • Może działać z UI lub całkowicie w tle bez interfejsu.
  • Obsługuje wszystkie typy treści: tekst, obrazy, URL, pliki przez UTI.
  • Służy do tłumaczenia, filtrów, generowania PDF, OCR i sprawdzania pisowni.
  • Ograniczenie czasu wykonania — 30 sekund, dostęp do aplikacji — przez App Groups.
  • Action Extension jest używany w 42% aplikacji kategorii „Produktywność”.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również