Az Action Extension egy iOS-bővítmény, amely egyéni műveleteket hajt végre más alkalmazásokból származó tartalommal anélkül, hogy kontextust váltana. Ellentétben a Share Extension-nel, amely adatokat küld egy másik alkalmazásba, az Action Extension a tartalmat helyben alakítja át: szöveget fordít, képészeti szűrőket módosít, helyesírást ellenőriz vagy PDF-et generál. A Apple (2024) adatai szerint az Action Extension a második legnépszerűbb bővítménytípus a Share Extension után, amelyet az alkalmazások 42%-ában használnak a „Termelékenység” kategóriában. Azonnali művelet a fő alkalmazás elindítása nélkül — kulcsfontosságú előny a felhasználó számára.
Főbb pontok
Action Extension — az iOS alkalmazásbővítmény egy típusa, amely lehetővé teszi egy művelet végrehajtását a tartalmon közvetlenül a gazdaalkalmazás kontextusában. A felhasználó kijelöl egy szöveget a Safari-ban, megnyomja a „Műveletek” gombot, és kiválasztja például a „Helyesírás-ellenőrzés” lehetőséget — a bővítmény feldolgozza a szöveget, és visszaadja az eredményt anélkül, hogy elhagyná a böngészőt. A bővítmény a bemeneti adatokat NSExtensionContext segítségével kapja, és visszaküldheti a módosított tartalmat.
Az Action Extension az iOS 8-ban jelent meg az alkalmazásbővítmények architektúrájának részeként. Kulcsjellemzője, hogy a bővítménynek nincs saját felülete (opcionális), és a gazdaalkalmazás kontextusában fut. A felhasználó nem hagyja el az aktuális képernyőt, ami minimális kognitív megszakítást biztosít. Az Apple szerint az Action Extension az egyetlen bővítménytípus, amely egyszerre tudja olvasni és módosítani a gazdaalkalmazás tartalmát (NSExtensionContext segítségével az eredmény visszaküldésével).
Az Action Extension-t különböző forgatókönyvekben használják: szöveg fordítása a böngészőben, PDF készítése weboldalról, szűrő alkalmazása egy fényképre a galériában, helyesírás ellenőrzése bármely szövegmezőben, URL rövidítése, szöveg titkosítása és könyvjelzőkhöz adás. Az Action Extension sokoldalúsága népszerű eszközzé teszi a „Segédprogramok” és „Termelékenység” kategóriájú alkalmazások számára.
Az Action Extension és a Share Extension gyakran összetéveszthető, de a céljuk alapvetően különbözik. A Share Extension tartalmat küld a gazdaalkalmazásból az Ön alkalmazásába; az Action Extension feldolgozza a tartalmat és visszaküldi azt. A különbség hatással van az architektúrára, a felhasználói élményre és az Info.plist konfigurációs követelményekre.
| Jellemző | Action Extension | Share Extension |
|---|---|---|
| Cél | Tartalom átalakítása | Tartalom küldése az alkalmazásba |
| Felület | Opcionális (egyéni) | SLComposeServiceViewController |
| Adatok visszaküldése | Igen, a completeRequest segítségével | Nem |
| Kontextus | A gazdaalkalmazásban marad | Átvált a bővítményre |
| Pozíció a menüben | Action Sheet (felső rész) | Share Sheet (alsó rész) |
| Tipikus művelet | Fordítás, javítás, szűrő | Mentés, közzététel |
Az Action Extension a műveletek menüjében (Action Sheet) jelenik meg a „Megosztás” vagy „...” gomb megnyomásakor. Az iOS automatikusan az Action Extension-öket a lap felső részébe (műveletek), a Share Extension-öket pedig az alsó részbe (alkalmazások) helyezi. Felhasználói forgatókönyv: kijelölte a szöveget → megnyomta a „Műveletek” gombot → kiválasztotta az Ön Action Extension-jét → megkapta a feldolgozott eredményt anélkül, hogy alkalmazást váltott volna.
Az Action Extension egy Xcode-beli target-ből, a felület megjelenítéséhez használt UIViewController-ből (opcionális), az adatok be- és kimenetéhez használt NSExtensionContext-ből és az Info.plist konfigurációból áll. Az architektúra egyszerűbb, mint a Share Extension esetében: nincs kötelező compose felület, és a bővítmény teljesen UI nélkül is működhet.
Target — különálló bundle a fő alkalmazásból örökölt azonosítóval. UIViewController — opcionális felület a folyamat, beállítások vagy eredmény megjelenítéséhez. NSExtensionContext — tároló bemeneti adatokkal (inputItems) és a completeRequest metódussal az eredmény visszaküldéséhez. Info.plist — aktiválási konfiguráció az NSExtensionActivationRule segítségével és attribútumok (NSExtensionAttributes) a támogatott tartalomtípusok megadásához.
Az Action Extension a bemeneti adatokat a extensionContext?.inputItems segítségével kapja — NSExtensionItem-ek tömbje. Minden elem adatokat és UTI-t tartalmazó mellékleteket tartalmaz. Feldolgozás után a bővítmény meghívja a completeRequest(returningItems:) metódust a kimeneti NSExtensionItem-ek tömbjével. A gazdaalkalmazás megkapja a feldolgozott adatokat és megjeleníti azokat. Aszinkron modell: a bővítmény hosszú műveleteket végezhet, a kontextust akár 30 másodpercig is fenntartva.
Vizsgáljuk meg egy Action Extension létrehozását Swift-ben a kijelölt szöveg fordításához. A bővítmény megkapja a szöveget a gazdaalkalmazásból, elküldi egy fordítási szerverre, és visszaadja az eredményt. ActionViewController — az alapvezérlő, amelyet az Xcode hoz létre a target hozzáadásakor.
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
}
}
}
}
}
}
A feldolgozás után a bővítmény visszaküldi az eredményt a gazdaalkalmazásba. completeRequest kimeneti adatokkal — alternatív forgatókönyv, amikor a bővítmény nem jelenít meg UI-t, hanem azonnal visszaküldi a feldolgozott tartalmat.
// Feldolgozott szöveg visszaküldése a gazdaalkalmazásba
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
)
Az Action Extension két módban működhet: UI-val és UI nélkül. UI nélküli módban a bővítmény a műveletet teljesen a háttérben hajtja végre, és a feldolgozás után azonnal meghívja a completeRequest-et. UI-val rendelkező módban a bővítmény megjelenít egy vezérlőt, a felhasználó megerősíti a műveletet, és csak ezután küldi el a completeRequest az eredményt. A mód kiválasztása a művelet összetettségétől és a felhasználói bevitel szükségességétől függ.
A loadItem(forTypeIdentifier:) metódus aszinkron módon működik — az adatok nagyok lehetnek (képek, videók). Az NSItemProvider kezeli a streamelő betöltést és a gyorsítótárazást. Képekhez használja a kUTTypeImage, fájlokhoz a kUTTypeFileURL értéket. Fontos: a loadItem meghívható háttérszálon — a UI-t csak a DispatchQueue.main segítségével frissítse.
Az Action Extension a feldolgozott adatokat a completeRequest segítségével küldi vissza egy NSExtensionItem tömbön keresztül. Minden elem megfelel a kimeneti adattípusnak. A gazdaalkalmazás lecserélheti az eredeti tartalmat a feldolgozottra — például lecserélheti az eredeti képet egy szűrttel. NSExtensionItem ugyanazokat a UTI-ket támogatja, mint a bemenetnél, plusz továbbiakat (például public.html a webes tartalomhoz).
Az Action Extension-t több tucat forgatókönyvben alkalmazzák — az egyszerű segédprogramoktól a bonyolult üzleti folyamatokig. Klasszikus példák szöveges, grafikus és fájlműveleteket, valamint webes tartalommal való integrációt foglalnak magukban.
Action Extension szöveghez: fordítás, helyesírás-ellenőrzés, karakterszámlálás, kis- és nagybetűs átalakítás, titkosítás, QR-kód létrehozása szövegből. A felhasználó kijelöli a szöveget bármely szövegmezővel rendelkező alkalmazásban (Safari, Jegyzetek, Mail), és egyetlen kattintással végrehajtja a műveletet. Kód szintaxiskiemelése, Markdown formázás és URL rövidítés — népszerű Action Extension példák haladó felhasználók számára.
Képekhez az Action Extension a következőket kínálja: szűrők alkalmazása, vágás, méretváltoztatás, formátumkonverzió (HEIC JPEG-re), vízjel hozzáadása, szövegfelismerés (OCR) és tömörítés. A képfeldolgozásnak gyorsnak kell lennie — a felhasználó 2–3 másodpercen belül eredményt vár. Nehéz műveletekhez használja a Core Image-et GPU-n vagy háttérvárólistákat.
Action Extension URL-hez: PDF készítése weboldalról, mentés Pocket/Pinterest-be, oldal sebességének ellenőrzése, oldal archiválása, Open Graph metaadatok lekérése, oldal képernyőképének generálása. A PDF-generálás — az egyik legnépszerűbb forgatókönyv: a felhasználó weboldalt konvertál PDF-be anélkül, hogy harmadik féltől származó szolgáltatásokat nyitna meg.
Gyakran Ismételt Kérdések
A Share Extension tartalmat küld a gazdaalkalmazásból az Ön alkalmazásába. Az Action Extension a tartalmat helyben dolgozza fel és visszaküldi az eredményt. Share — átvitel, Action — átalakítás. Ez az alapvető különbség határozza meg az architektúrát és a UX-et.
Igen, opcionális. Ha a művelet nem igényel felhasználói bevitelt (például karakterszámlálás), a bővítmény a háttérben is végrehajthatja, és azonnal visszaküldheti az eredményt a completeRequest segítségével. Az Info.plist-ben meg kell adni a NSExtensionActivationSupportsWebURL vagy az adattípusnak megfelelő másik UTI-t.
Minden olyan alkalmazásban, amely támogatja az UIActivityViewController-t vagy a szabványos műveletvezérlőket. Ezek közé tartozik a Safari, a Fotók, a Fájlok, a Jegyzetek, a Mail és több ezer harmadik féltől származó alkalmazás. Az Action Extension nem működik azokban az alkalmazásokban, amelyek nem használják a szabványos iOS mechanizmusokat a műveletekhez.
A extensionContext.completeRequest(returningItems:) segítségével egy NSExtensionItem tömbbel. Minden kimeneti elem tartalmaz egy NSItemProvider-t a feldolgozott adatokkal. A gazdaalkalmazás az eredményt az UIActivityViewController delegáltjában vagy egy hasonló callback-ben kapja meg.
A bővítmény 30 másodpercig működik, ezt követően az iOS kényszerítetten befejezi. Nincs közvetlen hozzáférés a fő alkalmazáshoz — csak az App Groups segítségével. Az Action Extension nem hajthat végre háttérfeladatokat a befejezés után. Hosszú műveletekhez használjon háttér NSURLSession-t értesítéssel a következő indításkor.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is