OpenIntent vs .system.open App Schema: Which should be used for opening entities on iOS 27 and later?

I'm trying to understand the intended relationship between OpenIntent and the new .system.open App Intent schema introduced in iOS 27.

From the documentation:

  • OpenIntent (available since iOS 16) is described as an intent that opens an associated item.
  • iOS 27 introduces the .system.open schema, which also appears to represent opening an entity or piece of app content.

My questions are:

  1. For an app that supports iOS 27+, is .system.open intended to replace OpenIntent, or do the two serve different purposes?
  2. For apps that support both iOS 26 and iOS 27+, is the recommended approach to have two structs that implement the same opening logic, one with @AppIntent(schema: .system.open) and the other implementing the OpenIntent protocol?

Thanks!

References:

open protocol

OpenIntent

Answered by DTS Engineer in 894109022

Thanks for the post! Awesome finding.

This is very interesting and yes OpenIntent was available in iOS 16 but the AppIntent schema only work in iOS 27+. The .system.open schema, introduced in iOS 27, is designed to work in conjunction with the OpenIntent protocol. The @AppIntent(schema: .system.open) macro generates the necessary properties and protocol conformance for an app intent implementation that aligns with the system domain's open action.

https://developer.apple.com/documentation/appintents/appschema/systemintent/open

This is the important discussion https://developer.apple.com/documentation/appintents/appschema/systemintent/open#Discussion

This means that when you adopt the .system.open schema, your intent will also conform to the OpenIntent protocol.

The OpenIntent protocol, available since iOS 16, is used to open an associated item, whether it's a dynamic AppEntity or a static AppEnum. The .system.open schema extends this capability by making your app's actions discoverable by Apple Intelligence and Siri, allowing users to open content through natural language.

Therefore, as far as I know, .system.open is not intended to replace OpenIntent, but rather to enhance its discoverability and integration within the system experiences powered by Apple Intelligence.

For apps that support both iOS 26 and iOS 27+, the recommended approach is to use a single AppIntent struct that adopts the OpenIntent protocol and is annotated with the @AppIntent(schema: .system.open) macro.

Hope this helps

Albert  WWDR

Accepted Answer

Thanks for the post! Awesome finding.

This is very interesting and yes OpenIntent was available in iOS 16 but the AppIntent schema only work in iOS 27+. The .system.open schema, introduced in iOS 27, is designed to work in conjunction with the OpenIntent protocol. The @AppIntent(schema: .system.open) macro generates the necessary properties and protocol conformance for an app intent implementation that aligns with the system domain's open action.

https://developer.apple.com/documentation/appintents/appschema/systemintent/open

This is the important discussion https://developer.apple.com/documentation/appintents/appschema/systemintent/open#Discussion

This means that when you adopt the .system.open schema, your intent will also conform to the OpenIntent protocol.

The OpenIntent protocol, available since iOS 16, is used to open an associated item, whether it's a dynamic AppEntity or a static AppEnum. The .system.open schema extends this capability by making your app's actions discoverable by Apple Intelligence and Siri, allowing users to open content through natural language.

Therefore, as far as I know, .system.open is not intended to replace OpenIntent, but rather to enhance its discoverability and integration within the system experiences powered by Apple Intelligence.

For apps that support both iOS 26 and iOS 27+, the recommended approach is to use a single AppIntent struct that adopts the OpenIntent protocol and is annotated with the @AppIntent(schema: .system.open) macro.

Hope this helps

Albert  WWDR

OpenIntent vs .system.open App Schema: Which should be used for opening entities on iOS 27 and later?
 
 
Q