AppIntent — Apple keretrendszer, amelyet iOS 16-ban vezettek be az elavult Intents framework helyettesítésére, deklaratív API-t biztosítva az alkalmazások Siri, Shortcuts és Spotlight integrációjához. Ellentétben a régi megközelítéssel, amely külön Intent Definition File-t és ObjC kód generálását igényelte, az AppIntent tiszta Swift-et használ az AppIntent és AppEnum protokollokkal. A Apple Developer Documentation, 2026 szerint az AppIntent átlagosan 60%-kal csökkenti a kód mennyiségét egy intenz létrehozásához az Intents framework-höz képest, és a Siri-parancsok integrációs ideje néhány napról néhány órára csökken.
Főbb pontok
AppIntent — Apple keretrendszer azon parancsok deklaratív leírására, amelyeket alkalmazása végrehajthat Siri, Shortcuts, Spotlight, Control Center és Action Button kérésére. Alapjául az AppIntent protokoll szolgál, amelyben a fejlesztő leírja az intenz nevét, paramétereit és a perform() metódust — a végrehajtandó logikát. A keretrendszer automatikusan generalája a felhasználói felületet a paraméterek konfigurálásához a Shortcuts alkalmazásban és a hangutasításokat a Siri számára.
Az AppIntent megjelenése előtt a fejlesztők az Intents framework-ot használták — egy Intent Definition File-on alapuló rendszert, amely Objective-C kódot generált és külön Intents Extension konfigurálását igényelte. Ez a folyamat bonyolult volt: még egy egyszerű intenz is akár 5 konfigurációs fájlt igényelt. AppIntent küszöböli ki ezt a bonyolultságot — az intenz egyetlen Swift fájlban van leírva, és a rendszer automatikusan generalál mindent, ami a Siri és Shortcuts integrációhoz szükséges.
A WWDC 2024 „Dive deeper into App Intents” session szerint az Apple az AppIntent-et tekinti az alkalmazások funkcionalitásának hagyományos UI-n túli kiterjesztésének központi mechanizmusaként. Az iOS 18 megjelenésére a top 100 App Store alkalmazás több mint 70%-a már AppIntent-et használ a Shortcuts és Siri integrációhoz, és az átlagos iOS 18 felhasználó naponta 4–6 intenzt indít hangutasításokkal vagy widgetekkel.
Intents framework (iOS 10–15) megkövetelte a .intentdefinition fájl létrehozását, ObjC/Swift osztályok generalását Xcode-on keresztül, Intents Extension és App Intent Configuration konfigurálását. Az AppIntent (iOS 16+) teljesen helyettesíti ezt a csœvezetéket tiszta Swift kóddal generalás, kiterjesztések és további konfigurációk nélkül. Ez az intenzek létrehozásának folyamatát elérhetővé teszi az átlagos iOS fejlesztő számára is, anélkül, hogy meg kellene tanulnia a SiriKit-et.
Az AppIntent fő előnye a deklaratív jelleg. A fejlesztő leírja, mit csinál az intenz, nem azt, hogy hogyan integrálódik a rendszerrel. A keretrendszer maga kezeli a Siri párbeszéd forgatókönyveket, a paraméterek megjelenítését a Shortcuts-ban és a kontextus átadását az intenzek között. A régi Intents framework-ban az integráció minden aspektusát kézzel kellett kódolni, beleértve az INUIHostedView-t az intenz UI megjelenítéséhez.
| Jellemző | Intents framework | AppIntent |
|---|---|---|
| Kód mennyisége | 100–300 sor intenzenként | 30–60 sor |
| Szükséges fájlok | .intentdefinition, Extension, Config | 1 Swift fájl |
| Kódgenerálás | Kötelező (Xcode -> ObjC) | Nem szükséges |
| Aszinkronitás | Csak completion handler | async/await + folyamatjelző |
| IntentDialog | Nincs | Beépített Siri párbeszédek |
AppIntent — központi protokoll, amely meghatározza az intenzet. Tartalmazza a title-t (név a Siri számára), description-t (leírás a Shortcuts-ban), paramétereket (@Parameter-en keresztül) és a perform() metódust, amely IntentResult-ot ad vissza. Az eredmény lehet IntentDialog (párbeszéd Siri-vel), érték a Shortcuts-ba való visszaküldéshez vagy hiba. Minden intenz megadhat suggestedInvocationPhrase-t — egy kifejezést a hanghíváshoz.
AppEntity leírja azokat az entitásokat, amelyekkel az intenzek dolgoznak. Például, ha az alkalmazás projekteket kezel, az AppEntity Project tartalmazza az id-t, displayRepresentation-t (hogyan jelenítse meg az entitást a UI-ban) és defaultQuery-t (hogyan keresse az entitásokat). AppEnum — felsorolás választási paraméterekhez, amely automatikusan UI-t generál egy picker elemmel a Shortcuts-ban. Ahelyett, hogy kézzel hozna létre egy paraméterlistát, elég deklarálni egy enumot, amely megfelel az AppEnum-nak.
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")
}
}
Az AppIntent paraméterek a @Parameter property wrapper-en keresztül kerülnek deklarálásra, amely automatikusan integrálódik a Shortcuts UI-val és a Siri hangkérésekkel. Minden paraméter rendelkezik title-lel (megjelenítve a Shortcuts-ban), és tartalmazhat leírást, alapértelmezett értékeket, korlátozásokat. Az AppIntent támogatja a szabvány típusokat: String, Int, Double, Bool, valamint az egyéni típusokat AppEntity és AppEnum segítségével.
A paraméterek érvényesítése a perform() metódusban történik a logika végrehajtása előtt. Ha a paraméterek helytelenek, az intenz IntentError-on keresztül hibát ad vissza. Összetett érvényesítéshez implementálható a validate() metódus, amely a perform() előtt hívódik meg, és visszajelzést adhat a felhasználónak IntentDialog-on keresztül még a parancs végrehajtása előtt. Ez különösen hasznos a Siri hangforgatókönyvekben, ahol könnyebb újrakérdezni a felhasználót, mint végrehajtani egy helytelen parancsot.
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!")
}
}
Egy teljes példa jegyzetek keresésére egy alkalmazásban bemutatja a munkát AppEntity-vel és EntityQuery-vel. A SearchNotesIntent intenz fogad egy keresőszöveget, és visszaadja a talált jegyzetek listáját. Az AppEntity Note leírja a jegyzet szerkezetét, az EntityQuery pedig megvalósítja a keresést a tárban. Az eredmény az IntentResult-on keresztül kerül vissza entitások tömbjével, amelyet a Shortcuts megjelenít a felhasználónak.
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)
}
}
Az AppIntent deklarálása után a Shortcuts-szal és Siri-vel való integráció automatikusan megtörténik. A Shortcuts alkalmazás beolvassa az összes AppIntent-et a telepített alkalmazásokból, és megjeleníti azokat az elérhető műveletek listájában. A felhasználó hozzáadhatja az intenzt a saját parancsához, konfigurálhatja a paramétereit és kombinálhatja más műveletekkel. Siri számára az intenzek hangutasításként jelennek meg, a fejlesztő részéről többletkonfiguráció nélkül.
A fejlesztő javíthatja az integrációt suggestedInvocationPhrase hozzáadásával — egy ajánlott kifejezés a hanghíváshoz. Például egy feladat hozzáadására szolgáló intenz esetén: suggestedInvocationPhrase = "Add new task". A Siri elemzi ezt a kifejezést, és felajánálja a felhasználónak a hangutasítások tanulása során. Szintén megadható a categories — az intenz kategóriája (create, view, search, edit), amely segíti a Shortcuts-ot a műveletek jelentés szerinti csoportosításában.
| Kategória | Példa | Viselkedés a Shortcuts-ban |
|---|---|---|
| .create | CreateTaskIntent | Csoportosítva más létrehozási műveletekkel |
| .view | ViewWeatherIntent | Megjelenítve a „Nézet” kategóriában |
| .search | SearchNotesIntent | Keresési műveletként megjelölve |
| .edit | UpdateTaskIntent | Csoportosítva a szerkesztési műveletekkel |
Gyakran Ismételt Kérdések
Nem. Az AppIntent nem igényel külön Intents Extension-t. Az intenzek közvetlenül a fő alkalmazásba fordítódnak, ami leegyszerűsíti az architektúrát és megszünteti a folyamatok közötti kommunikáció szükségességét.
Az AppIntent iOS 16+, iPadOS 16+, macOS 13+, watchOS 9+ rendszereken érhető el. iOS 15 és régebbi verziókhoz az Intents framework-ot kell használni. Javasolt mindkét API támogatása a széles körű eszközlefedettség érdekében.
Az IntentsResult támogatja a String, Int, Double, Bool, AppEntity tömbök, IntentDialog és egyéni típusokat. Az összetett adatszerkezetek EntityQuery-n keresztül kerülnek visszaadásra, amely automatikusan integrálódik a Shortcuts UI-jával.
Igen, az AppIntentsPackage segítségével — egy csomaggal, amely lehetővé teszi az intenzek végrehajtását a szerver oldalán. Ez hasznos a szerverlogikával rendelkező alkalmazások számára, ahol az intenzeknek hozzá kell férniük a lokálisan nem elérhető adatokhoz.
Használja az iOS 16+ szimulátort a Shortcuts alkalmazással. Adja hozzá az intenzt egy Shortcuts parancshoz a szimulátoron, és futtassa le. Siri forgatókönyvekhez fizikai eszköz szükséges, mivel a szimulátor nem támogatja a hangbemenetet.
Ö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