AppIntent — framework Apple, diperkenalkan di iOS 16 sebagai pengganti Intents framework yang usang, menyediakan API deklaratif untuk integrasi aplikasi dengan Siri, Shortcuts, dan Spotlight. Tidak seperti pendekatan lama yang memerlukan file Intent Definition File terpisah dan pembuatan kode ObjC, AppIntent menggunakan Swift murni dengan protokol AppIntent dan AppEnum. Menurut Apple Developer Documentation, 2026, AppIntent mengurangi jumlah kode untuk membuat satu intent rata-rata 60% dibandingkan dengan Intents framework, dan waktu integrasi perintah Siri berkurang dari beberapa hari menjadi beberapa jam.
Poin Utama
AppIntent — framework Apple untuk mendeskripsikan secara deklaratif perintah yang dapat dijalankan aplikasi Anda atas permintaan Siri, Shortcuts, Spotlight, Control Center, dan Action Button. Di dasarnya terdapat protokol AppIntent, di mana pengembang mendeskripsikan nama intent, parameternya, dan metode perform() — logika yang dijalankan. Framework secara otomatis menghasilkan antarmuka pengguna untuk mengonfigurasi parameter di aplikasi Shortcuts dan frasa suara untuk Siri.
Sebelum munculnya AppIntent, pengembang menggunakan Intents framework — sistem berbasis file Intent Definition File, yang menghasilkan kode Objective-C dan memerlukan konfigurasi Intents Extension terpisah. Proses ini rumit: bahkan intent sederhana memerlukan hingga 5 file konfigurasi. AppIntent menghilangkan kompleksitas ini — intent dideskripsikan dalam satu file Swift, dan sistem secara otomatis menghasilkan semua yang diperlukan untuk integrasi dengan Siri dan Shortcuts.
Menurut WWDC 2024 Session “Dive deeper into App Intents”, Apple melihat AppIntent sebagai mekanisme sentral untuk memperluas fungsionalitas aplikasi di luar UI tradisional. Pada saat rilis iOS 18, lebih dari 70% aplikasi di top 100 App Store telah menggunakan AppIntent untuk integrasi dengan Shortcuts dan Siri, dan pengguna rata-rata iOS 18 menjalankan 4–6 intent per hari melalui perintah suara atau widget.
Intents framework (iOS 10–15) memerlukan pembuatan file .intentdefinition, pembuatan kelas ObjC/Swift melalui Xcode, konfigurasi Intents Extension dan App Intent Configuration. AppIntent (iOS 16+) sepenuhnya menggantikan pipeline ini dengan kode Swift murni tanpa pembuatan, ekstensi, dan konfigurasi tambahan. Ini membuat proses pembuatan intent dapat diakses oleh pengembang iOS biasa tanpa mempelajari SiriKit.
Keunggulan utama AppIntent adalah deklaratifitas. Pengembang mendeskripsikan apa yang dilakukan intent, bukan bagaimana ia berintegrasi dengan sistem. Framework sendiri menangani skenario dialog Siri, menampilkan parameter di Shortcuts, dan mentransfer konteks antar intent. Di Intents framework lama, setiap aspek integrasi harus dikodekan secara manual, termasuk INUIHostedView untuk menampilkan UI intent.
| Karakteristik | Intents framework | AppIntent |
|---|---|---|
| Jumlah kode | 100–300 baris per intent | 30–60 baris |
| File yang diperlukan | .intentdefinition, Extension, Config | 1 file Swift |
| Pembuatan kode | Wajib (Xcode -> ObjC) | Tidak diperlukan |
| Asinkronisitas | Hanya completion handler | async/await + kemajuan |
| IntentDialog | Tidak | Dialog Siri bawaan |
AppIntent — protokol sentral yang mendefinisikan intent. Ini berisi title (nama untuk Siri), description (deskripsi di Shortcuts), parameter (melalui @Parameter) dan metode perform() yang mengembalikan IntentResult. Hasilnya bisa berupa IntentDialog (dialog dengan Siri), nilai untuk dikembalikan ke Shortcuts, atau kesalahan. Setiap intent juga dapat menyediakan suggestedInvocationPhrase — frasa untuk panggilan suara.
AppEntity mendeskripsikan entitas yang digunakan intent. Misalnya, jika aplikasi mengelola proyek, AppEntity Project berisi id, displayRepresentation (bagaimana menampilkan entitas di UI) dan defaultQuery (bagaimana mencari entitas). AppEnum — enumerasi untuk parameter pilihan yang secara otomatis menghasilkan UI dengan elemen picker di Shortcuts. Alih-alih membuat daftar parameter secara manual, cukup mendeklarasikan enum yang sesuai dengan 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")
}
}
Parameter AppIntent dideklarasikan melalui property wrapper @Parameter, yang secara otomatis berintegrasi dengan UI Shortcuts dan permintaan suara Siri. Setiap parameter memiliki title (ditampilkan di Shortcuts) dan dapat berisi deskripsi, nilai default, batasan. AppIntent mendukung tipe standar: String, Int, Double, Bool, serta tipe kustom melalui AppEntity dan AppEnum.
Validasi parameter dilakukan dalam metode perform() sebelum menjalankan logika. Jika parameter tidak valid, intent mengembalikan kesalahan melalui IntentError. Untuk validasi kompleks, dapat diimplementasikan metode validate(), yang dipanggil sebelum perform() dan dapat memberikan umpan balik kepada pengguna melalui IntentDialog bahkan sebelum perintah dijalankan. Ini sangat berguna dalam skenario suara Siri, di mana lebih mudah menanyai ulang pengguna daripada menjalankan perintah yang salah.
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!")
}
}
Contoh lengkap intent untuk mencari catatan di aplikasi mendemonstrasikan kerja dengan AppEntity dan EntityQuery. Intent SearchNotesIntent menerima string pencarian dan mengembalikan daftar catatan yang ditemukan. AppEntity Note mendeskripsikan struktur catatan, dan EntityQuery mengimplementasikan pencarian di penyimpanan. Hasil dikembalikan melalui IntentResult dengan array entitas, yang ditampilkan Shortcuts kepada pengguna.
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)
}
}
Setelah mendeklarasikan AppIntent, integrasi dengan Shortcuts dan Siri terjadi secara otomatis. Aplikasi Shortcuts memindai semua AppIntent dari aplikasi yang terinstal dan menampilkannya dalam daftar tindakan yang tersedia. Pengguna dapat menambahkan intent ke perintahnya, mengonfigurasi parameternya, dan menggabungkannya dengan tindakan lain. Untuk Siri, intent muncul sebagai perintah suara tanpa konfigurasi tambahan dari pengembang.
Pengembang dapat meningkatkan integrasi dengan menambahkan suggestedInvocationPhrase — frasa yang direkomendasikan untuk panggilan suara. Misalnya, untuk intent penambahan tugas: suggestedInvocationPhrase = "Add new task". Siri menganalisis frasa ini dan menawarkannya kepada pengguna saat mempelajari perintah suara. Juga dapat ditentukan categories — kategori intent (create, view, search, edit), yang membantu Shortcuts mengelompokkan tindakan berdasarkan makna.
| Kategori | Contoh | Perilaku di Shortcuts |
|---|---|---|
| .create | CreateTaskIntent | Dikelompokkan dengan tindakan pembuatan lainnya |
| .view | ViewWeatherIntent | Ditampilkan dalam kategori “Lihat” |
| .search | SearchNotesIntent | Ditandai sebagai tindakan pencarian |
| .edit | UpdateTaskIntent | Dikelompokkan dengan tindakan pengeditan |
Pertanyaan yang Sering Diajukan
Tidak. AppIntent tidak memerlukan Intents Extension terpisah. Intent dikompilasi langsung ke dalam aplikasi utama, yang menyederhanakan arsitektur dan menghilangkan kebutuhan komunikasi antar-proses.
AppIntent tersedia di iOS 16+, iPadOS 16+, macOS 13+, watchOS 9+. Untuk iOS 15 dan yang lebih lama, harus menggunakan Intents framework. Disarankan untuk mendukung kedua API untuk cakupan perangkat yang luas.
IntentsResult mendukung String, Int, Double, Bool, array AppEntity, IntentDialog, dan tipe kustom. Struktur data kompleks dikembalikan melalui EntityQuery, yang secara otomatis berintegrasi dengan UI Shortcuts.
Ya, melalui AppIntentsPackage — paket yang memungkinkan eksekusi intent di sisi server. Ini berguna untuk aplikasi dengan logika server di mana intent perlu mengakses data yang tidak tersedia secara lokal.
Gunakan simulator iOS 16+ dengan aplikasi Shortcuts. Tambahkan intent ke perintah Shortcuts di simulator dan jalankan. Untuk skenario Siri, diperlukan perangkat fisik karena simulator tidak mendukung input suara.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga