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:)anddropInteraction(_:sessionDidUpdate:), callingitemProvider.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?