NSItemProvider.registeredTypeIdentifiers(fileOptions: [.openInPlace]) is empty until performDrop

I am building an app for iOS and MacCatalyst that indexes files by storing their local paths. Because the app relies on the file remaining at its original location, I only want to accept items that can be opened in place.

I am struggling to determine if an item is "Open In Place" compatible early in the drag-and-drop lifecycle. Specifically:

  • In dropInteraction(_:canHandle:) and dropInteraction(_:sessionDidUpdate:), calling itemProvider.registeredTypeIdentifiers(fileOptions: [.openInPlace]) returns an empty array.

  • Only once the drop is actually committed in dropInteraction(_:performDrop:) does that same call return the expected type identifiers.

This creates a poor user experience. I want to validate the "In Place" capability at the very start of the session so the drop target only activates for valid files. If an item is ephemeral (like a dragged photo from the Photos app or a temporary export), the drop zone should not react at all.

How can I reliably detect if an NSItemProvider supports .openInPlace before the performDrop delegate method is called?

NSItemProvider.registeredTypeIdentifiers(fileOptions: [.openInPlace]) is empty until performDrop
 
 
Q