AppIntent — πλαίσιο Apple, που εισήχθη στο iOS 16 ως αντικατάσταση του απαρχαιωμένου Intents framework, παρέχοντας δηλωτικό API για ενσωμάτωση εφαρμογών με Siri, Shortcuts και Spotlight. Σε αντίθεση με την παλιά προσέγγιση, που απαιτούσε ξεχωριστό Intent Definition File και δημιουργία κώδικα ObjC, το AppIntent χρησιμοποιεί καθαρό Swift με τα πρωτόκολλα AppIntent και AppEnum. Σύμφωνα με Apple Developer Documentation, 2026, το AppIntent μειώνει τον όγκο κώδικα για τη δημιουργία ενός intent κατά μέσο όρο 60% σε σύγκριση με το Intents framework, και ο χρόνος ενσωμάτωσης εντολών Siri μειώνεται από μερικές ημέρες σε μερικές ώρες.
Βασικά σημεία
AppIntent — πλαίσιο Apple για δηλωτική περιγραφή εντολών που η εφαρμογή σας μπορεί να εκτελεί κατόπιν αιτήματος Siri, Shortcuts, Spotlight, Control Center και Action Button. Στη βάση του βρίσκεται το πρωτόκολλο AppIntent, στο οποίο ο πργραμματιστής περιγράφει το όνομα του intent, τις παραμέτρους και τη μέθοδο perform() — τη λογική που εκτελείται. Το πλαίσιο δημιουργεί αυτόματα τη διεπαφή χρήστη για τη διαμόρφωση παραμέτρων στην εφαρμογή Shortcuts και φράσεις φωνής για το Siri.
Πριν την εμφάνιση του AppIntent, οι πργραμματιστές χρησιμοποιούσαν το Intents framework — ένα σύστημα βασισμένο σε Intent Definition File, που δημιουργούσε κώδικα Objective-C και απαιτούσε διαμόρφωση ξεχωριστού Intents Extension. Αυτή η διαδικασία ήταν περίπλοκη: ακόμη και ένα απλό intent απαιτούσε έως 5 αρχεία ρύθμισης. AppIntent εξαλείφει αυτήν την πολυπλοκότητα — το intent περιγράφεται σε ένα αρχείο Swift, και το σύστημα δημιουργεί αυτόματα όλα όσα απαιτούνται για την ενσωμάτωση με Siri και Shortcuts.
Σύμφωνα με το WWDC 2024 Session “Dive deeper into App Intents”, η Apple βλέπει το AppIntent ως τον κεντρικό μηχανισμό για την επέκταση της λειτουργικότητας των εφαρμογών πέρα από το παραδοσιακό UI. Μέχρι την κυκλοφορία του iOS 18, πάνω από 70% των εφαρμογών στο top 100 του App Store χρησιμοποιούν ήδη AppIntent για ενσωμάτωση με Shortcuts και Siri, και ο μέσος χρήστης iOS 18 εκτελεί 4–6 intents την ημέρα μέσω φωνητικών εντολών ή widget.
Intents framework (iOS 10–15) απαιτούσε τη δημιουργία .intentdefinition αρχείου, τη δημιουργία κλάσεων ObjC/Swift μέσω Xcode, τη διαμόρφωση Intents Extension και App Intent Configuration. Το AppIntent (iOS 16+) αντικαθιστά πλήρως αυτόν τον αγωγό με καθαρό κώδικα Swift χωρίς δημιουργία, επεκτάσεις και επιπλέον διαμορφώσεις. Αυτό κάνει τη διαδικασία δημιουργίας intents προσβάσιμη για τον μέσο πργραμματιστή iOS χωρίς να χρειαστεί να μάθει SiriKit.
Το βασικό πλεονέκτημα του AppIntent είναι η δηλωτικότητα. Ο πργραμματιστής περιγράφει τι κάνει το intent, όχι πώς ενσωματώνεται με το σύστημα. Το πλαίσιο αυτό διαχειρίζεται τα σενάρια διαλόγου Siri, την εμφάνιση παραμέτρων στο Shortcuts και τη μεταφορά περιεχομένου μεταξύ intents. Στο παλιό Intents framework, κάθε πτυχή της ενσωμάτωσης έπρεπε να κωδικοποιείται χειροκίνητα, συμπεριλαμβανομένου του INUIHostedView για την εμφάνιση του UI του intent.
| Χαρακτηριστικό | Intents framework | AppIntent |
|---|---|---|
| Όγκος κώδικα | 100–300 γραμμές ανά intent | 30–60 γραμμές |
| Απαιτούμενα αρχεία | .intentdefinition, Extension, Config | 1 αρχείο Swift |
| Δημιουργία κώδικα | Υποχρεωτική (Xcode -> ObjC) | Δεν απαιτείται |
| Ασυγχρονικότητα | Μόνο completion handler | async/await + πρόοδος |
| IntentDialog | Όχι | Ενσωματωμένοι διάλογοι Siri |
AppIntent — το κεντρικό πρωτόκολλο που ορίζει το intent. Περιέχει title (όνομα για Siri), description (περιγραφή στο Shortcuts), παραμέτρους (μέσω @Parameter) και τη μέθοδο perform() που επιστρέφει IntentResult. Το αποτέλεσμα μπορεί να είναι IntentDialog (διάλογος με Siri), τιμή για επιστροφή στο Shortcuts ή σφάλμα. Κάθε intent μπορεί επίσης να παρέχει suggestedInvocationPhrase — φράση για φωνητική κλήση.
AppEntity περιγράφει τις οντότητες με τις οποίες εργάζονται τα intents. Για παράδειγμα, εάν η εφαρμογή διαχειρίζεται έργα, το AppEntity Project περιέχει id, displayRepresentation (πώς να εμφανίζεται η οντότητα στο UI) και defaultQuery (πώς να αναζητούνται οι οντότητες). AppEnum — απαρίθμηση για παραμέτρους επιλογής που δημιουργεί αυτόματα UI με στοιχείο picker στο Shortcuts. Αντί να δημιουργείτε χειροκίνητα λίστα παραμέτρων, αρκεί να δηλώσετε ένα enum που συμμορφώνεται με το AppEnum.
enum TaskPriority: String, AppEnum {
case low, medium, high
static var typeDisplayRepresentation: TypeDisplayRepresentation =
"Priority"
var displayRepresentation: DisplayRepresentation {
switch self {
case .low: "Low"
case .medium: "Medium"
case .high: "High"
}
}
}
struct CreateTaskIntent: AppIntent {
static var title: LocalizedStringResource = "Create Task"
@Parameter(title: "Task Name")
var taskName: String
@Parameter(title: "Priority")
var priority: TaskPriority
func perform() async throws -> some IntentResult {
try await TaskManager.shared
.createTask(name: taskName, priority: priority)
return .result(dialog: "Task created")
}
}
Οι παράμετροι του AppIntent δηλώνονται μέσω του property wrapper @Parameter, που ενσωματώνεται αυτόματα με το UI του Shortcuts και τα φωνητικά αιτήματα Siri. Κάθε παράμετρος έχει ένα title (εμφανίζεται στο Shortcuts) και μπορεί να περιέχει περιγραφή, προκαθορισμένες τιμές, περιορισμούς. Το AppIntent υποστηρίζει τυπική τύπους: String, Int, Double, Bool, καθώς και προσαρμοσμένους τύπους μέσω AppEntity και AppEnum.
Η επικύρωση παραμέτρων εκτελείται στη μέθοδο perform() πριν από την εκτέλεση της λογικής. Εάν οι παράμετροι είναι εσφαλμένοι, το intent επιστρέφει σφάλμα μέσω IntentError. Για σύνθετη επικύρωση, μπορείτε να υλοποιήσετε τη μέθοδο validate(), η οποία καλείται πριν την perform() και μπορεί να παρέχει απαντήσεις στον χρήστη μέσω IntentDialog ακόμη και πριν από την εκτέλεση της εντολής. Αυτό είναι ιδιαίτερα χρήσιμο σε σενάρια φωνής Siri, όπου είναι ευκολότερο να ξαναρωτήσετε τον χρήστη παρά να εκτελέσετε μια εσφαλμένη εντολή.
struct SendMessageIntent: AppIntent {
static var title: LocalizedStringResource = "Send Message"
@Parameter(title: "Recipient")
var recipient: String
@Parameter(title: "Message")
var message: String
func validate() throws {
guard message.count >= 1 else {
throw IntentError.invalidMessage
}
}
func perform() async throws -> some IntentResult {
try await Messenger.shared
.send(recipient: recipient, text: message)
return .result(dialog: "Sent!")
}
}
Ένα πλήρες παράδειγμα intent για αναζήτηση σημειώσεων σε μια εφαρμογή επιδεικνύει την εργασία με AppEntity και EntityQuery. Το intent SearchNotesIntent λαμβάνει ένα στριγγοίαπεριεχόμενο και επιστρέφει μια λίστα βρεθείσων σημειώσεων. Το AppEntity Note περιγράφει τη δομή της σημείωσης, και το EntityQuery υλοποιεί την αναζήτηση στο αποθηκευτήριο. Το αποτέλεσμα επιστρέφεται μέσω IntentResult με έναν πίνακα οντοτήτων, τον οποίο το Shortcuts εμφανίζει στον χρήστη.
struct Note: AppEntity {
let id: UUID
let title: String
let content: String
static var typeDisplayRepresentation: TypeDisplayRepresentation =
"Note"
var displayRepresentation: DisplayRepresentation {
DisplayRepresentation(title: "(title)")
}
}
struct SearchNotesIntent: AppIntent {
static var title: LocalizedStringResource = "Search Notes"
@Parameter(title: "Query")
var query: String
func perform() async throws -> some IntentResult {
let results = await NoteStore.shared
.search(query)
.map { $0.toEntity() }
return .result(value: results)
}
}
Μετά τη δήλωση του AppIntent, η ενσωμάτωση με Shortcuts και Siri γίνεται αυτόματα. Η εφαρμογή Shortcuts σαρώνει όλα τα AppIntent από εγκατεστημένες εφαρμογές και τα εμφανίζει στη λίστα διαθέσιμων ενεργειών. Ο χρήστης μπορεί να προσθέσει το intent στην εντολή του, να διαμορφώσει τις παραμέτρους και να το συνδυάσει με άλλες ενέργειες. Για Siri, τα intents εμφανίζονται ως φωνητικές εντολές χωρίς επιπλέον διαμόρφωση από τον πργραμματιστή.
Ο πργραμματιστής μπορεί να βελτιώσει την ενσωμάτωση προσθέτοντας suggestedInvocationPhrase — μια προτεινόμενη φράση για φωνητική κλήση. Για παράδειγμα, για ένα intent προσθήκης εργασίας: suggestedInvocationPhrase = "Add new task". Το Siri αναλύει αυτή τη φράση και την προτείνει στον χρήστη κατά την εκμάθηση φωνητικών εντολών. Επίσης μπορείτε να καθορίσετε categories — την κατηγορία του intent (create, view, search, edit), η οποία βοηθά το Shortcuts να ομαδοποιεί ενέργειες βάσει της σημασίας.
| Κατηγορία | Παράδειγμα | Συμπεριφορά στο Shortcuts |
|---|---|---|
| .create | CreateTaskIntent | Ομαδοποιείται με άλλες ενέργειες δημιουργίας |
| .view | ViewWeatherIntent | Εμφανίζεται στην κατηγορία “Προβολή” |
| .search | SearchNotesIntent | Επισημαίνεται ως ενέργεια αναζήτησης |
| .edit | UpdateTaskIntent | Ομαδοποιείται με ενέργειες επεξεργασίας |
Συχνές Ερωτήσεις
Όχι. Το AppIntent δεν απαιτεί ξεχωριστό Intents Extension. Τα intents μεταγλωττίζονται απευθείας στην κύρια εφαρμογή, απλοποιώντας την αρχιτεκτονική και εξαλείφοντας την ανάγκη για επικοινωνία μεταξύ διεργασιών.
Το AppIntent είναι διαθέσιμο σε iOS 16+, iPadOS 16+, macOS 13+, watchOS 9+. Για iOS 15 και παλαιότερα πρέπει να χρησιμοποιείτε το Intents framework. Συνιστάται η υποστήριξη και των δύο API για ευρεία καλύψη συσκευών.
Το IntentsResult υποστηρίζει String, Int, Double, Bool, πίνακες AppEntity, IntentDialog και προσαρμοσμένους τύπους. Περίπλοκες δομές δεδομένων επιστρέφονται μέσω EntityQuery, που ενσωματώνεται αυτόματα με το UI του Shortcuts.
Ναί, μέσω AppIntentsPackage — ενός πακέτου που επιτρέπει την εκτέλεση intents στη πλευρά του διακομιστή. Αυτό είναι χρήσιμο για εφαρμογές με λογική διακομιστή όπου τα intents πρέπει να έχουν πρόσβαση σε δεδομένα που δεν είναι διαθέσιμα τοπικά.
Χρησιμοποιήστε τον ομοιωτή iOS 16+ με την εφαρμογή Shortcuts. Προσθέστε το intent σε μια εντολή Shortcuts στον ομοιωτή και εκτελέστε την. Για σενάρια Siri απαιτείται φυσική συσκευή, καθώς ο ομοιωτής δεν υποστηρίζει φωνητική είσοδο.
Συμπεράσματα
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης