Thanks for being a part of WWDC25!

How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here

UIDocumentPickerViewController dismisses presenting view controller when selecting a file multiple times quickly

Description When using UIDocumentPickerViewController with allowsMultipleSelection = false, I expect that selecting a file will dismiss only the document picker.

However, if a user quickly taps the same file multiple times, the picker dismisses both itself and the presenting view controller (i.e., it pops two levels from the view controller stack), which leads to unintended behavior and breaks presentation flow.

Expected Behavior Only UIDocumentPickerViewController should be dismissed when a file is selected—even if the user taps quickly or multiple times on the same file.

Actual Behavior When tapping the same file multiple times quickly, the picker dismisses not only itself but also the parent view controller it was presented from.

Steps to Reproduce

  1. Create a simple view controller and present another one modally over it.
  2. From that presented view controller, present a UIDocumentPickerViewController with allowsMultipleSelection = false.
  3. Tap quickly on the same file in the picker 2 times.
  4. Result: Both the document picker and the presenting view controller are dismissed.

Reproducible Code Snippet

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .green
        addLabel("Parent View Controller")

        DispatchQueue.main.async { [unowned self] in
            let child = UIViewController()
            child.view.backgroundColor = .yellow
            present(child, animated: true)
            child.addLabel("Child View Controller")
            let vc = UIDocumentPickerViewController(
                forOpeningContentTypes: [.pdf, .jpeg, .png],
                asCopy: true
            )
            vc.allowsMultipleSelection = false
            child.present(vc, animated: true)
        }
    }
}

extension UIViewController {
    func addLabel(_ text: String) {
        let label = UILabel(frame: CGRect(x: 0, y: 50, width: view.bounds.width, height: 30))
        label.text = text
        view.addSubview(label)
    }
}

Environment

  • Device: iPhone 15 Pro and others
  • iOS version: 18.2 (reproduces on multiple iOS versions)
  • Occurs with: .pdf, .jpeg, .png file types
  • Mode: Both simulator and real device

Notes

  • Happens consistently with fast multiple taps on the same file.
  • This breaks expected view controller stack behavior.
UIDocumentPickerViewController dismisses presenting view controller when selecting a file multiple times quickly
 
 
Q