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: δεν υπάρχει υποχρεωτική διεπαφή σύνθεσης και η επέκταση μπορεί να λειτουργήσει εντελώς χωρίς 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 — μετασχηματισμός. Αυτή είναι η θεμελιώδης διαφορά που καθορίζει την αρχιτεκτονική και την εμπειρία χρήστη.

Μπορεί το 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. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης