We are facing an issue with VNDocumentCameraViewController where the tick button in the top-right corner becomes completely unresponsive after a document is scanned. When the user taps the tick button immediately after capturing the document — before the "Ready for next Scan" text appears on screen — the button freezes and the documentCameraViewController(_:didFinishWith:) delegate is never called. Through debugging, we observed that if the tick is tapped before the scanned image thumbnail appears in the bottom-left corner, the delegate is never triggered. However, if the user waits for the thumbnail to appear and then taps the tick, it works as expected. This indicates that VNDocumentCameraViewController has an internal processing pipeline that must complete before the tick button becomes truly interactive, but there is no visual indication or API callback to inform the user or the developer when it is safe to tap. We would appreciate Apple looking into this and either disabling the button during processing, queuing the tap, or providing a delegate callback for when the controller is truly ready.
Thanks for the precise reproducer — pinning the failure to "tap before thumbnail appears," confirming that waiting for the thumbnail makes the tap work, and identifying that the delegate callback never fires in the failing case characterize the timing race.
Looking at the public surface of VNDocumentCameraViewControllerDelegate (https://developer.apple.com/documentation/visionkit/vndocumentcameraviewcontrollerdelegate), the delegate has exactly three callbacks:
documentCameraViewController(_:didFinishWith:)— successful scan completiondocumentCameraViewControllerDidCancel(_:)— cancellationdocumentCameraViewController(_:didFailWithError:)— scan failed or capture unavailable
There's no intermediate-state callback (no "scan captured but still processing," no "ready to commit"). The VNDocumentCameraViewController class itself exposes only delegate and the class property supported — no observable property that would signal when the internal processing pipeline has finished.
So your reading of the public API is correct: no programmatic signal exists to know when the tick is safe to tap. The three remedies you propose — disable the button during processing, queue the tap, or add a delegate callback — are all framework-level changes rather than something app integration code can work around.
For both the bug report and the feature request, Feedback Assistant is the channel that routes these to the VisionKit team. Filing them as separate FBs — one for the bug (the Done button becoming unresponsive), one for the feature request (a programmatic ready-signal) — lets each track on its own path, since bug fixes and feature additions move through different engineering processes.
A complete FB for the bug would include:
- the steps you've already described (the tap-before-thumbnail / tap-after-thumbnail difference)
- the device model and iOS version where you reproduced it
- a sysdiagnose captured shortly after observing the unresponsive state
- a brief reproducer project, if you can share one
The feature-request FB can be shorter — the use case and your three proposed remedies (disable the button during processing, queue the tap, or add a delegate callback) are enough.
If you post the FB numbers here, I can route them internally.