Το Action Extension είναι μια επέκταση iOS που εκτελεί προσαρμοσμένες ενέργειες με περιεχόμενο από άλλες εφαρμογές χωρίς εναλλαγή περιβάλλοντος. Σε αντίθεση με το Share Extension, το οποίο στέλνει δεδομένα σε άλλη εφαρμογή, το Action Extension μετασχηματίζει το περιεχόμενο επί τόπου: μεταφράζει κείμενο, αλλάζει φίλτρα εικόνας, ελέγχει ορθογραφία ή δημιουργεί PDF. Σύμφωνα με την Apple (2024), το Action Extension είναι ο δεύτερος πιο δημοφιλής τύπος επέκτασης μετά το Share Extension, που χρησιμοποιείται στο 42% των εφαρμογών της κατηγορίας “Παραγωγικότητα”. Άμεση ενέργεια χωρίς εκκίνηση της κύριας εφαρμογής — βασικό πλεονέκτημα για τον χρήστη.
Κύρια σημεία
Action Extension — είναι ένας τύπος επέκτασης εφαρμογής iOS που σας επιτρέπει να εκτελέσετε μια ενέργεια σε περιεχόμενο απευθείας στο περιβάλλον της εφαρμογής υποδοχής. Ο χρήστης επιλέγει κείμενο στο Safari, πατά “Ενέργειες” και επιλέγει για παράδειγμα “Έλεγχος ορθογραφίας” — η επέκταση επεξεργάζεται το κείμενο και επιστρέφει το αποτέλεσμα χωρίς να εγκαταλείπει το πρόγραμμα περιήγησης. Η επέκταση λαμβάνει δεδομένα εισόδου μέσω NSExtensionContext και μπορεί να επιστρέψει το τροποποιημένο περιεχόμενο.
Το Action Extension εμφανίστηκε στο iOS 8 ως μέρος της αρχιτεκτονικής επεκτάσεων εφαρμογών. Το βασικό του χαρακτηριστικό είναι ότι η επέκταση δεν έχει δική της διεπαφή (προαιρετικά) και εκτελείται στο περιβάλλον της εφαρμογής υποδοχής. Ο χρήστης δεν εγκαταλείπει την τρέχουσα οθόνη, εξασφαλίζοντας ελάχιστη γνωστική διακοπή. Σύμφωνα με την Apple, το Action Extension είναι ο μόνος τύπος επέκτασης που μπορεί ταυτόχρονα να διαβάζει και να τροποποιεί το περιεχόμενο της εφαρμογής υποδοχής (μέσω NSExtensionContext με επιστροφή αποτελέσματος).
Το Action Extension χρησιμοποιείται σε διάφορα σενάρια: μετάφραση κειμένου στο πρόγραμμα περιήγησης, δημιουργία PDF από ιστοσελίδα, εφαρμογή φίλτρου σε φωτογραφία στη συλλογή, έλεγχος ορθογραφίας σε οποιοδήποτε πεδίο κειμένου, συντόμευση URL, κρυπτογράφηση κειμένου και προσθήκη σε σελιδοδείκτες. Η ευελιξία του Action Extension το καθιστά δημοφιλές εργαλείο για εφαρμογές κατηγορίας “Βοηθήματα” και “Παραγωγικότητα”.
Το Action Extension και το Share Extension συχνά συγχέονται, αλλά ο σκοπός τους είναι θεμελιωδώς διαφορετικός. Το Share Extension στέλνει περιεχόμενο από την εφαρμογή υποδοχής στην εφαρμογή σας· το Action Extension επεξεργάζεται το περιεχόμενο και το επιστρέφει. Η διαφορά επηρεάζει την αρχιτεκτονική, την εμπειρία χρήστη και τις απαιτήσεις διαμόρφωσης του Info.plist.
| Χαρακτηριστικό | Action Extension | Share Extension |
|---|---|---|
| Σκοπός | Μετασχηματισμός περιεχομένου | Αποστολή περιεχομένου στην εφαρμογή |
| Διεπαφή | Προαιρετική (προσαρμοσμένη) | SLComposeServiceViewController |
| Επιστροφή δεδομένων | Ναι, μέσω completeRequest | Όχι |
| Περιβάλλον | Παραμένει στην εφαρμογή υποδοχής | Μεταβαίνει στην επέκταση |
| Θέση στο μενού | Action Sheet (πάνω μέρος) | Share Sheet (κάτω μέρος) |
| Τυπική ενέργεια | Μετάφραση, διόρθωση, φίλτρο | Αποθήκευση, δημοσίευση |
Το Action Extension εμφανίζεται στο μενού ενεργειών (Action Sheet) όταν πατιέται το κουμπί “Κοινοποίηση” ή “...”. Το iOS τοποθετεί αυτόματα τα Action Extensions στο πάνω μέρος του φύλλου (ενέργειες) και τα Share Extensions στο κάτω μέρος (εφαρμογές). Σενάριο χρήστη: επέλεξε κείμενο → πάτησε “Ενέργειες” → επέλεξε το Action Extension σας → έλαβε επεξεργασμένο αποτέλεσμα χωρίς εναλλαγή εφαρμογών.
Το Action Extension αποτελείται από ένα target στο Xcode, ένα UIViewController για εμφάνιση διεπαφής (προαιρετικά), ένα NSExtensionContext για είσοδο-έξοδο δεδομένων και διαμόρφωση Info.plist. Η αρχιτεκτονική είναι απλούστερη από το Share Extension: δεν υπάρχει υποχρεωτική διεπαφή σύνθεσης και η επέκταση μπορεί να λειτουργήσει εντελώς χωρίς UI.
Target — ξεχωριστό bundle με αναγνωριστικό που κληρονομείται από την κύρια εφαρμογή. UIViewController — προαιρετική διεπαφή για εμφάνιση προόδου, ρυθμίσεων ή αποτελέσματος. NSExtensionContext — δοχείο με δεδομένα εισόδου (inputItems) και μέθοδο completeRequest για επιστροφή αποτελέσματος. Info.plist — διαμόρφωση ενεργοποίησης μέσω NSExtensionActivationRule και ιδιοτήτων (NSExtensionAttributes) για καθορισμό υποστηριζόμενων τύπων περιεχομένου.
Το Action Extension λαμβάνει δεδομένα εισόδου μέσω extensionContext?.inputItems — πίνακα NSExtensionItem. Κάθε στοιχείο περιέχει συνημμένα με δεδομένα και UTI. Μετά την επεξεργασία, η επέκταση καλεί completeRequest(returningItems:) με πίνακα εξόδου NSExtensionItem. Η εφαρμογή υποδοχής λαμβάνει τα επεξεργασμένα δεδομένα και τα εμφανίζει. Ασύγχρονο μοντέλο: η επέκταση μπορεί να εκτελεί μακροχρόνιες λειτουργίες, διατηρώντας το περιβάλλον έως 30 δευτερόλεπτα.
Ας εξετάσουμε τη δημιουργία ενός Action Extension σε Swift για μετάφραση επιλεγμένου κειμένου. Η επέκταση λαμβάνει κείμενο από την εφαρμογή υποδοχής, το στέλνει σε διακομιστή μετάφρασης και επιστρέφει το αποτέλεσμα. ActionViewController — ο βασικός ελεγκτής που δημιουργεί το Xcode κατά την προσθήκη target.
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, αλλά επιστρέφει αμέσως το επεξεργασμένο περιεχόμενο.
// Επιστροφή επεξεργασμένου κειμένου στην εφαρμογή υποδοχής
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 για κείμενο: μετάφραση, έλεγχος ορθογραφίας, μέτρηση χαρακτήρων, αλλαγή πεζών-κεφαλαίων, κρυπτογράφηση, δημιουργία κωδικού 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 χωρίς να ανοίγει υπηρεσίες τρίτων.
Συχνές Ερωτήσεις
Το Share Extension στέλνει περιεχόμενο από την εφαρμογή υποδοχής στην εφαρμογή σας. Το Action Extension επεξεργάζεται το περιεχόμενο επί τόπου και επιστρέφει το αποτέλεσμα. Share — αποστολή, Action — μετασχηματισμός. Αυτή είναι η θεμελιώδης διαφορά που καθορίζει την αρχιτεκτονική και την εμπειρία χρήστη.
Ναι. Εάν η ενέργεια δεν απαιτεί είσοδο από τον χρήστη (π.χ. μέτρηση χαρακτήρων), η επέκταση μπορεί να την εκτελέσει στο παρασκήνιο και να επιστρέψει αμέσως το αποτέλεσμα μέσω completeRequest. Στο Info.plist πρέπει να καθοριστεί NSExtensionActivationSupportsWebURL ή άλλο UTI που αντιστοιχεί στον τύπο δεδομένων.
Σε όλες τις εφαρμογές που υποστηρίζουν UIActivityViewController ή τυπικούς ελεγκτές ενεργειών. Αυτές περιλαμβάνουν το Safari, τις Φωτογραφίες, τα Αρχεία, τις Σημειώσεις, την Αλληλογραφία και χιλιάδες εφαρμογές τρίτων. Το Action Extension δεν λειτουργεί σε εφαρμογές που δεν χρησιμοποιούν τυπικούς μηχανισμούς iOS για ενέργειες.
Μέσω extensionContext.completeRequest(returningItems:) με πίνακα NSExtensionItem. Κάθε στοιχείο εξόδου περιέχει NSItemProvider με επεξεργασμένα δεδομένα. Η εφαρμογή υποδοχής λαμβάνει το αποτέλεσμα στον εκπρόσωπο UIActivityViewController ή σε παρόμοιο callback.
Η επέκταση λειτουργεί έως 30 δευτερόλεπτα, μετά τα οποία το iOS την τερματίζει αναγκαστικά. Δεν υπάρχει άμεση πρόσβαση στην κύρια εφαρμογή — μόνο μέσω App Groups. Το Action Extension δεν μπορεί να εκτελεί εργασίες παρασκηνίου μετά την ολοκλήρωση. Για μακροχρόνιες λειτουργίες χρησιμοποιήστε NSURLSession παρασκηνίου με ειδοποίηση στην επόμενη εκκίνηση.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης