From d8645ab3e5b508456681eb53275c0837db25aeee Mon Sep 17 00:00:00 2001 From: zankowitch alexis Date: Thu, 28 May 2026 11:46:25 +0200 Subject: [PATCH] fix(barcode-scanner): dispatch iOS cancel() cleanup to the main thread (#3393) Signed-off-by: Alexis Zankowitch --- .changes/barcode-scanner-ios-cancel-main-thread.md | 6 ++++++ .../ios/Sources/BarcodeScannerPlugin.swift | 9 +++++---- 2 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 .changes/barcode-scanner-ios-cancel-main-thread.md diff --git a/.changes/barcode-scanner-ios-cancel-main-thread.md b/.changes/barcode-scanner-ios-cancel-main-thread.md new file mode 100644 index 000000000..5b4930a5b --- /dev/null +++ b/.changes/barcode-scanner-ios-cancel-main-thread.md @@ -0,0 +1,6 @@ +--- +"barcode-scanner": patch +"barcode-scanner-js": patch +--- + +Fixed a crash on iOS when `cancel()` is invoked by running the cancel handler on the main thread. diff --git a/plugins/barcode-scanner/ios/Sources/BarcodeScannerPlugin.swift b/plugins/barcode-scanner/ios/Sources/BarcodeScannerPlugin.swift index 545eb9f4d..96996cabe 100644 --- a/plugins/barcode-scanner/ios/Sources/BarcodeScannerPlugin.swift +++ b/plugins/barcode-scanner/ios/Sources/BarcodeScannerPlugin.swift @@ -337,10 +337,11 @@ class BarcodeScannerPlugin: Plugin, AVCaptureMetadataOutputObjectsDelegate { } @objc private func cancel(_ invoke: Invoke) { - self.invoke?.reject("cancelled") - - destroy() - invoke.resolve() + DispatchQueue.main.async { [self] in + self.invoke?.reject("cancelled") + self.destroy() + invoke.resolve() + } } }