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() + } } }