AppIntent: τι είναι, μοντέλο Siri intents και Swift

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-06-16 Χρόνος ανάγνωσης: 8 λεπ

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 για δημιουργία intents Siri, Shortcuts και Spotlight από iOS 16 και μετά.
  • Πρωτόκολλο AppIntent — βασικό δομικό υλικό: όνομα, περιγραφή, παράμετροι και η μέθοδος perform() καθορίζουν τη λογική της εντολής.
  • AppEntity — πρωτόκολλο για περιγραφή οντοτήτων με τις οποίες εργάζονται τα intents: έργα, εργασίες, επαφές, αρχεία.
  • AppEnum — δηλωτική απαρίθμηση παραμέτρων, που δημιουργεί αυτόματα UI για επιλογή στο Shortcuts.
  • Ασυγχρονικότητα — τα intents υποστηρίζουν async/await, γραμμές προόδου και IntentDialog για διάλογο με τον χρήστη.

Τι είναι το AppIntent και γιατί χρειάζεται;

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.

Που χρησιμοποιείται το AppIntent

  • Siri — φωνητικές εντολές: “Hey Siri, πρόσθεσε εργασία στο MyApp”
  • Shortcuts — αυτοματοποίηση στην εφαρμογή Συντομεύσεις με διαμόρφωση παραμέτρων
  • Spotlight — αναζήτηση και εκτέλεση εντολών απευθείας από τη γραμμή αναζήτησης
  • Control Center — κουμπιά γρήγορης ενέργειας σε iOS 18+
  • Action Button — διαμόρφωση ενέργειας για το κουμπί iPhone 15 Pro και νεότερα

AppIntent vs Intents framework: βασικές διαφορές

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 frameworkAppIntent
Όγκος κώδικα100–300 γραμμές ανά intent30–60 γραμμές
Απαιτούμενα αρχεία.intentdefinition, Extension, Config1 αρχείο Swift
Δημιουργία κώδικαΥποχρεωτική (Xcode -> ObjC)Δεν απαιτείται
ΑσυγχρονικότηταΜόνο completion handlerasync/await + πρόοδος
IntentDialogΌχιΕνσωματωμένοι διάλογοι Siri

Βασικά πρωτόκολλα: AppIntent, AppEntity, AppEnum

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.

Παράδειγμα AppEnum και παραμέτρου

swift
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")
    }
}

Παράμετροι intents και η επικύρωσή τους

Οι παράμετροι του AppIntent δηλώνονται μέσω του property wrapper @Parameter, που ενσωματώνεται αυτόματα με το UI του Shortcuts και τα φωνητικά αιτήματα Siri. Κάθε παράμετρος έχει ένα title (εμφανίζεται στο Shortcuts) και μπορεί να περιέχει περιγραφή, προκαθορισμένες τιμές, περιορισμούς. Το AppIntent υποστηρίζει τυπική τύπους: String, Int, Double, Bool, καθώς και προσαρμοσμένους τύπους μέσω AppEntity και AppEnum.

Η επικύρωση παραμέτρων εκτελείται στη μέθοδο perform() πριν από την εκτέλεση της λογικής. Εάν οι παράμετροι είναι εσφαλμένοι, το intent επιστρέφει σφάλμα μέσω IntentError. Για σύνθετη επικύρωση, μπορείτε να υλοποιήσετε τη μέθοδο validate(), η οποία καλείται πριν την perform() και μπορεί να παρέχει απαντήσεις στον χρήστη μέσω IntentDialog ακόμη και πριν από την εκτέλεση της εντολής. Αυτό είναι ιδιαίτερα χρήσιμο σε σενάρια φωνής Siri, όπου είναι ευκολότερο να ξαναρωτήσετε τον χρήστη παρά να εκτελέσετε μια εσφαλμένη εντολή.

Παράμετροι με επικύρωση

swift
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 σε Swift: παράδειγμα

Ένα πλήρες παράδειγμα intent για αναζήτηση σημειώσεων σε μια εφαρμογή επιδεικνύει την εργασία με AppEntity και EntityQuery. Το intent SearchNotesIntent λαμβάνει ένα στριγγοίαπεριεχόμενο και επιστρέφει μια λίστα βρεθείσων σημειώσεων. Το AppEntity Note περιγράφει τη δομή της σημείωσης, και το EntityQuery υλοποιεί την αναζήτηση στο αποθηκευτήριο. Το αποτέλεσμα επιστρέφεται μέσω IntentResult με έναν πίνακα οντοτήτων, τον οποίο το Shortcuts εμφανίζει στον χρήστη.

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

Ενσωμάτωση με Shortcuts και Siri

Μετά τη δήλωση του AppIntent, η ενσωμάτωση με Shortcuts και Siri γίνεται αυτόματα. Η εφαρμογή Shortcuts σαρώνει όλα τα AppIntent από εγκατεστημένες εφαρμογές και τα εμφανίζει στη λίστα διαθέσιμων ενεργειών. Ο χρήστης μπορεί να προσθέσει το intent στην εντολή του, να διαμορφώσει τις παραμέτρους και να το συνδυάσει με άλλες ενέργειες. Για Siri, τα intents εμφανίζονται ως φωνητικές εντολές χωρίς επιπλέον διαμόρφωση από τον πργραμματιστή.

Ο πργραμματιστής μπορεί να βελτιώσει την ενσωμάτωση προσθέτοντας suggestedInvocationPhrase — μια προτεινόμενη φράση για φωνητική κλήση. Για παράδειγμα, για ένα intent προσθήκης εργασίας: suggestedInvocationPhrase = "Add new task". Το Siri αναλύει αυτή τη φράση και την προτείνει στον χρήστη κατά την εκμάθηση φωνητικών εντολών. Επίσης μπορείτε να καθορίσετε categories — την κατηγορία του intent (create, view, search, edit), η οποία βοηθά το Shortcuts να ομαδοποιεί ενέργειες βάσει της σημασίας.

Κατηγορίες intent για Shortcuts

ΚατηγορίαΠαράδειγμαΣυμπεριφορά στο Shortcuts
.createCreateTaskIntentΟμαδοποιείται με άλλες ενέργειες δημιουργίας
.viewViewWeatherIntentΕμφανίζεται στην κατηγορία “Προβολή”
.searchSearchNotesIntentΕπισημαίνεται ως ενέργεια αναζήτησης
.editUpdateTaskIntentΟμαδοποιείται με ενέργειες επεξεργασίας

Συχνές Ερωτήσεις

Χρειάζεται ξεχωριστό Intents Extension για το AppIntent;

Όχι. Το AppIntent δεν απαιτεί ξεχωριστό Intents Extension. Τα intents μεταγλωττίζονται απευθείας στην κύρια εφαρμογή, απλοποιώντας την αρχιτεκτονική και εξαλείφοντας την ανάγκη για επικοινωνία μεταξύ διεργασιών.

Λειτουργεί το AppIntent σε παλιές εκδόσεις iOS;

Το AppIntent είναι διαθέσιμο σε iOS 16+, iPadOS 16+, macOS 13+, watchOS 9+. Για iOS 15 και παλαιότερα πρέπει να χρησιμοποιείτε το Intents framework. Συνιστάται η υποστήριξη και των δύο API για ευρεία καλύψη συσκευών.

Ποιους τύπους δεδομένων μπορώ να επιστρέψω από ένα intent;

Το IntentsResult υποστηρίζει String, Int, Double, Bool, πίνακες AppEntity, IntentDialog και προσαρμοσμένους τύπους. Περίπλοκες δομές δεδομένων επιστρέφονται μέσω EntityQuery, που ενσωματώνεται αυτόματα με το UI του Shortcuts.

Μπορεί το AppIntent να εκτελεστεί σε διακομιστή;

Ναί, μέσω AppIntentsPackage — ενός πακέτου που επιτρέπει την εκτέλεση intents στη πλευρά του διακομιστή. Αυτό είναι χρήσιμο για εφαρμογές με λογική διακομιστή όπου τα intents πρέπει να έχουν πρόσβαση σε δεδομένα που δεν είναι διαθέσιμα τοπικά.

Πώς να κάνω debug το AppIntent χωρίς φυσική συσκευή;

Χρησιμοποιήστε τον ομοιωτή iOS 16+ με την εφαρμογή Shortcuts. Προσθέστε το intent σε μια εντολή Shortcuts στον ομοιωτή και εκτελέστε την. Για σενάρια Siri απαιτείται φυσική συσκευή, καθώς ο ομοιωτής δεν υποστηρίζει φωνητική είσοδο.

Συμπεράσματα

  • AppIntent — δηλωτικό πλαίσιο Apple για δημιουργία intents Siri, Shortcuts και Spotlight, που εισήχθη στο iOS 16 ως αντικατάσταση του Intents framework.
  • Πρωτόκολλο AppIntent περιγράφει την εντολή: title, παραμέτρους (@Parameter) και μέθοδο perform() με async/await, που επιστρέφει IntentResult.
  • AppEntity και AppEnum — πρωτόκολλα για δηλωτική περιγραφή οντοτήτων και απαριθμήσεων, που δημιουργούν αυτόματα UI στο Shortcuts.
  • Επικύρωση παραμέτρων μέσω της μεθόδου validate() επιτρέπει τον έλεγχο δεδομένων πριν την εκτέλεση του intent και την επιστροφή διαλόγων Siri.
  • Ενσωμάτωση με Shortcuts και Siri γίνεται αυτόματα μετά τη δήλωση του intent; το suggestedInvocationPhrase βελτιώνει την αναγνώριση φωνής.
  • AppIntentsPackage επιτρέπει την εκτέλεση intents σε διακομιστή για πρόσβαση σε απομακρυσμένα δεδομένα και λογική.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

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

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