I'm trying to make a third-party app's on-screen image available to Siri / Apple Intelligence so the user can say something like "send this to <app>" and have the image handed off. And I'd like to confirm whether I'm using the intended mechanism or whether this particular case just isn't supported yet.
What I'm trying to do
My app shows a single image (it owns no photo library, the image is an in-app render). I want the user to be able to reference it as "this" and have Siri move it to another app.
What I implemented (following Making onscreen content available to Siri and Apple Intelligence and WWDC26 240/343)
A plain AppEntity with a stable id, conforming to Transferable, annotated on the image view with
the iOS 27 .appEntityIdentifier(_:) modifier:
struct OnScreenImageEntity: AppEntity, Transferable {
static let typeDisplayRepresentation = TypeDisplayRepresentation(name: "On-Screen Image")
static let defaultQuery = Query()
let id: String
static var transferRepresentation: some TransferRepresentation {
DataRepresentation(exportedContentType: .plainText) { … } // distinctive text
DataRepresentation(exportedContentType: .png) { … } // the image
}
struct Query: EntityQuery {
func entities(for ids: [String]) async throws -> [OnScreenImageEntity] {
logger.notice("entities(for:) CALLED \(ids)") // <- never fires
return ids.filter { store.isCurrent($0) }.map(OnScreenImageEntity.init)
}
}
}
// on the view:
Image(uiImage: image)
.appEntityIdentifier(EntityIdentifier(for: OnScreenImageEntity.self, identifier: id))
What I observe (iOS 27 Beta 3, device)
- "Describe this image" / "Create a note for this" appear to use an automatic screenshot — the
responses reference my app's UI chrome, and
EntityQuery.entities(for:)is never called, so my entity'sTransferableis not involved at all. - "Send this to <contact>" doesn't attach the image; Siri says something like "I can't attach the
image directly from your screen," which again sounds like a screen grab.
entities(for:)is not called. - The only flow that resolves my entity is the ChatGPT hand-off: asking Siri about the
on-screen content calls
entities(for:)(several times). But even there it stalls — Siri responds "could not clarify what you mean by 'about this'… document, image, or topic?", and noTransferablerepresentation is ever read (my export closures never run). So the entity resolves, yet the content is never actually transferred. - The older
NSUserActivity.appEntityIdentifierroute was never consumed at all; only the iOS 27.appEntityIdentifier(_:)view modifier produced any resolution, and only in the ChatGPT flow above.
I also understand from WWDC26 240/343 that the cross-app content move is built on
IntentValueRepresentation (entity ↔ a system value type like IntentPerson),
which the recipient imports via IntentValueQuery / IntentValueRepresentation(importing:). Since
there doesn't seem to be a system value type for an arbitrary image (and IntentFile isn't one), I'm
not sure an image entity can participate in that transfer at all.
My questions
- Is
.appEntityIdentifier(_:)the intended way to expose a single on-screen item in iOS 27? It only resolves my entity in the ChatGPT hand-off, and even then theTransferableis never read — under what conditions is the resolved entity'sTransferableactually consumed? - Are on-screen content requests ("describe this", "create a note for this") ever meant to use an
app-provided
AppEntity+Transferable, or are they always served by screen capture? (For me they never callentities(for:).) - Is there a supported path for Siri to send an image from a third-party app's on-screen content
to another app? If the transfer requires
IntentValueRepresentationand there's no image system value, is aTransferableimage representation ever consumed for this — and if so, how is it triggered?
If this is simply not supported for image content yet, that's useful to know too, I just want to make sure I'm not missing a required piece (a schema conformance, an eligibility flag, a different annotation API, etc.).
I have a minimal sample project that reproduces this (single annotated image, no photo library, logs
to a subsystem so you can see entities(for:) never being called) and filed it as Feedback
FB23813341 — happy to share details.
Thanks!