Action Extension: шта је, како ради и развој екстензије

Аутор: IT Sectr Објављено: 2026-06-15 Време читања: 10 мин

Action Extension је iOS екстензија која извршава прилагођене радње са садржајем из других апликација без пребацивања контекста. За разлику од Share Extension, која шаље податке у другу апликацију, Action Extension трансформише садржај директно на месту: преводи текст, мења филтере слике, проверава правопис или генерише PDF. Према подацима Apple (2024), Action Extension је други најпопуларнији тип екстензије после Share Extension, који се користи у 42% апликација категорије „Продуктивност”. Тренутна акција без покретања главне апликације — кључна предност за корисника.

Главно

  • Action Extension — iOS екстензија за трансформацију садржаја у хост апликацији.
  • NSExtensionContext — контекст извршења са улазним и излазним подацима.
  • UTI — Uniform Type Identifiers за одређивање типа садржаја који се обрађује.
  • UIActivity — стари механизам за имплементацију радњи у iOS 6–7.
  • App Groups — пренос обрађених података назад у апликацију.

Шта је Action Extension

Action Extension — тип iOS екстензије који омогућава извршење радње на садржају директно у контексту хост апликације. Корисник означи текст у Safari-ју, притисне „Радње” и изабере, на пример, „Провери правопис” — екстензија обрађује текст и враћа резултат без напуштања прегледача. Екстензија прима улазне податке преко NSExtensionContext и може вратити модификовани садржај назад.

Action Extension се појавио у iOS 8 као део архитектуре екстензија апликација. Његова кључна карактеристика је да екстензија нема сопствени интерфејс (опционо) и ради у контексту хост апликације. Корисник не напушта тренутни екран, што обезбеђује минимални когнитивни прекид. Према Apple-у, Action Extension је једини тип екстензије који може истовремено читати и мењати садржај хост апликације (преко NSExtensionContext са враћањем резултата).

Где се примењује Action Extension

Action Extension се користи у различитим сценаријима: превод текста у прегледачу, креирање PDF-а из веб странице, примена филтера на фотографију у галерији, провера правописа у било ком пољу за текст, скраћивање URL-а, шифровање текста и додавање у обележиваче. Универзалност Action Extension-а га чини популарним алатом за апликације категорије „Алати” и „Продуктивност”.

Action Extension против Share Extension

Action Extension и Share Extension се често мешају, али је њихова намена суштински различита. Share Extension шаље садржај из хост апликације у вашу апликацију; Action Extension обрађује садржај и враћа га назад. Разлика утиче на архитектуру, корисничко искуство и захтеве за конфигурацију Info.plist-а.

КарактеристикаAction ExtensionShare Extension
НаменаТрансформација садржајаПренос садржаја у апликацију
ИнтерфејсОпционо (прилагођени)SLComposeServiceViewController
Враћање податакаДа, преко completeRequestНе
КонтекстОстаје у хост апликацијиПребацује се у екстензију
Позиција у менијуAction Sheet (горњи део)Share Sheet (доњи део)
Типична радњаПревод, корекција, филтерЧување, објављивање

Како корисник бира радњу

Action Extension се појављује у менију радњи (Action Sheet) при притиску дугмета „Подели” или „...”. iOS аутоматски поставља Action Extensions у горњи део листа (радње), а Share Extensions у доњи (апликације). Кориснички сценарио: означио текст → притиснуо „Радње” → изабрао ваш Action Extension → добио обрађени резултат без пребацивања апликација.

Архитектура Action Extension

Action Extension се састоји од target-а у Xcode-у, UIViewController-а за приказ интерфејса (опционо), NSExtensionContext-а за улаз-излаз података и конфигурације Info.plist-а. Архитектура је једноставнија него код Share Extension: нема обавезног compose интерфејса, а екстензија може радити потпуно без UI-ја.

Компоненте Action Extension

Target — засебан bundle са идентификатором наслеђеним из главне апликације. UIViewController — опциони интерфејс за приказ напретка, подешавања или резултата. NSExtensionContext — контејнер са улазним подацима (inputItems) и методом completeRequest за враћање резултата. Info.plist — конфигурација активације преко NSExtensionActivationRule и атрибута (NSExtensionAttributes) за навођење подржаних типова садржаја.

NSExtensionContext и токови података

Action Extension прима улазне податке преко extensionContext?.inputItems — низа NSExtensionItem-а. Сваки елемент садржи прилоге са подацима и UTI. Након обраде, екстензија позива completeRequest(returningItems:) са низом излазних NSExtensionItem-а. Хост апликација прима обрађене податке и приказује их. Асинхрони модел: екстензија може обављати дуготрајне операције, држећи контекст до 30 секунди.

Креирање Action Extension

Размотримо креирање Action Extension-а у Swift-у за превод означеног текста. Екстензија прима текст из хост апликације, шаље га на сервер за превод и враћа резултат. ActionViewController — основни контролер који Xcode креира при додавању target-а.

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

Након обраде, екстензија враћа резултат у хост апликацију. completeRequest са излазним подацима — алтернативни сценарио када екстензија не приказује UI, већ одмах враћа обрађени садржај.

swift
// Враћање обрађеног текста хост апликацији
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 може радити у два режима: са UI и без UI. У режиму без UI, екстензија извршава радњу потпуно у позадини и позива completeRequest одмах након обраде. У режиму са UI, екстензија приказује контролер, корисник потврђује радњу и тек тада completeRequest шаље резултат. Избор режима зависи од сложености радње и потребе за уносом корисника.

Учитавање података из прилога

Метод loadItem(forTypeIdentifier:) ради асинхроно — подаци могу бити велики (слике, видео). NSItemProvider управља проточним учитавањем и кеширањем. За слике користите kUTTypeImage, за датотеке — kUTTypeFileURL. Важно: loadItem може бити позван на позадинској нити — ажурирајте UI само преко DispatchQueue.main.

Враћање модификованих података

Action Extension враћа обрађене податке преко completeRequest-а са низом NSExtensionItem-а. Сваки елемент одговара типу излазних података. Хост апликација може заменити оригинални садржај обрађеним — на пример, заменити оригиналну слику филтрираном. NSExtensionItem подржава исте UTI као на улазу, плус додатне (нпр. public.html за веб садржај).

Сценарији коришћења Action Extension

Action Extension се примењује у десетинама сценарија — од једноставних алата до сложених пословних процеса. Класични примери обухватају текстуалне, графичке и датотечне операције, као и интеграцију са веб садржајем.

Текстуални сценарији

Action Extension за текст: превод, провера правописа, бројање знакова, промена великих и малих слова, шифровање, креирање QR кода из текста. Корисник означава текст у било којој апликацији са пољем за текст (Safari, Белешке, Пошта) и једним кликом извршава радњу. Истицање синтаксе кода, форматирање Markdown-а и скраћивање URL-а — популарни примери Action Extension-а за напредне кориснике.

Графички сценарији

За слике, Action Extension нуди: примену филтера, исецање, промену величине, конверзију формата (HEIC у JPEG), додавање воденог жига, препознавање текста (OCR) и компресију. Обрада слика мора бити брза — корисник очекује резултат за 2–3 секунде. За тешке операције користите Core Image на GPU-у или позадинске редове.

Веб сценарији

Action Extension за URL: креирање PDF-а из веб странице, чување у Pocket/Pinterest, провера брзине сајта, архивирање странице, добијање метаподатака Open Graph-а, генерисање снимка екрана странице. PDF генерација — један од најтраженијих сценарија: корисник конвертује веб страницу у PDF без отварања спољних сервиса.

Често постављана питања

Која је кључна разлика између Action Extension и Share Extension?

Share Extension шаље садржај из хост апликације у вашу апликацију. Action Extension обрађује садржај на месту и враћа резултат назад. Share — пренос, Action — трансформација. Ово је фундаментална разлика која одређује архитектуру и UX.

Може ли Action Extension да нема интерфејс?

Да. Ако радња не захтева унос од корисника (на пример, бројање знакова), екстензија може да је изврши у позадини и одмах врати резултат преко completeRequest. У Info.plist-у треба навести NSExtensionActivationSupportsWebURL или други UTI који одговара типу података.

У којим апликацијама се појављује Action Extension?

У свим апликацијама које подржавају UIActivityViewController или стандардне контролере радњи. То су Safari, Фотографије, Датотеке, Белешке, Пошта и хиљаде апликација трећих страна. Action Extension не ради у апликацијама које не користе стандардне iOS механизме за радње.

Како вратити обрађени садржај у хост апликацију?

Преко extensionContext.completeRequest(returningItems:) са низом NSExtensionItem-а. Сваки излазни елемент садржи NSItemProvider са обрађеним подацима. Хост апликација прима резултат у делегату UIActivityViewController-а или сличном callback-у.

Која су ограничења Action Extension-а?

Екстензија ради до 30 секунди, након чега iOS присилно прекида њен рад. Нема директног приступа главној апликацији — само преко App Groups. Action Extension не може извршавати позадинске задатке након завршетка. За дуготрајне операције користите позадински NSURLSession са обавештењем при следећем покретању.

Резиме

  • Action Extension — iOS екстензија за трансформацију садржаја директно у хост апликацији.
  • Разликује се од Share Extension враћањем обрађених података преко NSExtensionContext.
  • Може радити са UI или потпуно у позадини без интерфејса.
  • Подржава све типове садржаја: текст, слике, URL, датотеке преко UTI.
  • Користи се за превод, филтере, PDF генерацију, OCR и проверу правописа.
  • Ограничење времена извршења — 30 секунди, приступ апликацији — преко App Groups.
  • Action Extension се користи у 42% апликација категорије „Продуктивност”.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође