diff --git a/.changes/fix-barcode-scanner-ios-sim-crash.md b/.changes/fix-barcode-scanner-ios-sim-crash.md new file mode 100644 index 000000000..bd325e2ab --- /dev/null +++ b/.changes/fix-barcode-scanner-ios-sim-crash.md @@ -0,0 +1,6 @@ +--- +barcode-scanner: patch +barcode-scanner-js: patch +--- + +On iOS, fixed an application crash happening when the scanner was started on the iOS Simulator (no camera available). diff --git a/plugins/barcode-scanner/ios/Sources/BarcodeScannerPlugin.swift b/plugins/barcode-scanner/ios/Sources/BarcodeScannerPlugin.swift index 450c3cf77..545eb9f4d 100644 --- a/plugins/barcode-scanner/ios/Sources/BarcodeScannerPlugin.swift +++ b/plugins/barcode-scanner/ios/Sources/BarcodeScannerPlugin.swift @@ -269,20 +269,20 @@ class BarcodeScannerPlugin: Plugin, AVCaptureMetadataOutputObjectsDelegate { scanFormats = [AVMetadataObject.ObjectType]() (args.formats ?? []).forEach { format in - if let formatValue = format.value { - scanFormats.append(formatValue) - } else { - invoke.reject("Unsupported barcode format on this iOS version: \(format)") - return - } + if let formatValue = format.value { + scanFormats.append(formatValue) + } else { + invoke.reject("Unsupported barcode format on this iOS version: \(format)") + return + } } if scanFormats.isEmpty { - for supportedFormat in SupportedFormat.allCases { - if let formatValue = supportedFormat.value { - scanFormats.append(formatValue) - } + for supportedFormat in SupportedFormat.allCases { + if let formatValue = supportedFormat.value { + scanFormats.append(formatValue) } + } } self.metaOutput!.metadataObjectTypes = self.scanFormats @@ -305,6 +305,13 @@ class BarcodeScannerPlugin: Plugin, AVCaptureMetadataOutputObjectsDelegate { return } + // Check if camera is available on this platform (iOS simulator doesn't have cameras) + let availableVideoDevices = discoverCaptureDevices() + if availableVideoDevices.isEmpty { + invoke.reject("No camera available on this device (e.g., iOS Simulator)") + return + } + var iOS14min: Bool = false if #available(iOS 14.0, *) { iOS14min = true } if !iOS14min && self.getPermissionState() != "granted" {