iOS 27 significantly enhances App Intents' Siri integration with Apple Intelligence, enabling Siri to reason about app actions using on-device personal context, multi-step task chaining, and natural language parameter resolution โ without requiring explicit invocation phrases.
โข Intents no longer require explicit SiriKit Intent Definition files โ pure Swift App Intents with AssistantSchema conformance are now the canonical path
โข Added AssistantIntent(schema:) macro that auto-generates required metadata for Apple Intelligence action planning
โข Siri can now chain multiple App Intents across apps in a single user request via the new IntentDependency API
โข ResolvedEntity results can now carry confidence scores that Apple Intelligence uses to handle ambiguous queries gracefully
โข Siri can now autonomously invoke your App Intents as part of multi-step plans, meaning users can ask Siri to accomplish goals that involve your app without knowing the exact commands
โข Apple Intelligence's on-device reasoning layer can match user intent to your intents using semantic understanding, dramatically increasing discoverability
โข New AssistantSchema conformances let you opt into domain-specific Siri behaviors (e.g., messaging, photos, tasks) with far less boilerplate than previous SiriKit extensions
Demonstrates an App Intent that lets Siri create a task with natural language parameter resolution, using the new AssistantIntent schema macro so Apple Intelligence can invoke it as part of multi-step planning.
โimport Intentsโimport IntentsUI+import AppIntents+import Foundationโ// Pre-iOS 27: Required a separate .intentdefinition file generated in Xcodeโ// and a hand-written INExtension subclass in a separate App Extension target.+// Define a domain entity for tasks+struct TaskEntity: AppEntity {+ static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Task")+ static var defaultQuery = TaskQuery()โ// INCreateTaskListIntent was the closest SiriKit analog โ rigid, domain-lockedโclass CreateTaskIntentHandler: NSObject, INCreateTaskListIntentHandling {+ var id: UUID+ var title: String+ var dueDate: Date?โ func handle(โ intent: INCreateTaskListIntent,โ completion: @escaping (INCreateTaskListIntentResponse) -> Voidโ ) {โ guard let titleObj = intent.title,โ let titleStr = titleObj.spokenPhrase else {โ completion(INCreateTaskListIntentResponse(code: .failure, userActivity: nil))โ returnโ }โ // Manually persist the taskโ print("Creating task: \(titleStr)")โ let response = INCreateTaskListIntentResponse(code: .success, userActivity: nil)โ completion(response)+ var displayRepresentation: DisplayRepresentation {+ DisplayRepresentation(title: "\(title)")}+}โ func resolveTitle(โ for intent: INCreateTaskListIntent,โ with completion: @escaping (INSpeakableStringResolutionResult) -> Voidโ ) {โ if let title = intent.title {โ completion(.success(with: title))โ } else {โ completion(.needsValue())+struct TaskQuery: EntityQuery {+ func entities(for identifiers: [UUID]) async throws -> [TaskEntity] {+ // Return matching tasks from your data store+ return identifiers.map { TaskEntity(id: $0, title: "Sample Task") }+ }+}++// iOS 27: Use @AssistantIntent to register with Apple Intelligence action planner+@AssistantIntent(schema: .system.task.createTask)+struct CreateTaskIntent: AppIntent {+ static var title: LocalizedStringResource = "Create Task"+ static var description = IntentDescription("Creates a new task with an optional due date.")++ // Apple Intelligence resolves these from natural language+ @Parameter(title: "Task Title")+ var title: String++ @Parameter(title: "Due Date", default: nil)+ var dueDate: Date?++ // iOS 27: ParameterSummary drives Siri's spoken confirmation+ static var parameterSummary: some ParameterSummary {+ When(\.dueDate, .hasAnyValue) {+ Summary("Create task \(\.$title) due \(\.$dueDate)")+ } otherwise: {+ Summary("Create task \(\.$title)")}}++ func perform() async throws -> some IntentResult & ProvidesDialog {+ // Persist to your data store here+ let newTask = TaskEntity(+ id: UUID(),+ title: title,+ dueDate: dueDate+ )+ let confirmation = dueDate.map {+ "\(title) added, due \($0.formatted(date: .abbreviated, time: .omitted))."+ } ?? "\(title) added with no due date."+ return .result(dialog: IntentDialog(stringLiteral: confirmation))+ }}โ// Also required: Info.plist NSExtension entries, separate target,โ// and manual Siri permission request via INPreferences.requestSiriAuthorization+// Register the App Shortcuts so Siri discovers the intent+struct TaskAppShortcuts: AppShortcutsProvider {+ static var appShortcuts: [AppShortcut] {+ AppShortcut(+ intent: CreateTaskIntent(),+ phrases: [+ "Create a task in \(\..applicationName)",+ "Add a new task to \(\..applicationName)"+ ],+ shortTitle: "Create Task",+ systemImageName: "checklist"+ )+ }+}
AssistantSchema domain conformances must match Apple's predefined schema identifiers exactly or Siri ignores them at runtime. Parameter entity resolution now uses ParameterSummary with a new dynamic resolution path โ omitting it causes Siri to fall back to screen-based disambiguation. Beta 1 has a known issue where multi-intent chaining silently drops optional parameters.
Full Apple Intelligence features require A17 Pro or M-series chip; devices without Apple Intelligence get basic Siri shortcut behavior only
More iOS 27 APIs land every week.
Get notified when new capabilities are published โ no noise, just signal.