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.openschema, which also appears to represent opening an entity or piece of app content.
My questions are:
- For an app that supports iOS 27+, is
.system.openintended to replaceOpenIntent, or do the two serve different purposes? - 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 theOpenIntentprotocol?
Thanks!
References:
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