diff --git a/.changes/barcode-gs1.md b/.changes/barcode-gs1.md new file mode 100644 index 00000000..12b5c4e5 --- /dev/null +++ b/.changes/barcode-gs1.md @@ -0,0 +1,6 @@ +--- +barcode-scanner: minor +barcode-scanner-js: minor +--- + +Added support for GS1 DataBar on iOS 15.4+ diff --git a/plugins/barcode-scanner/api-iife.js b/plugins/barcode-scanner/api-iife.js index 620b59a7..be48fae9 100644 --- a/plugins/barcode-scanner/api-iife.js +++ b/plugins/barcode-scanner/api-iife.js @@ -1 +1 @@ -if("__TAURI__"in window){var __TAURI_PLUGIN_BARCODE_SCANNER__=function(n){"use strict";async function e(n,e={},r){return window.__TAURI_INTERNALS__.invoke(n,e,r)}var r;return"function"==typeof SuppressedError&&SuppressedError,n.Format=void 0,(r=n.Format||(n.Format={})).QRCode="QR_CODE",r.UPC_A="UPC_A",r.UPC_E="UPC_E",r.EAN8="EAN_8",r.EAN13="EAN_13",r.Code39="CODE_39",r.Code93="CODE_93",r.Code128="CODE_128",r.Codabar="CODABAR",r.ITF="ITF",r.Aztec="AZTEC",r.DataMatrix="DATA_MATRIX",r.PDF417="PDF_417",n.cancel=async function(){await e("plugin:barcode-scanner|cancel")},n.checkPermissions=async function(){return await async function(n){return e(`plugin:${n}|check_permissions`)}("barcode-scanner").then((n=>n.camera))},n.openAppSettings=async function(){await e("plugin:barcode-scanner|open_app_settings")},n.requestPermissions=async function(){return await async function(n){return e(`plugin:${n}|request_permissions`)}("barcode-scanner").then((n=>n.camera))},n.scan=async function(n){return await e("plugin:barcode-scanner|scan",{...n})},n}({});Object.defineProperty(window.__TAURI__,"barcodeScanner",{value:__TAURI_PLUGIN_BARCODE_SCANNER__})} +if("__TAURI__"in window){var __TAURI_PLUGIN_BARCODE_SCANNER__=function(n){"use strict";async function a(n,a={},e){return window.__TAURI_INTERNALS__.invoke(n,a,e)}var e;return"function"==typeof SuppressedError&&SuppressedError,n.Format=void 0,(e=n.Format||(n.Format={})).QRCode="QR_CODE",e.UPC_A="UPC_A",e.UPC_E="UPC_E",e.EAN8="EAN_8",e.EAN13="EAN_13",e.Code39="CODE_39",e.Code93="CODE_93",e.Code128="CODE_128",e.Codabar="CODABAR",e.ITF="ITF",e.Aztec="AZTEC",e.DataMatrix="DATA_MATRIX",e.PDF417="PDF_417",e.GS1DataBar="GS1_DATA_BAR",e.GS1DataBarLimited="GS1_DATA_BAR_LIMITED",e.GS1DataBarExpanded="GS1_DATA_BAR_EXPANDED",n.cancel=async function(){await a("plugin:barcode-scanner|cancel")},n.checkPermissions=async function(){return await async function(n){return a(`plugin:${n}|check_permissions`)}("barcode-scanner").then((n=>n.camera))},n.openAppSettings=async function(){await a("plugin:barcode-scanner|open_app_settings")},n.requestPermissions=async function(){return await async function(n){return a(`plugin:${n}|request_permissions`)}("barcode-scanner").then((n=>n.camera))},n.scan=async function(n){return await a("plugin:barcode-scanner|scan",{...n})},n}({});Object.defineProperty(window.__TAURI__,"barcodeScanner",{value:__TAURI_PLUGIN_BARCODE_SCANNER__})} diff --git a/plugins/barcode-scanner/guest-js/index.ts b/plugins/barcode-scanner/guest-js/index.ts index 2f2361be..9781b4ba 100644 --- a/plugins/barcode-scanner/guest-js/index.ts +++ b/plugins/barcode-scanner/guest-js/index.ts @@ -12,6 +12,9 @@ export type { PermissionState } from '@tauri-apps/api/core' export enum Format { QRCode = 'QR_CODE', + /** + * Not supported on iOS. + */ UPC_A = 'UPC_A', UPC_E = 'UPC_E', EAN8 = 'EAN_8', @@ -19,11 +22,26 @@ export enum Format { Code39 = 'CODE_39', Code93 = 'CODE_93', Code128 = 'CODE_128', + /** + * Not supported on iOS. + */ Codabar = 'CODABAR', ITF = 'ITF', Aztec = 'AZTEC', DataMatrix = 'DATA_MATRIX', - PDF417 = 'PDF_417' + PDF417 = 'PDF_417', + /** + * Not supported on Android. Requires iOS 15.4+ + */ + GS1DataBar = 'GS1_DATA_BAR', + /** + * Not supported on Android. Requires iOS 15.4+ + */ + GS1DataBarLimited = 'GS1_DATA_BAR_LIMITED', + /** + * Not supported on Android. Requires iOS 15.4+ + */ + GS1DataBarExpanded = 'GS1_DATA_BAR_EXPANDED' } export interface ScanOptions { diff --git a/plugins/barcode-scanner/ios/Sources/BarcodeScannerPlugin.swift b/plugins/barcode-scanner/ios/Sources/BarcodeScannerPlugin.swift index cde8d680..7271b7f6 100644 --- a/plugins/barcode-scanner/ios/Sources/BarcodeScannerPlugin.swift +++ b/plugins/barcode-scanner/ios/Sources/BarcodeScannerPlugin.swift @@ -27,8 +27,11 @@ enum SupportedFormat: String, CaseIterable, Decodable { case DATA_MATRIX case PDF_417 case QR_CODE + case GS1_DATA_BAR + case GS1_DATA_BAR_LIMITED + case GS1_DATA_BAR_EXPANDED - var value: AVMetadataObject.ObjectType { + var value: AVMetadataObject.ObjectType? { switch self { case .UPC_E: return AVMetadataObject.ObjectType.upce case .EAN_8: return AVMetadataObject.ObjectType.ean8 @@ -41,6 +44,24 @@ enum SupportedFormat: String, CaseIterable, Decodable { case .DATA_MATRIX: return AVMetadataObject.ObjectType.dataMatrix case .PDF_417: return AVMetadataObject.ObjectType.pdf417 case .QR_CODE: return AVMetadataObject.ObjectType.qr + case .GS1_DATA_BAR: + if #available(iOS 15.4, *) { + return AVMetadataObject.ObjectType.gs1DataBar + } else { + return nil + } + case .GS1_DATA_BAR_LIMITED: + if #available(iOS 15.4, *) { + return AVMetadataObject.ObjectType.gs1DataBarLimited + } else { + return nil + } + case .GS1_DATA_BAR_EXPANDED: + if #available(iOS 15.4, *) { + return AVMetadataObject.ObjectType.gs1DataBarExpanded + } else { + return nil + } } } } @@ -242,13 +263,20 @@ class BarcodeScannerPlugin: Plugin, AVCaptureMetadataOutputObjectsDelegate { scanFormats = [AVMetadataObject.ObjectType]() (args.formats ?? []).forEach { format in - scanFormats.append(format.value) + if let formatValue = format.value { + scanFormats.append(formatValue) + } else { + invoke.reject("Unsupported barcode format on this iOS version: \(format)") + return + } } - if scanFormats.count == 0 { - for supportedFormat in SupportedFormat.allCases { - scanFormats.append(supportedFormat.value) - } + if scanFormats.isEmpty { + for supportedFormat in SupportedFormat.allCases { + if let formatValue = supportedFormat.value { + scanFormats.append(formatValue) + } + } } self.metaOutput!.metadataObjectTypes = self.scanFormats diff --git a/plugins/barcode-scanner/ios/Sources/Utils.swift b/plugins/barcode-scanner/ios/Sources/Utils.swift index 1d0e6e4f..18daa280 100644 --- a/plugins/barcode-scanner/ios/Sources/Utils.swift +++ b/plugins/barcode-scanner/ios/Sources/Utils.swift @@ -52,6 +52,15 @@ func discoverCaptureDevices() -> [AVCaptureDevice] { } func formatStringFromMetadata(_ type: AVMetadataObject.ObjectType) -> String { + if #available(iOS 15.4, *) { + if type == .gs1DataBar { + return "GS1_DATA_BAR" + } else if type == .gs1DataBarLimited { + return "GS1_DATA_BAR_LIMITED" + } else if type == .gs1DataBarExpanded { + return "GS1_DATA_BAR_EXPANDED" + } + } switch type { case AVMetadataObject.ObjectType.upce: return "UPC_E"