iOS 27 significantly expands the App Intents framework with EntityCollection for bulk performance, RelevantEntities for proactive suggestions, SyncableEntity for cross-device Siri continuity, ValueRepresentation for structured cross-app sharing, union value parameters, and longer-running intent execution support.
โข Added EntityCollection parameter type to skip full entity resolution for bulk operations โ dramatically improving performance at scale
โข Added RelevantEntities API to proactively register entities with contextual hints so the system can surface them before any user interaction
โข Added SyncableEntity protocol and SyncableEntityIdentifier to allow entity IDs to be stable and shared across devices for multi-device Siri conversations
โข Added ValueRepresentation for Transferable entities, native support for Duration and PersonNameComponents parameters, and @UnionValue macro for multi-type parameters
โข EntityCollection lets intents process thousands of entities by ID only โ skipping full resolution โ delivering near-instant performance for bulk operations that previously took seconds
โข RelevantEntities enables apps to proactively surface content to Siri and the system in the right context, even before users have ever searched for or interacted with that content
โข SyncableEntity and cross-device Siri conversation continuity mean entity references made on one Apple device can be resolved and acted upon on another device seamlessly
Demonstrates how to use EntityCollection as an intent parameter type to tag thousands of photos by keyword without resolving full entities, showing the before/after performance pattern introduced in iOS 27.
import AppIntentsโ// MARK: - Pre-iOS-27: full entity array โ all entities resolved before perform runs+// MARK: - Entityโstruct TagPhotosIntentLegacy: AppIntent {+struct PhotoEntity: AppEntity {+ static var typeDisplayRepresentation: TypeDisplayRepresentation = "Photo"+ static var defaultQuery = PhotoEntityQuery()++ var id: String+ var title: String++ var displayRepresentation: DisplayRepresentation {+ DisplayRepresentation(title: "\(title)")+ }+}++struct PhotoEntityQuery: EntityQuery {+ func entities(for identifiers: [String]) async throws -> [PhotoEntity] {+ // Fetch only the requested photos from your data store+ identifiers.map { PhotoEntity(id: $0, title: "Photo \($0)") }+ }+}++// MARK: - Intent using EntityCollection (iOS 27)+// Only entity IDs are passed; no full resolution occurs for the collection.++struct TagPhotosIntent: AppIntent {static var title: LocalizedStringResource = "Tag Photos"static var description = IntentDescription("Adds a keyword tag to selected photos.")โ // The system resolves every PhotoEntity fully before calling perform,โ // even though only the ID is needed. At 1000+ photos this is very slow.+ // EntityCollection passes only IDs โ no full entity hydration@Parameter(title: "Photos")โ var photos: [PhotoEntity]+ var photos: EntityCollection<PhotoEntity>@Parameter(title: "Tag")var tag: String@MainActorfunc perform() async throws -> some IntentResult {โ let ids = photos.map(\.id)+ // photos.entityIdentifiers gives you the raw IDs directly+ let ids = photos.entityIdentifiersawait PhotoLibrary.shared.applyTag(tag, toPhotoIDs: ids)return .result()}+}++// MARK: - Stub data layer++actor PhotoLibrary {+ static let shared = PhotoLibrary()++ func applyTag(_ tag: String, toPhotoIDs ids: [String]) async {+ // Update your data model using IDs only โ no full entity needed+ print("Tagged \(ids.count) photos with '\(tag)'")+ }}
EntityCollection only passes identifiers to perform โ you must fetch full data yourself if needed inside the intent body; SyncableEntity requires stable server-side or CloudKit IDs to be meaningful across devices; @UnionValue macro is new and documentation is limited in early betas; extended intent execution time limits are not yet fully documented
Cross-device Siri features (SyncableEntity) require Apple Intelligence-capable devices; RelevantEntities requires appropriate entitlements
More iOS 27 APIs land every week.
Get notified when new capabilities are published โ no noise, just signal.