Siri Intent bir iOS uygulamasını Siri sesli asistanıyla entegre etmek için bir mekanizmadır, kullanıcıların uygulamayı açmadan sesle işlem yapmasına olanak tanır. Geliştirme, Intents (Intents.framework) ve SiriKit frameworkleri kullanılarak Swift ile yapılır. iOS 16 ile birlikte App Intents ortaya çıktı — özel sesli komutlar oluşturmak için yeni, daha esnek bir framework. Siri Intent 10 alanı (mesajlar, aramalar, ödemeler, notlar, egzersizler ve diğerleri) destekler ve uygulamanın IntentHandler aracılığıyla sesli istekleri işlemesine olanak tanır. Temel kavramları, mimariyi ve kod örneklerini keşfedelim.
Önemli Çıkarımlar
Siri Intent bir iOS uygulamasının Siri aracılığıyla kullanıcı tarafından söylenen sesli komutları işlemesine olanak tanıyan bir mekanizmadır. Kullanıcı şöyle dediğinde “Siri, send a message to Ivan on Telegram,” Siri intent’i tanır (INSendMessageIntent), bunu işleyebilecek uygulamayı belirler (Telegram), parametreleri iletir (contact “Ivan,” message text), ve uygulamanın IntentHandler’ını başlatır. Tüm süreç 0.5–2 seconds ve uygulamayı açmayı gerektirmez.
Siri Intent mimarisi üç bileşen içerir. İlki, intent yapısını tanımlayan .intentdefinition dosyasıdır: parametreler (String, Integer, INPerson), tetikleyici ifadeler ve yanıtlar. İkincisi, işleme protokolünü uygulayan IntentHandler’dır: parametreleri alır, eylemi gerçekleştirir (örn. uygulama API’si üzerinden mesaj gönderir) ve bir sonuç koduyla INInteraction döndürür. Üçüncüsü, kendi sürecinde çalışan Xcode’da ayrı bir hedef olan Intents Extension’dır. Siri, bir sesli istek üzerine Intents Extension’ı başlatır, veri iletir ve sonucu alır. Extension’ın UI’ı yoktur — arka planda çalışır ve 5–10 saniye içinde tamamlanmalıdır.
Siri Intent kullanım durumları: sending messages (INSendMessageIntent), making calls (INStartCallIntent), sending payments (INSendPaymentIntent), creating notes (INCreateNoteIntent), workouts (INStartWorkoutIntent), photos (INAramaForFotoğraflarIntent), booking trips (INBookRestaurantReservationIntent), car functions (INSetCarLockStatusIntent). Her alanın, Apple tarafından güvenlik için tanımlanmış katı bir parametre şeması ve sınırlamaları vardır.
SiriKit Apple tarafından iOS 10’da (2016) tanıtılan bir frameworktür. Tipik eylemler için hazır alanlar (Intents) sağlar: messages, calls, payments, notes, reminders, photos, workouts, booking, car functions, search. Her alan için Apple bir dizi Intent sınıfı tanımlamıştır (INSendMessageIntent, INStartCallIntent) uygulamanın IntentHandler aracılığıyla uyguladığı. SiriKit, yürütmeden önce otomatik olarak bir UI onayı oluşturur (ödemeler ve mesajlar için onay zorunludur).
SiriKit Alanları:
SiriKit Sınırlamaları: geliştiriciler özel alanlar oluşturamaz — yalnızca önceden tanımlanmış olanları kullanabilirler. Bu sınırlama, iOS 16’da App Intents’in tanıtılmasıyla çözüldü; bu, herhangi bir uygulama eylemi için isteğe bağlı sesli komutlar oluşturmaya olanak tanır.
App Intents iOS 16’da (2022) tanıtılan ve iOS 17–18’de önemli ölçüde genişletilen bir Apple frameworküdür. Sabit alanları olan SiriKit’in aksine, App Intents geliştiricilerin herhangi bir uygulama eylemi için kendi sesli komutlarını tanımlamasına olanak tanır: “Siri, add milk to the shopping list in AnyList,” “Siri, schedule a meeting in Fantastical,” “Siri, turn on the living room light in Home.” Özel intent’ler, parametreler, ifadeler ve bir onay şeması ile AppIntent protokolü aracılığıyla tanımlanır.
App Intents Bileşenleri:
App Intents vs SiriKit: temel fark esnekliktir. SiriKit 10 alanla sınırlıdır, App Intents herhangi bir komut oluşturmaya izin verir. SiriKit ayrı bir Intents Extension hedefi gerektirir, App Intents ana uygulama içinde çalışır. SiriKit Intents.framework (Objective-C/Swift) kullanır, App Intents @Intent ve @Parameter makrolarıyla yeni bir bildirimsel Swift sözdizimi kullanır. Apple’a göre, 2025 itibarıyla App Intents, Siri desteği olan yeni projelerin %70’inde kullanılmaktadır.
Uygulamaya not eklemek için özel bir App Intent oluşturma örneği. iOS 16+ içinde App Intents framework’ünü kullanan modern yaklaşımı gösterir.
import AppIntents
// 1. Not eklemek için özel Intent
struct AddNoteIntent: AppIntent {
// Komut adı (Shortcuts’ta görünür)
static var title: LocalizedStringResource = "Not ekle"
// Komut açıklaması
static var description: LocalizedStringResource = "Uygulamada yeni bir not oluşturur"
// Komut parametreleri
@Parameter(title: "Not metni")
var noteContent: String
@Parameter(title: "Kategori", default: "Genel")
var category: String
// Eylemi gerçekleştirme
func perform() async throws -> some IntentResult {
// Yerel depolama aracılığıyla not oluşturma
let note = Note(content: noteContent, category: category)
try await NoteStore.shared.save(note)
// Siri için bir diyalogla sonucu döndürme
return .result(
dialog: .response("Not "(noteContent)" oluşturuldu")
)
}
}
// 2. App Shortcut Provider — komutları kaydetme
struct NotesShortcuts: AppShortcutsProvider {
@AppShortcutsBuilder
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: AddNoteIntent(),
phrases: [
"(.applicationName) not ekle",
"(.applicationName) içinde (.$noteContent) ile not oluştur",
"(.applicationName) içinde (.$noteContent) yaz",
]
)
}
}
// 3. Mesajlar için SiriKit Intent (klasik yaklaşım)
class MessageIntentHandler: NSObject, INSendMessageIntentHandling {
func resolveRecipients(
for intent: INSendMessageIntent,
completion: @escaping ([INPersonResolutionResult]) -> Void
) {
guard let recipients = intent.recipients else {
completion([.needsRequired()])
return
}
// Uygulamanın adres defteri aracılığıyla kişileri çözme
let results = recipients.map { INPersonResolutionResult.success(with: $0) }
completion(results)
}
func handle(
intent: INSendMessageIntent,
completion: @escaping (INSendMessageIntentResponse) -> Void
) {
// Uygulama API’si aracılığıyla mesaj gönderme
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil
)
completion(response)
}
}
Önemli noktalar: AppIntent — özel sesli komutlar için protokol; @Parameter — komut parametrelerini tanımlayan makro; perform() — eylemi yürüten ve Siri için bir diyalogla sonuç döndüren yöntem; AppShortcutsProvider — uygulamanın komutlarını Siri ve Shortcuts’a kaydeder; INSendMessageIntentHandling — mesaj alanını işlemek için SiriKit protokolü. Tetikleyici ifadeler, çeşitlilik için .applicationName ve \.$parameter aracılığıyla ayarlanır.
Siri Intents oluşturmak için öneriler: telaffuz varyantlarıyla net tetikleyici ifadeler tanımlayın; yürütmeden sonra bilgilendirici diyalog döndürün (başarı/hata); açıklama talepleriyle çözümleme yöntemleri aracılığıyla eksik parametre durumlarını işleyin; Siri öğrenmesi için yürütmeden sonra INInteraction kaydedin; gerçek bir cihazda test edin (simülatör Siri’yi desteklemez). App Intents için, tanımayı iyileştirmek için inAppAramaKeywords ile @Intent kullanın.
Sınırlamalar: SiriKit Intent’leri 10 alanla sınırlıdır. Intents Extension 5–10 saniye sınırıyla çalışır — aşılırsa, Siri hata bildirir. Siri Intent’in UI’ı yoktur — tüm arayüz Siri tarafından oluşturulur. App Intents yalnızca iOS 16+ sürümünde kullanılabilir (2026 itibarıyla ~%85 cihaz kapsamı). iOS 13–15’i desteklemek için SiriKit kullanılmalıdır. Gizlilik: Siri, uygulamaya ses kayıtları iletmez — yalnızca tanınan parametre metnini iletir. Hassas eylemler için (ödemeler, mesajlar), kullanıcı onayı zorunludur.
| Parameter | SiriKit | App Intents |
|---|---|---|
| Minimum iOS | iOS 10 | iOS 16 |
| Domains | 10 predefined | Arbitrary |
| Language | Objective-C / Swift | Swift (macros) |
| Target | Intents Extension | Main app |
| UI | Siri UI (generation) | Siri UI (generation) |
| Confirmation | For payments/messages | Optional |
| Shortcuts | Manual | Automatic |
| Widget integration | No | WidgetIntent (iOS 17+) |
Performans ve hata ayıklama: Intents Extension, 30–50 MB bellek sınırıyla ayrı bir süreçte çalışır. Hata ayıklama için, Xcode’da Siri sürecine bağlı «Intents Extension» şemasını kullanın. Günlükler cihaz konsoluna çıktılanır. App Intents, cihazdaki Shortcuts uygulaması aracılığıyla hata ayıklanır. INInteraction yerel olarak kaydedilir ve Siri tarafından öneriler için kullanılır — güncel olmayan etkileşimleri INInteraction delete ile silin.
Sıkça Sorulan Sorular
Siri Intent, bir uygulamayı açmadan belirli bir eylemi tetikleyen sesli bir komuttur. Kullanıcı «Siri, WhatsApp’ta mesaj gönder» der ve Siri, eylemi IntentHandler of the WhatsApp app.
SiriKit (iOS 10+), önceden tanımlanmış alanları olan (mesajlar, aramalar, ödemeler) daha eski bir frameworktür. App Intents (iOS 16+) is a new framework that allows creating custom intents for any actions without domain limitations.
SiriKit 10 alanı destekler: messages (INSendMessageIntent), calls (INStartCallIntent), payments (INSendPaymentIntent), notes, reminders, photos, workouts, trip booking, car functions, and search.
Siri, konuşmayı tanır ve .intentdefinition’da tanımlanan ifadelere dayanarak belirli bir Intent ile eşleştirir. IntentHandler eylemi gerçekleştirir ve sonucu döndürür. Tüm süreç 0.5–2 seconds.
Evet, intent’i tanıdıktan sonra ancak yürütmeden önce Siri kullanıcıya bir onay gösterir. Kullanıcı yürütmeyi sesle («İptal») veya dokunarak iptal edebilir. Ödemeler ve mesajlar için onay zorunludur.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun