Scandit SDK
Scandit v1.1.1
Scan barcodes, IDs and labels
From the developer
Listing not observed in the last 24 hours. Check collection status.
Declared capabilities
- Read
- Write
Not specified in the available declarations: limitations, pricing & account requirements.
Onboarding example
Help me choose the right Scandit product for my scanning use case.
Sources & dates
Developer declarations; not independently tested. Listing last checked Oct 1, 2026. Package observed Sep 30, 2026.
Description
From the marketplace listing
Install the Scandit SDK skills to teach Codex how to integrate Scandit's barcode scanning, ID capture, and smart label capture products correctly. Includes a product-selection advisor plus per-product, per-framework implementation and migration guides for iOS, Android, web, React Native, Flutter, Capacitor, Cordova, and .NET/MAUI.
Language: English · Automatically detected from descriptions.
Matches for “write code”
Exact text from the indicated source. A mention alone does not establish support for your task.
Publisher subtitle
Scan barcodes, IDs and labels
Publisher capabilities · listing
Read Write
Publisher keywords · listing
scandit barcode scanning barcode-scanning barcode-capture sparkscan matrixscan matrixscan-ar matrixscan-count matrixscan-batch label-capture smart-label-capture data-capture ios web react-native flutter capacitor cordova dotnet net net-android net-ios maui xamarin sdk smart-data-capture
Publisher description
AI agent skills for integrating the Scandit Data Capture SDK — product selection, documentation, and implementation guides for barcode scanning, ID capture, and smart label capture.
Publisher full description
Install the Scandit SDK skills to teach Codex how to integrate Scandit's barcode scanning, ID capture, and smart label capture products correctly. Includes a product-selection advisor plus per-product, per-framework implementation and migration guides for iOS, Android, web, React Native, Flutter, Capacitor, Cordova, and .NET/MAUI.
Changes
No changes recorded yet. Follow this plugin to keep track of future changes.
First seen Sep 30, 2026. Last seen Oct 1, 2026.
Similar plugins
Find competitors to follow as you develop your plugin.
-
Search PayU's official documentation, browse the payment integration catalog by platform and language, and fetch production-ready code sn...
Shared terms: android, cordova, documentation, flutter
-
Scan any public web page for 11 SEO fundamentals with a plain-language 'why it matters' and example fix for each issue, get a 10-step web...
Shared terms: scan, framework, web
-
Inspect and debug mobile apps with Ansight CLI: runtime evidence, live UI, app tools, and repeatable tests.
Shared terms: android, capacitor, capture, flutter
-
React Native migration skills for assessing native products and implementing incremental brownfield adoption.
Shared terms: android, ios, migration, native
-
Paste a Solidity or Anchor contract and get an instant security scan — reentrancy, access control, signer checks, unchecked math — with l...
Shared terms: scan, documentation, native, plus
Keywords
Files & skills
File archives
Skill instructions
barcode-capture-android5.7 KB
---
name: barcode-capture-android
description: Scandit Barcode Capture (`BarcodeCapture`) in native Android (Kotlin/Java) projects — the low-level, full-control single-barcode scanning mode (BarcodeCapture + DataCaptureView + overlay), without the pre-built SparkScan UI. Use for integration, symbology and scan settings, result handling, overlay customization, SDK version migration (v6→v7→v8), replacing third-party scanners (ZXing, ML Kit), or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# BarcodeCapture Android Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCapture API changes significantly between major SDK versions — properties get renamed, removed, or restructured.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Android-specific gotchas worth flagging:
- `Camera.getDefaultCamera(BarcodeCapture.createRecommendedCameraSettings())` passes the recommended camera settings directly into the `getDefaultCamera()` call — there is no separate `applySettings` call needed.
- `codeDuplicateFilter` is a `TimeInterval` — **not** an `Int` or `Double`. Use `TimeInterval.millis(500)` (import `com.scandit.datacapture.core.time.TimeInterval`). Writing `codeDuplicateFilter = 0.5` or `codeDuplicateFilter = 500` is a type error.
- The listener callback on Android is `onBarcodeScanned(barcodeCapture, session, data)` — not `didScan` (that is the Flutter/iOS name). You must also implement `onSessionUpdated`, `onObservationStarted`, and `onObservationStopped`. The `FrameData` parameter is named `data`, not `frameData`.
- `onBarcodeScanned` is called on a background thread. Any UI update must be dispatched via `runOnUiThread {}`.
- Call `barcodeCapture.isEnabled = false` at the top of `onBarcodeScanned` before doing any work to prevent duplicate or racing scans. Re-enable with `barcodeCapture.isEnabled = true` when the app is ready to scan again.
- Android symbology names use underscores: `Symbology.EAN13_UPCA`, `Symbology.CODE39`, `Symbology.INTERLEAVED_TWO_OF_FIVE` — not camelCase.
- Turn the camera off in `onPause()` and re-enable in `onResume()`. The camera must not be active while the app is backgrounded.
- Request the `CAMERA` permission at runtime before the first scan; the manifest declaration alone is not sufficient.
- `DataCaptureView.newInstance(this, dataCaptureContext)` creates the camera preview widget. In an Activity, pass it to `setContentView(dataCaptureView)`. In a Fragment, add it to the view hierarchy programmatically.
## Intent Routing
Based on the user's request, load the appropriate reference file before responding:
- **Integrating BarcodeCapture from scratch, configuring settings, customizing feedback, adding a viewfinder, handling scans, or doing async work after a scan** (e.g. "add BarcodeCapture to my app", "set up barcode scanning", "how do I use BarcodeCapture in Android", "filter duplicate scans", "suppress the beep", "add a viewfinder", "disable scanning while I look up the barcode") → read `references/integration.md` and follow the instructions there.
- **Migrating or upgrading an existing BarcodeCapture integration** (e.g. "upgrade from v6 to v7", "migrate my BarcodeCapture", "bump the Scandit SDK to v8", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there.
- **Replacing a third-party barcode scanner with BarcodeCapture** (e.g. "replace my ZXing scanner with BarcodeCapture", "migrate from ML Kit barcode scanning to Scandit", "switch from [library] to BarcodeCapture") → read `references/third-party-migration.md` and follow the instructions there.
## API Usage Policy
Only use APIs that are explicPreview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
barcode-capture-capacitor5.61 KB
--- name: barcode-capture-capacitor description: Capacitor — Scandit Barcode Capture (`BarcodeCapture`) in Capacitor (Ionic) hybrid apps via the Scandit Capacitor plugins (`ScanditCaptureCorePlugin`), the low-level, full-control single-barcode scanning mode (BarcodeCapture + DataCaptureView + BarcodeCaptureOverlay) without the pre-built SparkScan UI, not the browser-only web SDK. Use for integration, symbology settings, result handling, viewfinder and feedback customization, SDK version migration, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # BarcodeCapture Capacitor Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCapture API changes between major SDK versions — properties get renamed, removed, or restructured, and the Capacitor plugin surface (imports, plugin initialization, native sync steps) has also evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. Capacitor-specific gotchas worth flagging: - `ScanditCaptureCorePlugin.initializePlugins()` **must** be called (and awaited) before any other Scandit API — including `DataCaptureContext` construction. Forgetting this produces runtime errors that look unrelated to initialization. - `npx cap sync` must be run after every plugin version change to propagate native artifacts into iOS/Android. Skipping it yields a web/native version mismatch at runtime. - BarcodeCapture renders into a `DataCaptureView` that is connected to a DOM element via `view.connectToElement(...)`. The view itself is a native overlay, but the DOM container determines its size and position. A `BarcodeCaptureOverlay` must be created and added to the view to visualize recognized barcodes. - The camera is a separate component: `Camera.default` (or `Camera.withSettings(BarcodeCapture.createRecommendedCameraSettings())`), set via `context.setFrameSource(camera)`, then started via `camera.switchToDesiredState(FrameSourceState.On)`. - **Disable the mode while handling a scan**: the `didScan` callback blocks further frame processing on Capacitor. If you do any meaningful work (database lookup, navigation, network) inside `didScan`, set `barcodeCapture.isEnabled = false` first, perform the work, then re-enable. This is documented behavior on Capacitor specifically. - BarcodeCapture only renders on **native platforms** (iOS, Android). If your app also targets the web build of Capacitor, guard initialization with `Capacitor.isNativePlatform()`. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating BarcodeCapture from scratch** (e.g. "add BarcodeCapture to my app", "set up barcode scanning", "how do I use BarcodeCapture in Capacitor", "wire up the overlay", "handle the camera lifecycle") → read `references/integration.md` and follow the instructions there. - **Migrating or upgrading an existing BarcodeCapture integration** (e.g. "upgrade from v6 to v7", "migrate my BarcodeCapture", "bump the Scandit plugins to v8", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, property names, or imports. If unsure whether an API exists or how it is called — or if a TypeScript / runtime error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property'
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
barcode-capture-cordova5.61 KB
---
name: barcode-capture-cordova
description: Cordova — Scandit Barcode Capture (`BarcodeCapture`) in Apache Cordova hybrid apps via the `scandit-cordova-datacapture-*` plugins (global `window.Scandit`), the low-level, full-control single-barcode scanning mode (BarcodeCapture + DataCaptureView + BarcodeCaptureOverlay) without the pre-built SparkScan UI, not the browser-only web SDK. Use for integration, scan settings, result handling, overlay wiring, SDK version migration, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# BarcodeCapture Cordova Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCapture API changes significantly between major SDK versions — capture-mode factories get replaced with constructors, listener signatures shift, and the Cordova plugin surface (global `Scandit` namespace, plugin install commands, `deviceready` timing) has also evolved.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Cordova-specific gotchas worth flagging:
- The Scandit SDK is exposed on the global `window.Scandit` object. The npm package names (`scandit-cordova-datacapture-*`) are plugin manifests — they are **not** runtime ES modules. Do not emit `import { ... } from 'scandit-cordova-datacapture-*'` in user code that will run in the WebView; use `Scandit.X` (with an optional `global.d.ts` for typing) instead. Only Ionic/Angular/Webpack-bundled projects import from the packages directly.
- `document.addEventListener('deviceready', ...)` is the **only** safe gate for Scandit APIs. Do not run any Scandit call at module load time — it will fail because the Cordova bridge is not ready yet.
- After changing plugin versions, run `cordova prepare` (and reinstall the platform if needed) to propagate the new native artifacts. Skipping this yields a runtime version mismatch.
- `BarcodeCapture` requires a visible **DataCaptureView** to render the camera preview. Unlike SparkScan, there is no native overlay — the `DataCaptureView` is mounted into an HTML element via `view.connectToElement(...)`, and the `BarcodeCaptureOverlay` is added on top of that view to draw recognized barcodes. Forgetting either step is the most common reason "scanning works but I see nothing".
- Inside the `didScan` callback, disable the mode (`barcodeCapture.isEnabled = false`) before doing any UI work that takes more than a frame — the listener blocks frame processing while it runs, so long-running work there freezes the camera and may cause duplicate scans.
## Intent Routing
Based on the user's request, load the appropriate reference file before responding:
- **Integrating BarcodeCapture from scratch** (e.g. "add BarcodeCapture to my app", "set up barcode scanning", "how do I use BarcodeCapture in Cordova", "how do I render the camera preview") → read `references/integration.md` and follow the instructions there.
- **Migrating or upgrading an existing BarcodeCapture integration** (e.g. "upgrade from v6 to v7", "migrate my BarcodeCapture", "bump the Scandit plugins to v8", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there.
## API Usage Policy
Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, property names, or imports. If unsure whether an API exists or how it is called — or if a runtime error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further.
**Never construct or guess documentation URLs.** When you need a specific class orPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
barcode-capture-flutter6.38 KB
--- name: barcode-capture-flutter description: Scandit Barcode Capture (`BarcodeCapture`) in Flutter (Dart) projects — the low-level, full-control single-barcode scanning mode (BarcodeCapture + DataCaptureView + BarcodeCaptureOverlay), without the pre-built SparkScan UI. Use for integration, scan settings, result handling, overlay customization, SDK version migration, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # BarcodeCapture Flutter Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCapture API changes significantly between major SDK versions — properties get renamed, removed, or restructured, and the Flutter plugin surface (imports, plugin initialization, pub packages) has also evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. Flutter-specific gotchas worth flagging: - `await ScanditFlutterDataCaptureBarcode.initialize()` **must** be called (and awaited) in `main()` before `runApp(...)`, after `WidgetsFlutterBinding.ensureInitialized()`. Forgetting this yields a platform-channel error that can look unrelated to initialization. - A single `DataCaptureContext` must own the `BarcodeCapture` mode and the `DataCaptureView`. Do not construct multiple contexts per page or per `MaterialApp`; the BLoC / controller that holds the context should outlive any single `State`. - The `DataCaptureView` is a Flutter `Widget` returned from `DataCaptureView.forContext(context)` — you must explicitly add the `BarcodeCaptureOverlay` to it via `view.addOverlay(...)`. Unlike SparkScan, there is no pre-built scanning UI; the overlay is the only thing that visualizes recognized barcodes on the camera preview. - `BarcodeCaptureListener.didScan(...)` blocks the recognition pipeline until it returns. Disable the mode (`barcodeCapture.isEnabled = false`) before doing any meaningful work in the callback, and re-enable it (or stop the camera) when finished — otherwise duplicate / unwanted scan events will fire. - The `getFrameData` parameter on the Flutter listener is a `Future<FrameData?> Function()` — frame data is fetched lazily. Only invoke it if you actually need the frame data, since it crosses the platform channel. - `flutter pub get` must be run after every package version change. On iOS, the Podfile resolves transitively — no manual pod install needed unless the user has a custom setup. - Camera permission is required on both iOS (`NSCameraUsageDescription` in `ios/Runner/Info.plist`) and Android (runtime request via `permission_handler` — the plugin declares the manifest permission automatically). - Hot-reload does not re-run `main()`, so the camera lifecycle (and the `ScanditFlutterDataCaptureBarcode.initialize()` call) survive a hot reload. A full restart is needed to re-trigger plugin init. Drive `camera.switchToDesiredState(...)` from `WidgetsBindingObserver.didChangeAppLifecycleState` so the camera turns off in `paused` and back on in `resumed`. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating BarcodeCapture from scratch** (e.g. "add BarcodeCapture to my app", "set up barcode scanning", "how do I use BarcodeCapture in Flutter", "how do I handle the camera in BarcodeCapture") → read `references/integration.md` and follow the instructions there. - **Migrating or upgrading an existing BarcodeCapture integration** (e.g. "upgrade from v6 to v7", "migrate my BarcodeCapture", "bump the Scandit packages to v8", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
barcode-capture-ios3.89 KB
--- name: barcode-capture-ios description: Scandit Barcode Capture (`BarcodeCapture`) in native iOS (Swift) projects — the low-level, full-control single-barcode scanning mode (BarcodeCapture + DataCaptureView + overlay), without the pre-built SparkScan UI. Use for integration, scan settings, result handling, overlay customization, SDK version migration (v6→v7→v8), replacing a third-party barcode scanner, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # BarcodeCapture iOS Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCapture API changes between major SDK versions — properties get renamed, removed, or restructured. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating BarcodeCapture from scratch, configuring settings, customizing feedback, adding a viewfinder, handling scans, or doing async work after a scan** (e.g. "add BarcodeCapture to my app", "set up barcode scanning", "how do I use BarcodeCapture in iOS", "filter duplicate scans", "suppress the beep", "add a viewfinder", "disable scanning while I look up the barcode") → read `references/integration.md` and follow the instructions there. - **Migrating or upgrading an existing BarcodeCapture integration** (e.g. "upgrade from v6 to v7", "migrate my BarcodeCapture", "bump the Scandit SDK to v8", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there. - **Replacing a third-party barcode scanner with BarcodeCapture** (e.g. "replace my [scanner] with BarcodeCapture", "migrate from [framework] to BarcodeCapture", "switch from [library] barcode scanning to BarcodeCapture") → read `references/third-party-migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, or property names. If unsure whether an API exists or how it is called — or if a compile error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in your fetch prompt. 2. If no direct link was found, fetch the API index (see **Full API reference** in the table below), extract the actual link from it, and follow that. URL structures can vary (e.g. `api/ui/` subdirectory) and guessing will lead to 404s. ## References Direct users to the right resource based on their question: | Topic | Resource | |---|---| | UIKit integration | [Get Started (UIKit)](https://docs.scandit.com/sdks/ios/barcode-capture/get-started/) · [Sample](https://github.com/Scandit/datacapture-ios-samples/tree/master/01_Single_Scanning_Samples/02_Barcode_Scanning_with_Low_Level_API/BarcodeCaptureSimpleSampleSwift) | | SwiftUI integration | [Get Started (SwiftUI)](https://docs.scandit.com/sdks/ios/barcode-capture/get-started-with-swift-ui/) | | Migration between major SDK versions | [6 → 7](https://docs.scandit.com/sdks/ios/migrate-6-to-7/) · [7 → 8](https://docs.scandit.com/sdks/ios/migrate-7-to-8/) | | Full API reference | [BarcodeCapture API](https://docs.scandit.com/data-capture-sdk/ios/barcode-capture/api.html) |
Referenced files: 3 — file references are metadata, not package contents.
barcode-capture-net-android12.3 KB
---
name: barcode-capture-net-android
description: Scandit BarcodeCapture in .NET for Android projects (`net*-android` target framework, `Scandit.DataCapture.Barcode` NuGet, non-MAUI — for MAUI apps use barcode-capture-net-maui) — the low-level, full-control barcode scanning mode without the pre-built SparkScan UI. Use for integration, scan settings, listener and event wiring, overlay customization, camera lifecycle, SDK version migration (v6→v7→v8), replacing ZXing.Net or ML Kit bindings, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# BarcodeCapture .NET for Android Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCapture API changes significantly between major SDK versions — properties get renamed, removed, or restructured. The .NET binding also uses **different naming conventions** than the Kotlin/Java native SDK (PascalCase, `Create(...)` factories instead of `forDataCaptureContext`, `Enabled` instead of `isEnabled`, etc.).
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
.NET-Android-specific gotchas worth flagging:
- This skill targets the **non-MAUI** .NET for Android workload (project `<TargetFramework>net10.0-android</TargetFramework>`, no `<UseMaui>` flag). For MAUI apps, use the `barcode-capture-net-maui` skill instead.
- The .NET API uses **PascalCase factories**, not the Kotlin `forDataCaptureContext` / `newInstance` names. Use `BarcodeCapture.Create(context, settings)`, `BarcodeCaptureSettings.Create()`, `BarcodeCaptureOverlay.Create(barcodeCapture, dataCaptureView)`, `DataCaptureView.Create(dataCaptureContext)`.
- Symbology names are C# PascalCase: `Symbology.Ean13Upca`, `Symbology.Ean8`, `Symbology.Code128`, `Symbology.InterleavedTwoOfFive`, `Symbology.Qr`, `Symbology.DataMatrix`. They are **not** the Kotlin underscore style (`EAN13_UPCA`, `INTERLEAVED_TWO_OF_FIVE`).
- The capture mode's enabled property is `barcodeCapture.Enabled` (not `IsEnabled`). The `IDataCaptureMode` interface in the .NET binding exposes `Enabled`.
- `CodeDuplicateFilter` is `TimeSpan` — **not** `TimeInterval` (that is the Kotlin/Java type). Use `CodeDuplicate.DefaultDuplicateFilter`, `CodeDuplicate.ReportDataAndSymbologyOnlyOnce`, `TimeSpan.FromMilliseconds(500)`, `TimeSpan.FromSeconds(2.5)`, or `TimeSpan.Zero`. Writing `CodeDuplicateFilter = 500` is a type error.
- `BarcodeCapture.RecommendedCameraSettings` is a **static property**, not a method. The canonical pattern (used in the official .NET Android sample) is `camera = Camera.GetDefaultCamera(); camera.ApplySettingsAsync(BarcodeCapture.RecommendedCameraSettings);`. A `Camera.GetDefaultCamera(CameraSettings?)` overload also exists in the .NET binding (it calls `ApplySettingsAsync` internally) but the samples use the explicit two-line form — prefer it for clarity.
- `IBarcodeCaptureListener` callbacks are C#-named: `OnBarcodeScanned`, `OnSessionUpdated`, `OnObservationStarted`, `OnObservationStopped`. The `IFrameData` parameter is named `frameData`.
- The .NET binding also exposes a C# **event-based** API on `BarcodeCapture`: `BarcodeScanned` and `SessionUpdated` (both `EventHandler<BarcodeCaptureEventArgs>`). Use either the listener interface *or* the events — do not register the same handler through both paths.
- `OnBarcodeScanned` is invoked off the UI thread. Any UI update must be dispatched via `RunOnUiThread(() => { … })`.
- Call `barcodeCapture.Enabled = false` at the top of `OnBarcodeScanned` before doing any work to prevent duplicate or racing scans. Re-enable with `barcodeCapture.Enabled = true` when the app is ready to scan again.
- Turn the camera off in `OnPause()` and re-enable in `OnResume()` via `caPreview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
barcode-capture-net-ios9.99 KB
--- name: barcode-capture-net-ios description: Scandit BarcodeCapture in .NET for iOS projects (`net*-ios` target framework, `Scandit.DataCapture.Barcode` NuGet, non-MAUI — for MAUI apps use barcode-capture-net-maui) — the low-level, full-control barcode scanning mode without the pre-built SparkScan UI. Use for integration, scan settings, listener and event wiring, overlay customization, camera lifecycle, SDK version migration (v6→v7→v8), replacing ZXing.Net.Mobile or AVFoundation scanners, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # BarcodeCapture .NET for iOS Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCapture API changes significantly between major SDK versions — properties get renamed, removed, or restructured. The .NET binding also uses **different naming conventions** than the native Swift SDK (PascalCase, `Create(...)` factories instead of `init(context:settings:)`, `Enabled` instead of `isEnabled`, etc.). **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. .NET-iOS-specific gotchas worth flagging: - This skill targets the **non-MAUI** .NET for iOS workload (project `<TargetFramework>net10.0-ios</TargetFramework>`, no `<UseMaui>` flag). For MAUI apps, use the `barcode-capture-net-maui` skill instead. - The .NET API uses **PascalCase factories**, not the Swift `BarcodeCapture(context:settings:)` initializer. Use `BarcodeCapture.Create(context, settings)`, `BarcodeCaptureSettings.Create()`, `BarcodeCaptureOverlay.Create(barcodeCapture, dataCaptureView)`, `DataCaptureView.Create(dataCaptureContext, frame)`. - Symbology names are C# PascalCase: `Symbology.Ean13Upca`, `Symbology.Ean8`, `Symbology.Code128`, `Symbology.InterleavedTwoOfFive`, `Symbology.Qr`, `Symbology.DataMatrix`. They are **not** Swift's `.ean13UPCA` style. - The capture mode's enabled property is `barcodeCapture.Enabled` (not `IsEnabled` and not Swift's `isEnabled`). - `CodeDuplicateFilter` is `TimeSpan` — **not** Swift's `TimeInterval`. Use `CodeDuplicate.DefaultDuplicateFilter`, `CodeDuplicate.ReportDataAndSymbologyOnlyOnce`, `TimeSpan.FromMilliseconds(500)`, `TimeSpan.FromSeconds(2.5)`, or `TimeSpan.Zero`. Writing `CodeDuplicateFilter = 0.5` (as a double) is a type error. - `BarcodeCapture.RecommendedCameraSettings` is a **static property**, not a method. The canonical pattern (used in the official .NET iOS sample) is `camera = Camera.GetDefaultCamera(); camera.ApplySettingsAsync(BarcodeCapture.RecommendedCameraSettings);`. A `Camera.GetDefaultCamera(CameraSettings?)` overload also exists in the .NET binding (it calls `ApplySettingsAsync` internally) but the samples use the explicit two-line form — prefer it for clarity. - `IBarcodeCaptureListener` callbacks are C#-named: `OnBarcodeScanned`, `OnSessionUpdated`, `OnObservationStarted`, `OnObservationStopped`. The `IFrameData` parameter is named `frameData`. - The .NET binding also exposes a C# **event-based** API on `BarcodeCapture`: `BarcodeScanned` and `SessionUpdated` (both `EventHandler<BarcodeCaptureEventArgs>`). Use either the listener interface *or* the events — do not register the same handler through both paths. - `OnBarcodeScanned` is invoked off the UI thread. Any UI update must be dispatched via `DispatchQueue.MainQueue.DispatchAsync(...)`. - **Always call `frameData.Dispose()`** at the end of `OnBarcodeScanned` and `OnSessionUpdated`. The official iOS sample explicitly disposes the frame to avoid a "frozen, non-responsive, or severely stuttering" video feed. This is not optional on iOS. - Call `barcodeCapture.Enabled = false` at the top of `OnBarcodeScanned` before doing any work to prevent duplicate or racing scans. R
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
barcode-capture-net-maui13.7 KB
---
name: barcode-capture-net-maui
description: Scandit BarcodeCapture in .NET MAUI projects (`<UseMaui>true</UseMaui>`, `Scandit.DataCapture.Barcode.Maui` NuGet) — the low-level, full-control barcode scanning mode with your own `<scandit:DataCaptureView>` XAML control and overlay in a MAUI page, without the pre-built SparkScan UI (for that use sparkscan-net-maui); for non-MAUI .NET use barcode-capture-net-android or barcode-capture-net-ios. Use for integration, scan settings, result handling, lifecycle wiring, SDK version migration (v6→v7→v8), replacing ZXing.Net.Maui, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# BarcodeCapture .NET MAUI Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCapture API changes significantly between major SDK versions — properties get renamed, removed, or restructured. The .NET MAUI binding adds platform-specific lifecycle and handler concerns on top of the regular .NET API, so patterns from the standalone `barcode-capture-net-android` / `barcode-capture-net-ios` skills do not always apply.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
MAUI-specific gotchas worth flagging:
- This skill targets MAUI apps with `<UseMaui>true</UseMaui>`. For non-MAUI .NET projects, use `barcode-capture-net-android` or `barcode-capture-net-ios` instead.
- **Fetch the SDK version from NuGet before editing the `.csproj`.** WebFetch `https://www.nuget.org/packages/Scandit.DataCapture.Barcode.Maui/` and read the latest **stable** version off the page (skip `-beta.*` / `-preview.*` / `-rc.*` suffixes). Do not guess — versions from training data are stale and `dotnet restore` will fail with `NU1103` if the pinned version isn't published. Use the same version for all four packages.
- **Android `SupportedOSPlatformVersion` must be ≥ `24`.** The MAUI template defaults to `21`, which is below Scandit's Android AAR minimum and fails the build with `uses-sdk:minSdkVersion 21 cannot be smaller than version 24 declared in library`. Bump the `.csproj` value to `24.0` (or higher) as part of the integration.
- Required NuGet packages: `Scandit.DataCapture.Core`, `Scandit.DataCapture.Core.Maui`, `Scandit.DataCapture.Barcode`, `Scandit.DataCapture.Barcode.Maui`. All four are needed — Core/Barcode provide the platform bindings, Core.Maui/Barcode.Maui provide the MAUI builder extensions and handlers.
- `MauiProgram.cs` builder chain is **specific** and the order matters:
```csharp
builder
.UseMauiApp<App>()
.UseScanditCore(configure => configure.AddDataCaptureView())
.UseScanditBarcode();
```
`UseScanditBarcode()` takes **no inner configure** — there is no MAUI handler for BarcodeCapture itself, the call exists only to invoke `ScanditBarcodeCapture.Initialize()`. Do **not** write `UseScanditBarcode(configure => configure.AddBarcodeCaptureView())` — that method does not exist.
- `BarcodeCapture` does **not** have a pre-built MAUI view (unlike `BarcodeArView`, `BarcodeCountView`, `BarcodeFindView`, `BarcodePickView`, `SparkScanView`). The MAUI integration uses the generic `<scandit:DataCaptureView>` from `Scandit.DataCapture.Core.UI.Maui` and a `BarcodeCaptureOverlay` is added on top.
- XAML namespace for `DataCaptureView` is `xmlns:scandit="clr-namespace:Scandit.DataCapture.Core.UI.Maui;assembly=ScanditCaptureCoreMaui"`. **`DataCaptureContext="{Binding DataCaptureContext}"` is mandatory on the `<scandit:DataCaptureView>` element** — without it the preview renders as a **black/blank camera** at runtime even though the code-behind compiles and the camera is started. Setting `x:Name="dataCaptureView"` is not enough; the bindable property is whPreview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
barcode-capture-rn6.27 KB
--- name: barcode-capture-rn description: Scandit Barcode Capture (`BarcodeCapture`) in React Native projects — the low-level, full-control single-barcode scanning mode (BarcodeCapture + DataCaptureView + BarcodeCaptureOverlay), without the pre-built SparkScan UI. Use for integration, symbology configuration, result handling, viewfinder and feedback customization, SDK version migration, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # BarcodeCapture React Native Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCapture API changes between major SDK versions — properties get renamed, removed, or restructured, and the React Native plugin surface (imports, native linking, pod install, package names) has also evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. React Native-specific gotchas worth flagging: - `DataCaptureContext.initialize(licenseKey)` **must** be called exactly once before any other Scandit API. It sets up `DataCaptureContext.sharedInstance`, which is the singleton everything else reads from. Do not construct multiple contexts. - **Never call `dataCaptureContext.dispose()`.** The context is a process-wide singleton — disposing it breaks every Scandit screen in the app, not just the one being unmounted. On screen unmount call `dataCaptureContext.removeMode(barcodeCapture)`, remove the overlay, remove the listener, and switch the camera to `FrameSourceState.Off`. That is the complete cleanup; do not add `dispose()`. - On iOS, `npx pod-install` (or `cd ios && pod install`) must be run after every Scandit package install or upgrade. Android auto-links via Gradle — no manual step there. - Metro's bundler cache frequently masks Scandit package upgrades. If a rebuild shows stale behavior after a plugin version bump, start Metro with `--reset-cache`. - BarcodeCapture is **not** a self-contained view component. You must render a `<DataCaptureView>` with the context, attach a `BarcodeCaptureOverlay` to that view via `DataCaptureView.addOverlay(...)`, and drive the camera yourself with `Camera.default` + `dataCaptureContext.setFrameSource(camera)` + `camera.switchToDesiredState(FrameSourceState.On)`. Tearing all of that down on unmount is the integrator's responsibility. - Inside `didScan`, set `barcodeCapture.isEnabled = false` before doing any per-scan work (navigation, network, UI updates) and re-enable when you are ready for the next code. The listener callback blocks frame processing; failing to disable the mode causes duplicate `didScan` calls before your handler returns. - Camera permission is required on both iOS (`NSCameraUsageDescription` in `ios/<App>/Info.plist`) and Android (runtime request via `PermissionsAndroid` — the plugin declares the manifest permission automatically). ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating BarcodeCapture from scratch** (e.g. "add BarcodeCapture to my app", "set up barcode scanning", "how do I use BarcodeCapture in React Native", "how do I add a viewfinder") → read `references/integration.md` and follow the instructions there. - **Migrating or upgrading an existing BarcodeCapture integration** (e.g. "upgrade from v6 to v7", "migrate my BarcodeCapture", "bump the Scandit packages to v8", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, property names, or imports. If unsure whether an API exists or how it is called — or
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
barcode-capture-web5.02 KB
--- name: barcode-capture-web description: Scandit Barcode Capture (`BarcodeCapture`) in web/browser (TypeScript/JavaScript) projects — the low-level, full-control single-barcode scanning mode (BarcodeCapture + DataCaptureView + overlay), without the pre-built SparkScan UI; not the Cordova or Capacitor hybrid plugins. Use for integration, scan settings, result handling, overlay and viewfinder customization, Scandit Web SDK version migration (v6→v7→v8), or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # BarcodeCapture Web Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCapture Web API changes significantly between major SDK versions — methods get renamed, async patterns change, and the context initialization was redesigned in v8. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, async patterns, or import paths. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. Web-specific gotchas worth flagging: - `DataCaptureContext.forLicenseKey()` must be `await`ed — it is async and sets `DataCaptureContext.sharedInstance`. Do not capture its return value; use `DataCaptureContext.sharedInstance` throughout. - `BarcodeCapture.forContext(context, settings)` is async — always `await` it. - `DataCaptureView.forContext(context)` is async — always `await` it. - `BarcodeCaptureOverlay.withBarcodeCaptureForView(barcodeCapture, view)` is async — always `await` it. - `barcodeCapture.setEnabled(false/true)` is async — `await` it before doing work in `didScan` to prevent duplicate scans. - The listener callback is `didScan` — **not** `onBarcodeScanned` (that is the Android name). - `codeDuplicateFilter` is a **number in milliseconds** on web (e.g. `500`) — not a `TimeInterval` object like Android. - `BarcodeCapture.recommendedCameraSettings` is a **static property**, not a method call. - The DOM element passed to `view.connectToElement()` must have defined dimensions and positioning — a zero-sized or unpositioned element will not render the camera preview. - Camera is managed manually: call `context.frameSource.switchToDesiredState(FrameSourceState.On)` to start and `FrameSourceState.Off` to stop. The camera does not stop automatically. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating BarcodeCapture from scratch, configuring settings, customizing feedback or overlay, adding a viewfinder, handling scans, or doing async work after a scan** (e.g. "add BarcodeCapture to my app", "set up barcode scanning", "how do I use BarcodeCapture in web", "filter duplicate scans", "suppress the beep", "add a viewfinder", "disable scanning while I look up the barcode") → read `references/integration.md` and follow the instructions there. - **Migrating or upgrading an existing BarcodeCapture integration** (e.g. "upgrade from v6 to v7", "migrate my BarcodeCapture", "bump the Scandit SDK to v8", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, or property names. If unsure whether an API exists or how it is called — or if a compile error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in y
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
data-capture-sdk22.9 KB
--- name: data-capture-sdk description: Use when a user mentions Scandit, data capture SDK, barcode scanning products, smart data capture, choosing a scanning product, comparing scanning features, supported barcode symbologies, system requirements, device compatibility, or Scandit pricing. Helps choose the right Scandit product (SparkScan, Barcode Capture, MatrixScan, Smart Label Capture, ID Capture, etc.), points to the correct documentation and sample apps for their platform, and hands off to implementation skills. license: Apache-2.0 metadata: author: scandit version: "1.2.0" --- # Scandit Data Capture SDK You are an expert on the Scandit Data Capture SDK. Your role is to help users choose the right Scandit product for their use case, point them to the correct documentation and sample apps for their platform, and hand off to implementation skills when available. ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated product names, discontinued features, or incorrect capabilities for Scandit products. The Scandit product lineup changes across SDK versions — products get renamed, merged, or deprecated. **Always base your recommendations on the product catalog and decision guide provided in this skill's references.** Do not rely on memorized product descriptions. If you cannot find information in the provided references to support a claim, state that explicitly rather than guessing. ### Phantom products — never recommend these The model frequently invents these names from training data. They are **not** current Scandit products and must never appear in recommendations, fallbacks, or alternatives: - **"Text Capture"** — does not exist. Smart Label Capture is the only Scandit product with OCR. Even when the user lacks an SLC license, do not suggest "Text Capture" as a fallback. The only legitimate fallback when *every* field is encoded in a barcode is **MatrixScan Batch**, and you must explicitly state that the developer is responsible for correlating reads across frames (no schema, no single-frame multi-field guarantee). - **"BarcodeTracking"** standalone — superseded by MatrixScan Batch / BarcodeBatch in SDK v7+. Refer to it only when explaining renames. If you would otherwise mention these names, stop and re-read `references/product-catalog.md`. ### Smart Label Capture — known limits to surface proactively When recommending Smart Label Capture, always check the limits in `references/product-catalog.md` before answering: - **Character set is Latin-only** for OCR. Non-Latin scripts (Japanese, Chinese, Korean, Cyrillic, Arabic, Hebrew, Thai, Devanagari, etc.) and accented Latin characters are **not** recognized by the OCR engine. Barcodes on the same label (JAN/EAN/QR/etc.) are still readable regardless of the printed script — call this out so the user understands what they can and cannot extract. - **Pre-built fields and labels** exist for the most common use cases (IMEI, serial number, expiry date, unit/total price, weight, VIN, 7-segment displays, receipts, price labels). When the user's description matches a pre-built definition, name it directly instead of describing a custom schema. The catalog in `references/product-catalog.md` lists them with use-case mapping. ## Intent Routing When a user asks for help choosing a Scandit product, load both reference files before responding: - Read `references/product-catalog.md` for product knowledge. - Read `references/decision-guide.md` and follow its qualification flow. ## Behavioral Rules 1. **Never write code.** This skill is advisory only. Once a product and platform are chosen, hand off to an implementation skill or provide documentation and sample links. 2. **Qualify when ambiguous, recommend when clear.** Do not jump to a product recommendation from a vague request — ask the user to describe their workflow first. But when the user has already described a specific workflow that clearly maps to a product in the decision guide (e.
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
id-bolt16.1 KB
---
name: id-bolt
description: Scandit ID Bolt in web projects (`@scandit/web-id-bolt`) — the hosted, drop-in identity-document scanning pop-up (passports, driver's licenses, ID cards) with built-in handover to the user's phone, for adding ID scanning to a website with minimal code and no camera UI to build. Use for integration (IdBoltSession), document selection, validators, returned-data and anonymization options, theming and workflow customization, or troubleshooting. A different product from ID Capture — for in-page fully-customizable scanning embedded in your own UI use id-capture-web.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# ID Bolt (Web) Skill
## What ID Bolt is — and what it is NOT
ID Bolt is a **hosted, drop-in** identity-scanning product. You call `IdBoltSession.create(...)` and `start()`, and Scandit opens its **own scanning UI in a pop-up** (`https://app.id-scanning.com`). Scandit hosts the camera, the viewfinder, the scanning logic, the result screen, and the engine files. Your code only **configures** the session and **receives the result** in a callback — you don't build a UI/camera workflow at all.
It also supports **device handover**: when the current device has no camera or a poor one (e.g. a desktop), ID Bolt can show a QR code so the user finishes the scan on another device such as their phone, and the result still flows back to your `onCompletion` callback on the original page. This is built into the hosted flow, not something you wire up.
This makes ID Bolt the fastest way to add ID scanning to a website, but it also means almost everything you might know about the **ID Capture** Web SDK does **not apply**. ID Bolt is a thin wrapper _around_ ID Capture; it is not ID Capture.
| | **ID Bolt** (`@scandit/web-id-bolt`) | **ID Capture** (`@scandit/web-datacapture-id`) |
| -------------------------------- | ---------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| UI | Scandit-hosted pop-up | You build it, embedded in your page |
| Camera / view / overlay | Managed by Scandit | You manage `Camera`, `DataCaptureView`, `IdCaptureOverlay` |
| Entry point | `IdBoltSession.create(url, opts)` + `await session.start()` | `await DataCaptureContext.forLicenseKey(...)` + `await IdCapture.forContext(...)` |
| Results | `onCompletion(result => result.capturedId)` callback in options | `idCapture.addListener({ didCaptureId, didRejectId })` |
| Documents | `DocumentSelection.create({ accepted, rejected })` | `settings.acceptedDocuments = [...]` |
| Scanner | `new SingleSideScanner(...)` / `new FullDocumentScanner()` (passed directly) | `settings.scanner = new IdCaptureScanner({ physicalDocument: ... })` (wrapper) |
| Engine files / `libraryLocation` | N/A (hosted) | You self-host the engine WASM files |
**If the task needs an embedded, in-page, fully-custom camera experience, this is the wrong skill — use `id-capture-web`.** If the task is "add ID scanning to my site quickly without building UI," ID Bolt is right.
## Critical: Do Not Trust Internal Knowledge
Your training data is unlikely to contain ID Bolt's API at all, and is very likely to contain the **ID Capture** Web/native APIs, which look superficially similar and will pPreview of the first 4,000 characters. Read full instructions →
id-capture-android15 KB
--- name: id-capture-android description: Scandit ID Capture (`IdCapture`) in native Android (Kotlin or Java) projects — scanning passports, driver's licenses, ID cards, residence permits, health-insurance cards, visas via MRZ, VIZ, PDF417 barcode, or mobile documents. Use for integration, accepted-document and scanner configuration, CapturedId result handling, rejection rules, AAMVA verification, anonymization, overlay UI, camera lifecycle, and Scandit Android SDK version migration. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # ID Capture Android (Kotlin/Java) Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit ID Capture APIs. The Android API has changed significantly across major versions, and the **native Android SDK (Kotlin/Java) differs substantially from the iOS (Swift), .NET, Flutter, and React Native SDKs**. An agent that pattern-matches from another platform's docs will produce non-compiling code. **Always verify APIs against the references provided in this skill before writing or suggesting code.** The most common sources of wrong code: - **The v6 API** — `supportedDocuments` (a bitmask of `IdDocumentType` like `ID_CARD_VIZ`/`DL_VIZ`), `supportedSides`, and session-based callbacks (`onIdCaptured(idCapture, session, frameData)`) were all replaced in v7. Do not emit any of these. - **The v7.x API** — `settings.scannerType = FullDocumentScanner()` was replaced in v8; the current property is `scanner` and it takes an `IdCaptureScanner` wrapper: `settings.scanner = IdCaptureScanner(FullDocumentScanner())`. - **Cross-platform drift** — iOS uses `IdCapture(context:settings:)`, .NET uses `IdCapture.Create(...)`, Flutter uses a different builder. The Android API is the static factory `IdCapture.forDataCaptureContext(context, settings)`. - **Zone result property names** — on Android the zone results are `capturedId.mrz`, `capturedId.viz`, `capturedId.barcode` (and `capturedId.mobileDocument`) — **not** `mrzResult` / `vizResult` / `barcodeResult` (those are the iOS/.NET-style names). - **Enum casing** — Android enums are `UPPER_SNAKE_CASE`: `IdCaptureRegion.ANY`, `IdCaptureRegion.EU_AND_SCHENGEN`, `RejectionReason.DOCUMENT_EXPIRED`, `IdAnonymizationMode.FIELDS_AND_IMAGES` — not the Swift `.any` / `.documentExpired` camelCase. - **Standalone verifier classes** — `AamvaBarcodeVerifier` / `DataConsistencyVerifier` are not used here. Verification is settings-driven: set `rejectForgedAamvaBarcodes = true` / `rejectInconsistentData = true` and read `capturedId.verificationResult`. - **Image opt-in** — Android uses `settings.setShouldPassImageTypeToResult(IdImageType.FACE, true)` — not the iOS `setIncludeImage(_:for:)`. - **NFC** — NFC chip reading exists on native Android but is **not covered by this skill**. If the user asks about NFC, refer them to the official documentation. ### Forbidden APIs (commonly hallucinated — do NOT emit these) | Do NOT write | Use instead | |---|--------------------------------------------------------------------------------------------------------------| | `IdCapture(context, settings)` (iOS) / `IdCapture.Create(...)` (.NET) / `new IdCapture(...)` | `IdCapture.forDataCaptureContext(context, settings)` | | `settings.supportedDocuments = [...]` / `IdDocumentType` bitmask | `settings.acceptedDocuments = listOf(IdCard(IdCaptureRegion.ANY), ...)` | | `settings.supportedSides = ...` | `settings.scanner = IdCaptureScanner(SingleSideScanner(...))` | | `settings.scannerType = FullDocumentScanner()` (v7 API) | `settings.scanner = IdCaptureScanner(FullDocumentScanner())` | | `settings.setIncludeImage(true, ...)` (iOS) | `settings.setShouldPa
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
id-capture-capacitor12.8 KB
---
name: id-capture-capacitor
description: Scandit ID Capture (`IdCapture`) in Capacitor projects — scanning passports, driver's licenses, ID cards, residence permits, visas via MRZ, VIZ, barcode, or mobile documents. Use for integration, accepted-document and scanner configuration, captured-field result handling, anonymization, add-on capabilities (voided-ID detection, European driving-license back decoding, AAMVA barcode verification), and SDK version migration.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# ID Capture Capacitor Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit ID Capture APIs. The ID Capture API was **restructured at the v7 → v8 boundary** (the `scannerType` property was renamed to `scanner` and reshaped into a wrapper, the standalone `AamvaBarcodeVerifier` was removed in favour of settings flags, and several verification APIs were added). The Capacitor plugin surface (package names, the imperative `DataCaptureView` + `connectToElement` pattern, explicit `initializePlugins()` startup) is also distinct from the iOS, Android, web, Flutter, React Native, and Cordova SDKs.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, package names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Capacitor-specific gotchas worth flagging:
- **Explicit plugin initialization is required.** Capacitor does not auto-init — call `await ScanditCaptureCorePlugin.initializePlugins()` once at app startup, **before** creating the `DataCaptureContext` or anything else. Skipping it leaves the native bridge un-wired and produces opaque "plugin not implemented" errors.
- **The view is an imperative class connected to a `<div>`, not a custom element.** There is no `<data-capture-view>` HTML tag and no React/Vue/Angular component shipped by Scandit. Create the view with `DataCaptureView.forContext(context)` and attach it to a plain `<div id="...">` via `view.connectToElement(divElement)`. Detach with `view.detachFromElement()` when navigating away.
- **`DataCaptureContext.initialize(licenseKey)` returns the context.** Capture the return value: `const context = DataCaptureContext.initialize('<key>');`. There's no `sharedInstance` pattern in the sample — keep a reference to the returned context.
- **Camera is constructed with `Camera.withSettings(...)`, not `Camera.default + applySettings`.** Use `Camera.withSettings(IdCapture.createRecommendedCameraSettings())` to construct a camera pre-configured for ID Capture. The Flutter/RN-style `Camera.default` does not match the Capacitor sample's idiom.
- **Enums use PascalCase member names with camelCase wire values** (same TypeScript convention as RN). Write `IdCaptureRegion.Us`, `IdImageType.CroppedDocument`, `IdSide.Front`, `RejectionReason.Timeout`, `IdAnonymizationMode.FieldsAndImages`, `IdFieldType.DocumentNumber`, `IdLayoutStyle.Rounded`, `FrameSourceState.On` / `.Off`, `AamvaBarcodeVerificationStatus.Authentic`. **Never** use the lowercase Dart/Flutter form.
- **`CapturedId` MRZ/VIZ getters are `mrzResult` / `vizResult`** (not `mrz` / `viz` — that's Flutter). Other source-specific getters: `barcode`, `mobileDocument`, `mobileDocumentOcr`.
- **Images come back as base64 strings.** `images.face`, `images.frame`, `images.getCroppedDocument(IdSide.Front)`, `images.getFrame(IdSide.Front)` each return a `string | null`. Render with `<img src="data:image/png;base64,${face}">` (or set `.src` on an existing `<img>`). **They are not URIs, files, or HTMLImageElements.**
- **Listener is a plain object literal.** `IdCaptureListener` is a TypeScript interface with two optional methods — write `const listener = { didCaptureId(_, captured) { … }, didRejectId(_, rejected, reason) { … } }`. Do **not** create a class with `implePreview of the first 4,000 characters. Read full instructions →
Referenced files: 4 — file references are metadata, not package contents.
id-capture-cordova12.6 KB
---
name: id-capture-cordova
description: Scandit ID Capture (`IdCapture`) in Cordova / PhoneGap projects (`scandit-cordova-datacapture-id`) — scanning passports, driver's licenses, ID cards, residence permits, visas via MRZ, VIZ, barcode, or mobile documents. Use for integration, accepted-document and scanner configuration, captured-field result handling, anonymization, add-on capabilities (voided-ID detection, European driving-license back decoding, AAMVA barcode verification), and SDK version migration.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# ID Capture Cordova Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit ID Capture APIs. The ID Capture API was **restructured at the v7 → v8 boundary** (the standalone `AamvaBarcodeVerifier` was removed in favour of settings flags, and several verification APIs were added). The Cordova plugin surface (global `Scandit.*` namespace after `deviceready`, the imperative `DataCaptureView` + `connectToElement` pattern, `pause` / `resume` document events) is also distinct from the iOS, Android, web, Flutter, React Native, and Capacitor SDKs.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Cordova-specific gotchas worth flagging:
- **Wait for `deviceready` before touching any Scandit API.** The Cordova plugin system populates `window.Scandit.*` and registers native bridges in response to the `deviceready` event — calling `Scandit.DataCaptureContext.initialize(...)` (or anything else) at module load runs into `undefined` symbols. Always wrap the bootstrap in `document.addEventListener('deviceready', () => { … }, false);`.
- **The consumer pattern is the `Scandit.*` global, not an `import`.** Cordova's plugin loader merges every Scandit class onto `window.Scandit`. Write `new Scandit.IdCapture(settings)`, `Scandit.IdCaptureRegion.Us`, `Scandit.RejectionReason.Timeout`. You **do not** `import { IdCapture } from 'scandit-cordova-datacapture-id'` in your application code (that path resolves only inside the plugin's own TypeScript build).
- **The view is an imperative class connected to a `<div>`, not a custom element.** There is no `<data-capture-view>` HTML tag. Create the view with `Scandit.DataCaptureView.forContext(context)` and attach it to a plain `<div id="…">` via `view.connectToElement(divElement)`. Detach with `view.detachFromElement()` when navigating away.
- **`Scandit.DataCaptureContext.initialize(licenseKey)` returns the context.** Capture the return value: `const context = Scandit.DataCaptureContext.initialize('<key>');`. There is no `sharedInstance` pattern in the Cordova sample.
- **Camera is constructed with `Scandit.Camera.withSettings(...)`, returning `Camera | null`.** Use `Scandit.Camera.withSettings(Scandit.IdCapture.createRecommendedCameraSettings())` and **guard the result for null** before dereferencing it.
- **Enums use PascalCase member names with camelCase wire values** (same TypeScript convention as RN / Capacitor). Write `Scandit.IdCaptureRegion.Us`, `Scandit.IdImageType.CroppedDocument`, `Scandit.IdSide.Front`, `Scandit.RejectionReason.Timeout`, `Scandit.IdAnonymizationMode.FieldsAndImages`, `Scandit.IdFieldType.DocumentNumber`, `Scandit.IdLayoutStyle.Rounded`, `Scandit.FrameSourceState.On` / `.Off`, `Scandit.AamvaBarcodeVerificationStatus.Authentic`. **Never** use the lowercase Dart/Flutter form.
- **`CapturedId` MRZ/VIZ getters are `mrzResult` / `vizResult`** (not `mrz` / `viz` — that's Flutter). Other source-specific getters: `barcode`, `mobileDocument`, `mobileDocumentOcr`.
- **Images come back as base64 strings.** `images.face`, `images.frame`, `images.getCroppedDocument(Scandit.IdSide.Front)`, `images.getFrame(ScaPreview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
id-capture-flutter10.4 KB
--- name: id-capture-flutter description: Scandit ID Capture (`IdCapture`) in Flutter projects — scanning passports, driver's licenses, ID cards, residence permits, visas via MRZ, VIZ, barcode, or mobile documents. Use for integration, accepted-document and scanner configuration, captured-field result handling, anonymization, add-on capabilities (voided-ID detection, European driving-license back decoding, AAMVA barcode verification), and SDK version migration. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # ID Capture Flutter Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit ID Capture APIs. The ID Capture API was **restructured at the v7 → v8 boundary** (the `IdCaptureScanner` was reshaped into a wrapper over `physicalDocumentScanner` / `mobileDocumentScanner`, the standalone `AamvaBarcodeVerifier` was removed in favour of settings flags, and several verification APIs were added). The Flutter plugin surface (package names, plugin initialization, widget lifecycle) is also distinct from the iOS, Android, web, React Native, Cordova, and Capacitor SDKs. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. Flutter-specific gotchas worth flagging: - **The ID plugin must be initialized before any Scandit API call.** Call `await ScanditFlutterDataCaptureId.initialize();` in `main()` (after `WidgetsFlutterBinding.ensureInitialized()`, before `runApp`). Initializing the ID plugin initializes the core plugin for you — you do **not** call a separate core `initialize()`. Skipping this causes opaque runtime/MethodChannel crashes. - **Context is created with `DataCaptureContext.forLicenseKey(licenseKey)`** on Flutter for ID Capture (matches the official `IdCaptureSimpleSample`). Do not use `DataCaptureContext.initialize(...)`. - **Listener method names are iOS-style on Flutter:** `didCaptureId(IdCapture, CapturedId)` and `didRejectId(IdCapture, CapturedId?, RejectionReason)`. There is no `onIdCaptured` / web-style callback on Flutter. - **Settings are list-based, not a bitmask.** Configure `settings.acceptedDocuments` (and optionally `settings.rejectedDocuments`) with document objects (`Passport(IdCaptureRegion.any)`, `DriverLicense(...)`, `IdCard(...)`, …) and set `settings.scanner`. The old `supportedDocuments` / `IdDocumentType` bitmask API was removed back at the v6 → v7 boundary — do not use it. Separately, the scanner property was renamed `scannerType` → `scanner` and reshaped into a wrapper at v7 → v8 (see `references/migration.md`). - **The three capability add-ons are separate packages but driven by base-module settings flags** (`rejectVoidedIds`, `decodeBackOfEuropeanDrivingLicense`, `rejectForgedAamvaBarcodes`). See `references/supplementary-modules.md`. There is **no standalone `AamvaBarcodeVerifier` class on Flutter** in v8. - Camera permission is required on both iOS (`NSCameraUsageDescription` in `ios/Runner/Info.plist`) and Android (declared by the plugin; request at runtime with the `permission_handler` package). ### Forbidden APIs (commonly hallucinated — do NOT emit these) These compile-fail against the real Flutter packages. Use the right-hand form: | Do NOT write | Use instead | |---|---| | `IdCapture.forContext(context, settings)` | `IdCapture(settings)` then `context.setMode(idCapture)` | | `IdCaptureOverlay.withIdCapture(...)` / `.withIdCaptureForView(...)` | `IdCaptureOverlay(idCapture)` then `captureView.addOverlay(overlay)` | | `IdDocumentType` enum / `settings.supportedDocuments` / `settings.scannerType` | `settings.acceptedDocuments` (document classes) + `settings.scanner = IdCaptureScanner(physicalDocumentScanner: ...)` | | `capturedId.documentType` | `capturedId.docume
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 4 — file references are metadata, not package contents.
id-capture-ios12.5 KB
--- name: id-capture-ios description: Scandit ID Capture (`IdCapture`) in native iOS Swift projects (UIKit or SwiftUI) — scanning passports, driver's licenses, ID cards, residence permits, health-insurance cards, visas via MRZ, VIZ, PDF417 barcode, or mobile documents on iOS. Use for integration, accepted-document and scanner configuration, CapturedId result handling, rejection rules, AAMVA verification, anonymization, overlay UI, camera lifecycle, and Scandit iOS SDK version migration in Swift, UIKit, or SwiftUI iOS apps. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # ID Capture iOS (Swift/UIKit) Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit ID Capture APIs. The iOS Swift API has changed significantly across major versions, and the **native iOS SDK differs substantially from the Android (Kotlin/Java), .NET, Flutter, and React Native SDKs**. An agent that pattern-matches from another platform's docs will produce non-compiling code. **Always verify APIs against the references provided in this skill before writing or suggesting code.** The most common sources of wrong code: - **The v6 API** — `supportedDocuments` (a bitmask enum like `.idCardVIZ`/`.dlVIZ`), `supportedSides`, and session-based callbacks (`didCaptureIn session:frameData:`) were all replaced in v7. Do not emit any of these. - **The v7.x API** — `settings.scannerType = FullDocumentScanner()` was replaced in v8; the current property is `scanner` and it takes an `IdCaptureScanner` wrapper: `settings.scanner = IdCaptureScanner(physicalDocument: FullDocumentScanner())`. - **ObjC prefixes** — the Objective-C SDK uses an `SDC` prefix on all types (`SDCIdCapture`, `SDCCapturedId`, etc.). These prefixes do **not** appear in Swift. Never emit `SDCIdCapture`, `SDCIdCaptureSettings`, etc. in Swift code. - **Cross-platform drift** — Android uses `IdCapture.forDataCaptureContext(...)`, .NET uses `IdCapture.Create(...)`, Flutter uses a different builder. The Swift API is `IdCapture(context:settings:)`. - **Standalone verifier classes** — `AamvaBarcodeVerifier` and `DataConsistencyVerifier` do not exist in the native iOS SDK. Verification is settings-driven: set `rejectForgedAamvaBarcodes = true` / `rejectInconsistentData = true` and read `capturedId.verificationResult`. - **NFC** — `NfcScanner` exists on native iOS but is **not covered by this skill**. If the user asks about NFC, refer them to the official documentation. ### Forbidden APIs (commonly hallucinated — do NOT emit these) | Do NOT write | Use instead | |---|---| | `IdCapture.Create(context, settings)` / `IdCapture.forDataCaptureContext(...)` | `IdCapture(context: context, settings: settings)` | | `settings.supportedDocuments = [.idCardVIZ, .dlVIZ, ...]` | `settings.acceptedDocuments = [IdCard(region: .any), ...]` | | `settings.supportedSides = .frontOnly` | `settings.scanner = IdCaptureScanner(physicalDocument: SingleSideScanner(...))` | | `settings.scannerType = FullDocumentScanner()` (v7 API) | `settings.scanner = IdCaptureScanner(physicalDocument: FullDocumentScanner())` | | `new AamvaBarcodeVerifier(...)` / `AamvaBarcodeVerifier.Create(...)` | `settings.rejectForgedAamvaBarcodes = true` + read `capturedId.verificationResult.aamvaBarcodeVerification` | | `new DataConsistencyVerifier(...)` | `settings.rejectInconsistentData = true` + read `capturedId.verificationResult.dataConsistency` | | `capturedId.barcodeResult` | `capturedId.barcode` | | `capturedId.Images` / `capturedId.VerificationResult` (PascalCase, .NET style) | `capturedId.images` / `capturedId.verificationResult` (camelCase) | | `SDCIdCapture` / `SDCCapturedId` / any `SDC`-prefixed type in Swift | `IdCapture` / `CapturedId` (no prefix in Swift) | | `DataCaptureContext.ForLicenseKey(...)` (.NET) or `DataCaptureContext.forLicenseKey(...)` (Android) | `DataCaptureContext.initialize(licenseKey: "...")` then `DataCaptureContext.shared` | ## Product Guidance - *
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
id-capture-net-android19.7 KB
--- name: id-capture-net-android description: Scandit ID Capture (`IdCapture`) in .NET for Android projects (`net*-android` target framework, `Scandit.DataCapture.IdCapture` NuGet, C#) — scanning passports, driver's licenses, ID cards, residence permits, visas via MRZ, VIZ, PDF417 barcode, or mobile documents. Use for integration, accepted-document and scanner configuration, CapturedId result handling, rejection rules, AAMVA verification, anonymization, overlay UI, and Scandit .NET SDK version migration — for MAUI apps (`<UseMaui>true</UseMaui>`) use id-capture-net-maui instead. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # ID Capture .NET for Android Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit ID Capture APIs, and the **.NET binding differs substantially from the native Android (Kotlin/Java), iOS, and Flutter SDKs**. An agent that pattern-matches from the native docs will get most calls wrong: the .NET binding does **not** use the Kotlin builder, does **not** expose a `supportedDocuments` bitmask, and does **not** ship the standalone `AamvaBarcodeVerifier` / NFC classes that exist on native. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or shapes. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. The .NET-Android-specific facts most often gotten wrong by pattern-matching from the Kotlin/iOS/Flutter SDK: - This skill targets the **non-MAUI** .NET for Android workload (project `<TargetFramework>net10.0-android</TargetFramework>` or similar, **no** `<UseMaui>` flag). For MAUI apps, the `DataCaptureView` is hosted as a XAML element and wired through handlers — completely different. If you see `<UseMaui>true</UseMaui>`, **stop and tell the user this skill does not apply.** - **Only TWO NuGet packages.** `Scandit.DataCapture.Core` and `Scandit.DataCapture.IdCapture`. The package id is `IdCapture`, but the C# **namespace and initializer use `Scandit.DataCapture.ID`** (`using Scandit.DataCapture.ID;`, `ScanditIdCapture.Initialize()`). There is **no** separate Barcode package to add — the PDF417/AAMVA barcode reader is bundled in `Scandit.DataCapture.IdCapture`. - **SDK 8.0+ requires explicit initialization with TWO initializers** in a `[Application]` subclass: `ScanditCaptureCore.Initialize()` **and `ScanditIdCapture.Initialize()`** in `OnCreate()`. Missing the ID one crashes the first `IdCapture.Create(...)` call. - **`IdCaptureSettings` is configured with an object initializer / property sets — NOT a builder and NOT a bitmask.** You set `AcceptedDocuments` (an `IList<IIdCaptureDocument>`) and `Scanner` (an `IdCaptureScanner`). The Kotlin/old `supportedDocuments` + `IdDocumentType` bitmask **does not exist** in .NET. - **Documents are constructed with `new`**, taking an `IdCaptureRegion`: `new Passport(IdCaptureRegion.Any)`, `new DriverLicense(IdCaptureRegion.Us)`, `new IdCard(IdCaptureRegion.Any)`, `new ResidencePermit(...)`, `new HealthInsuranceCard(...)`, `new VisaIcao(...)`, and `new RegionSpecific(RegionSpecificSubtype.X)`. `IdCaptureRegion` values are **C# PascalCase** (`Any`, `Us`, `EuAndSchengen`, …), not the Kotlin underscore style. - **The scanner is a wrapper:** `new IdCaptureScanner(physicalDocument: <IPhysicalDocumentScanner?>, mobileDocument: <MobileDocumentScanner?>)`. Physical = `new FullDocumentScanner()` (front+back, the default choice) or `new SingleSideScanner(barcode, machineReadableZone, visualInspectionZone)`. Mobile = `new MobileDocumentScanner(iso180135, ocr)`. Assign it to `settings.Scanner`. - **`IdCapture` is created with a FACTORY, not `new`**: `IdCapture.Create(dataCaptureContext, settings)` (the constructor is private). There is also a `Create(settings)` overload. - **You manage the camera yourself**, and `RecommendedCameraSettings
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
id-capture-net-ios22.6 KB
--- name: id-capture-net-ios description: Scandit ID Capture (`IdCapture`) in .NET for iOS projects (`net*-ios` target framework, `Scandit.DataCapture.IdCapture` NuGet, C#) — scanning passports, driver's licenses, ID cards, residence permits, visas via MRZ, VIZ, PDF417 barcode, or mobile documents. Use for integration, accepted-document and scanner configuration, CapturedId result handling, rejection rules, AAMVA verification, anonymization, overlay UI, and Scandit .NET SDK version migration — for MAUI apps (`<UseMaui>true</UseMaui>`) use id-capture-net-maui instead. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # ID Capture .NET for iOS Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit ID Capture APIs, and the **.NET binding differs substantially from the native iOS (Swift/Objective-C), Android (Kotlin/Java), and Flutter SDKs**. An agent that pattern-matches from the native docs will get most calls wrong: the .NET binding does **not** use the Swift/Kotlin builder, does **not** expose a `supportedDocuments` bitmask, and does **not** ship the standalone `AamvaBarcodeVerifier` / NFC classes that exist on native. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or shapes. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. The .NET-iOS-specific facts most often gotten wrong by pattern-matching from the Swift/Kotlin/Flutter SDK or the .NET Android binding: - This skill targets the **non-MAUI** .NET for iOS workload (project `<TargetFramework>net10.0-ios</TargetFramework>` or similar, **no** `<UseMaui>` flag). For MAUI apps, the `DataCaptureView` is hosted as a XAML element and wired through handlers — completely different. If you see `<UseMaui>true</UseMaui>`, **stop and tell the user this skill does not apply.** The official iOS Get Started page mixes in MAUI (XAML / `*.Maui`) snippets — ignore those for a non-MAUI project. - **Only TWO NuGet packages.** `Scandit.DataCapture.Core` and `Scandit.DataCapture.IdCapture`. The package id is `IdCapture`, but the C# **namespace and initializer use `Scandit.DataCapture.ID`** (`using Scandit.DataCapture.ID;`, `ScanditIdCapture.Initialize()`). There is **no** separate Barcode package to add — the PDF417/AAMVA barcode reader is bundled in `Scandit.DataCapture.IdCapture`. Do **not** add any `*.Maui` package. - **SDK 8.0+ requires explicit initialization with TWO initializers** in `AppDelegate.FinishedLaunching` (`application:didFinishLaunchingWithOptions:`): `ScanditCaptureCore.Initialize()` **and `ScanditIdCapture.Initialize()`** before any Scandit type is constructed. Missing the ID one crashes the first `IdCapture.Create(...)` call. - **`IdCaptureSettings` is configured with an object initializer / property sets — NOT a builder and NOT a bitmask.** You set `AcceptedDocuments` (an `IList<IIdCaptureDocument>`) and `Scanner` (an `IdCaptureScanner`). The Swift/Kotlin/old `supportedDocuments` + `IdDocumentType` bitmask **does not exist** in .NET. - **Documents are constructed with `new`**, taking an `IdCaptureRegion`: `new Passport(IdCaptureRegion.Any)`, `new DriverLicense(IdCaptureRegion.Us)`, `new IdCard(IdCaptureRegion.Any)`, `new ResidencePermit(...)`, `new HealthInsuranceCard(...)`, `new VisaIcao(...)`, and `new RegionSpecific(RegionSpecificSubtype.X)`. `IdCaptureRegion` values are **C# PascalCase** (`Any`, `Us`, `EuAndSchengen`, …), not the Swift/Kotlin style. - **The scanner is a wrapper:** `new IdCaptureScanner(physicalDocument: <IPhysicalDocumentScanner?>, mobileDocument: <MobileDocumentScanner?>)`. Physical = `new FullDocumentScanner()` (front+back, the default choice) or `new SingleSideScanner(barcode, machineReadableZone, visualInspectionZone)`. Mobile = `new MobileDocumentScanner(iso180135, ocr)`. Assign it to `settings.Sca
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
id-capture-net-maui27.2 KB
--- name: id-capture-net-maui description: Scandit ID Capture (`IdCapture`) in .NET MAUI projects (`<UseMaui>true</UseMaui>`, `Scandit.DataCapture.IdCapture` NuGet) — scanning passports, driver's licenses, ID cards, residence permits, visas via MRZ, VIZ, PDF417 barcode, or mobile documents. Use for integration, accepted-document and scanner configuration, CapturedId result handling, rejection rules, AAMVA verification, MAUI view hosting and lifecycle, and SDK version migration — for non-MAUI .NET projects use `id-capture-net-android` (`net*-android`) or `id-capture-net-ios` (`net*-ios`) instead. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # ID Capture .NET MAUI Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit ID Capture APIs, and the **.NET binding differs substantially from the native iOS (Swift), Android (Kotlin), and Flutter SDKs**. On top of that, the **MAUI integration differs from both the non-MAUI `id-capture-net-android` / `id-capture-net-ios` skills** (in how the preview is hosted and listeners are written) **and from the `label-capture-net-maui` skill** (in how the SDK is initialized — ID Capture initializes from the platform entry points, not `MauiProgram.cs`). An agent that pattern-matches from the native docs, the per-platform .NET skills, or the Label/Barcode MAUI skills will get key calls wrong. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or shapes. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. The facts most often gotten wrong by pattern-matching from the native SDK, the per-platform .NET skills, or the Label/Barcode MAUI skills: - This skill targets MAUI apps with **`<UseMaui>true</UseMaui>`**. For non-MAUI .NET projects, use `id-capture-net-android` (for `net*-android`) or `id-capture-net-ios` (for `net*-ios`) instead. Those skills host the preview through a native `Activity` / `UIViewController`, which is completely different. If the project is a bare `net*-android` / `net*-ios` app **without** `<UseMaui>true</UseMaui>`, **stop and tell the user this skill does not apply** and point them at the per-platform skill. - **THREE NuGet packages.** `Scandit.DataCapture.Core`, `Scandit.DataCapture.Core.Maui`, and `Scandit.DataCapture.IdCapture`. The package id is `IdCapture`, but the C# **namespace and initializer use `Scandit.DataCapture.ID`** (`using Scandit.DataCapture.ID;`, `ScanditIdCapture.Initialize()`). There is **no separate Barcode package** (the PDF417/AAMVA reader is bundled in `Scandit.DataCapture.IdCapture`) and **no `Scandit.DataCapture.IdCapture.Maui` package** — ID Capture reuses the generic `<scandit:DataCaptureView>` from `Core.Maui`. - **Initialization is SPLIT and platform-specific — this is the biggest MAUI-vs-Label gotcha.** `ScanditIdCapture.Initialize()` is called from the **platform entry points**, not `MauiProgram.cs`: in `Platforms/Android/MainApplication.OnCreate()` (before `base.OnCreate()`) **and** in `Platforms/iOS/AppDelegate.FinishedLaunching` (before `base.FinishedLaunching(...)`). In `MauiProgram.CreateMauiApp()` you only chain **`.UseScanditCore(configure => configure.AddDataCaptureView())`** (which calls `ScanditCaptureCore.Initialize()` and registers the `DataCaptureView` MAUI handler). There is **no `UseScanditIdCapture()`** builder extension. (Contrast: `label-capture-net-maui` calls `ScanditLabelCapture.Initialize()` directly in `MauiProgram.cs` — do **not** copy that pattern here.) - **`IdCaptureSettings` is configured with an object initializer / property sets — NOT a builder and NOT a bitmask.** You set `AcceptedDocuments` (an `IList<IIdCaptureDocument>`) and `Scanner` (an `IdCaptureScanner`). The Swift/Kotlin/old `supportedDocuments` + `IdDocumentType` bitmask **does not exist** in .NET. - **Documen
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
id-capture-rn12 KB
---
name: id-capture-rn
description: Scandit ID Capture (`IdCapture`) in React Native projects — scanning passports, driver's licenses, ID cards, residence permits, visas via MRZ, VIZ, barcode, or mobile documents. Use for integration, accepted-document and scanner configuration, captured-field result handling, anonymization, add-on capabilities (voided-ID detection, European driving-license back decoding, AAMVA barcode verification), and SDK version migration.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# ID Capture React Native Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit ID Capture APIs. The ID Capture API was **restructured at the v7 → v8 boundary** (the `scannerType` property was renamed to `scanner` and reshaped into a wrapper, the standalone `AamvaBarcodeVerifier` was removed in favour of settings flags, and several verification APIs were added). The React Native plugin surface (package names, enum casing, view component, AppState lifecycle) is also distinct from the iOS, Android, web, Flutter, Cordova, and Capacitor SDKs.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, package names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
React Native–specific gotchas worth flagging:
- **No plugin init call.** Unlike Flutter, you do **not** call `ScanditDataCaptureId.initialize()`. The core auto-initializes at import time. The only "initialize" call is `DataCaptureContext.initialize(licenseKey)` followed by using `DataCaptureContext.sharedInstance` — that is the RN convention.
- **Enums use PascalCase member names with camelCase wire values.** Write `IdCaptureRegion.Us`, `IdImageType.CroppedDocument`, `IdSide.Front`, `RejectionReason.Timeout`, `IdAnonymizationMode.FieldsAndImages`, `IdFieldType.DocumentNumber`, `IdLayoutStyle.Rounded`, `FrameSourceState.On` / `.Off`. **Never** write the lowercase Dart/Flutter form (`IdCaptureRegion.us`) on RN.
- **`CapturedId` MRZ/VIZ getters are `mrzResult` / `vizResult`** (not `mrz` / `viz` — that's Flutter). Other source-specific getters: `barcode`, `mobileDocument`, `mobileDocumentOcr`.
- **Images come back as base64 strings.** `images.face`, `images.frame`, `images.getCroppedDocument(IdSide.Front)`, `images.getFrame(IdSide.Front)` each return a `string | null`. Render with `<Image source={{ uri: 'data:image/png;base64,' + face }} />`. **They are not URIs, files, or Image components.**
- **Listener is a plain object literal.** `IdCaptureListener` is a TypeScript interface with two optional methods — write `const listener = { didCaptureId(_, captured) {...}, didRejectId(_, rejected, reason) {...} }`. Do **not** create a class with `implements IdCaptureListener` — that's the Dart/Flutter style.
- **`addListener`, `removeListener`, `setMode`, `addMode`, `removeMode`, `applySettings`, `setFrameSource`, `switchToDesiredState` all return Promises.** Either `await` them or chain `.then` — forgetting the `await` is a common cause of races at startup.
- **Two view patterns ship.** The official sample wires `<DataCaptureView>` from `scandit-react-native-datacapture-core` + manually adds an `IdCaptureOverlay` through a ref. The id package also ships a higher-level `<IdCaptureView>` component that bundles mode + camera + overlay + callbacks behind props. Both are valid; lead with `<DataCaptureView>` (matches the public sample) and offer `<IdCaptureView>` as a shorthand. See `references/integration.md`.
- **There is no `VisaLetter` document class on React Native.** Only `VisaIcao` ships. (On Flutter both exist; on RN only the ICAO visa is modelled.)
- **Camera lifecycle uses `AppState`, not focus props.** Subscribe with `AppState.addEventListener('change', …)`, stop the camera on `background`/`inactive`, restart oPreview of the first 4,000 characters. Read full instructions →
Referenced files: 4 — file references are metadata, not package contents.
id-capture-web15 KB
---
name: id-capture-web
description: Scandit ID Capture in web/browser projects (`@scandit/web-datacapture-id`) — scanning passports, driver's licenses, ID cards, residence permits, visas via MRZ, VIZ, PDF417 barcode, or mobile documents. Use for integration, accepted-document and scanner configuration, CapturedId result handling, rejection rules, AAMVA verification, overlay UI, and SDK version migration in TypeScript/JavaScript web apps.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# ID Capture Web (TypeScript/JavaScript) Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit ID Capture APIs. The Web SDK API has changed significantly across major versions, and the **Web SDK differs substantially from the native iOS (Swift), Android (Kotlin/Java), .NET, Flutter, and React Native SDKs**. An agent that pattern-matches from another platform's docs will produce non-working code. Two Web-specific facts dominate:
1. **The Web SDK is async-first.** Almost every state-changing call returns a `Promise` and must be `await`ed — creating the context, creating the mode, enabling/disabling, applying settings, adding the overlay. There are no synchronous constructors for the mode or overlay.
2. **You must register the ID module loader.** `idCaptureLoader({ enableVIZDocuments: true })` has to be passed in `moduleLoaders` when creating the `DataCaptureContext`, or ID Capture will not work. `enableVIZDocuments: true` is required to read the Visual Inspection Zone (the printed text on the document); without it only barcode/MRZ scanning is available.
**Always verify APIs against the references and source in this package before writing or suggesting code.** The most common sources of wrong code:
- **The v6 API** — `supportedDocuments` (a bitmask), `supportedSides`, and session-based callbacks were replaced. Do not emit any of these.
- **The v7.0-era API** — `settings.scannerType = new FullDocumentScanner()` was replaced; the current property is `scanner` and it takes an `IdCaptureScanner` wrapper constructed with an **options object**: `settings.scanner = new IdCaptureScanner({ physicalDocument: new FullDocumentScanner() })`.
- **Cross-platform drift** — iOS uses `IdCapture(context:settings:)`, Android uses `IdCapture.forDataCaptureContext(...)`, .NET uses `IdCapture.Create(...)`. The Web API is **`await IdCapture.forContext(context, settings)`**.
- **`isEnabled`** — on Web this is the method `idCapture.isEnabled()` to read and **`await idCapture.setEnabled(true)`** to set. It is NOT an assignable property.
- **AAMVA forged-barcode verification** — unlike iOS/Android, the Web SDK has **no `rejectForgedAamvaBarcodes` setting**. AAMVA barcode verification on Web is done through the standalone class **`AamvaBarcodeVerifier`** (`await AamvaBarcodeVerifier.create(context)`, then `await verifier.verify(capturedId)`). Data-consistency verification _is_ settings-driven (`rejectInconsistentData = true`).
- **Images are base64 data-URL strings, not native bitmaps.** `capturedId.images.face` / `.getFrame(IdSide.Front)` / `.getCroppedDocument(IdSide.Back)` return `string | null` (a `data:image/...` URL), suitable for an `<img>` `src`. They are only populated when enabled via `settings.setShouldPassImageTypeToResult(IdImageType.Face, true)`.
### Forbidden APIs (commonly hallucinated — do NOT emit these)
| Do NOT write | Use instead |
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `new IdCapture(context, settings)` | `await IdCapture.forContext(context, settings)` |
| `IdCapture.forDataCaptureContext(..Preview of the first 4,000 characters. Read full instructions →
Referenced files: 1 — file references are metadata, not package contents.
label-capture-android8.19 KB
--- name: label-capture-android description: Smart Label Capture (Scandit `LabelCapture`) in native Android projects — extracting multiple fields (price, expiry date, serial or lot number, weight) from a label in one scan, using barcode fields plus text fields with regex patterns and pre-built definitions like price capture. Use for integration, label-definition configuration, captured-session handling, overlay customization (brushes, floating badges), the Validation Flow, and SDK version migration. license: Apache-2.0 metadata: author: scandit version: "1.2.1" --- # Label Capture Android Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit Label Capture APIs. Label Capture has evolved across recent SDK releases: - At the v7→v8 major bump, `LabelFieldDefinition` regex builder methods were renamed (`setPattern`→`setValueRegex`, `setPatterns`→`setValueRegexes`, `setDataTypePattern`→`setAnchorRegex`, `setDataTypePatterns`→`setAnchorRegexes`). - At v8.2, Validation Flow 2.0 introduced `shouldHandleKeyboardInsetsInternally` on `LabelCaptureValidationFlowOverlay` — relevant for Android 15 edge-to-edge enforcement. - Android symbology names use underscores: `Symbology.EAN13_UPCA`, not `Symbology.EAN13UPCA`. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or builder shapes. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. ## Label Capture is broader than it looks — two reflexes that prevent most failures Label Capture ships a rich catalogue of **pre-built fields** and **whole pre-built label definitions** for the data people actually scan — serial numbers, IMEI 1 & 2, expiry/packing dates, prices, weights, VINs, seven-segment displays. The two most common ways an integration goes wrong are forgetting these exist, and crashing at runtime over a missing model artifact. Two reflexes: 1. **Reach for a pre-built field or pre-built label before composing anything custom.** When the user names a recognisable thing to scan — "serial number", "IMEI", "expiry date", "price/shelf label", "VIN" — there is almost always a dedicated builder or a whole-label factory tuned for it, with anchor/value regexes already dialled in. Use it. Inventing a custom barcode/text field with a hand-written regex for something that has a pre-built builder is the single biggest source of bad integrations: the regex you guess will not match real labels as well as the tuned one, and it signals you didn't know the pre-built existed. Only fall back to `addCustomBarcode()`/`addCustomText()` when nothing pre-built fits. The full catalogue and the routing rules live in `references/integration.md` — consult it rather than relying on memory. 2. **Bundle the right model artifacts whenever any pre-built field or definition is used — getting this wrong is the #1 runtime failure.** `label-text-models` is *not* only for text fields: serial number, IMEI, and part-number fields are "barcode" fields but still load a model at runtime. And `label-text-models` alone is **not enough** for the pre-built whole-label factories — `createPriceCaptureDefinition` additionally needs **`com.scandit.datacapture:price-label`**. Miss it and the app compiles and launches but never scans. `references/integration.md` has the per-field and per-factory artifact rules; map every pre-built thing you use to its artifact(s) before writing the Gradle block. ## Constraint: Label Capture cannot run alongside Barcode Capture A `DataCaptureContext` runs only one active mode at a time, so Label Capture and Barcode Capture cannot both be active simultaneously — attaching both makes the context error out. If the user wants to read a standalone barcode "as well as" the label, model that barcode as a field inside the label definition (`addCustomBarcode()` or a pre-built barco
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 4 — file references are metadata, not package contents.
label-capture-capacitor7.28 KB
---
name: label-capture-capacitor
description: Smart Label Capture (Scandit `LabelCapture`) in Capacitor projects — extracting multiple fields (price, expiry date, serial or lot number, weight) from a label in one scan, using barcode fields plus text fields with regex patterns. Use for integration, label-definition configuration, captured-label handling, the Validation Flow, and SDK version migration.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# Label Capture Capacitor Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit Label Capture APIs. The Capacitor plugin surface (ES module imports, `initializePlugins()`, `webViewContentOnTop` toggle) is distinct from the web, React Native, Flutter, and Cordova SDKs.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Capacitor-specific gotchas worth flagging:
- **Plugins must be initialized first.** Call `await ScanditCaptureCorePlugin.initializePlugins();` **before** `DataCaptureContext.initialize(licenseKey)`. Skipping this step causes plugin-bridge errors at runtime.
- **`webViewContentOnTop` toggle.** The native scan view sits *behind* the WebView. While scanning, set `view.webViewContentOnTop = false` so native overlay UI receives touch events. To show DOM-based UI on top (e.g. a result modal), flip back to `view.webViewContentOnTop = true`. Forgetting this is the most common cause of "modal/buttons don't work during scanning" or "scan UI is invisible".
- **Listener method names are iOS-style on Capacitor.** The Validation Flow listener uses `didCaptureLabelWithFields(fields)`, `didSubmitManualInputForField(field, oldValue, newValue)`, `didUpdateValidationFlowResult(...)`. Web names (`onValidationFlowLabelCaptured`, `onManualInput`) do not exist on Capacitor.
- **Class-based field API**, same shape as RN/Cordova (and opposite to Flutter). `CustomBarcode.initWithNameAndSymbologies(...)`, `new ExpiryDateText(...)`, `field.optional = false`, `LabelCaptureSettings.settingsFromLabelDefinitions([...], {})`. There is no `LabelCaptureSettingsBuilder` / `LabelDefinitionBuilder` and no v8.5 factory-function sugar — those are web-only.
- After installing or upgrading Scandit packages, run `npx cap sync` (and `cd ios/App && pod install` for iOS).
- Camera permission: iOS requires `NSCameraUsageDescription` in `ios/App/App/Info.plist`. Android: declared automatically by the plugin; request at runtime via `@capacitor/camera` or `@capgo/permission` if `minSdkVersion >= 23`.
## Product Guidance
Apply these rules whenever the user is making a design decision, not just an API question. They reflect how Scandit recommends Label Capture be integrated.
- **Default to the Validation Flow.** New integrations should use `LabelCaptureValidationFlowOverlay`, not `LabelCaptureBasicOverlay`. Recommend the basic/advanced overlay path only when the customer explicitly needs a live AR overlay or a UI that the Validation Flow's fixed layout cannot produce. See `references/validation-flow.md`.
- **Validation Flow must be rendered full-screen.** Do not place it inside a card, half-sheet, modal slice, or partial-height widget — the layout assumes full-screen height for the field checklist, manual-entry sheet, and keyboard.
- **Prefer pre-made labels first, then pre-made fields, then custom.** Try in this order: (1) does a **pre-made label definition** cover the use case? — `LabelDefinition.createVinLabelDefinition(name)`, `LabelDefinition.createPriceCaptureDefinition(name)`, `LabelDefinition.createSevenSegmentDisplayLabelDefinition(name)`. (2) Can the label be built from **pre-made fields**? — `ExpiryDateText`, `PackingDateText`, `DateText`, `WeightText`, `UnitPriceText`, `ToPreview of the first 4,000 characters. Read full instructions →
Referenced files: 5 — file references are metadata, not package contents.
label-capture-cordova7.67 KB
---
name: label-capture-cordova
description: Smart Label Capture (Scandit `LabelCapture`) in Cordova / PhoneGap projects — extracting multiple fields (price, expiry date, serial or lot number, weight) from a label in one scan, using barcode fields plus text fields with regex patterns. Use for integration, label-definition configuration, captured-label handling, the Validation Flow, and SDK version migration.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# Label Capture Cordova Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit Label Capture APIs. The Cordova plugin surface (global `Scandit.*` namespace, `deviceready` gating, plugin install, platform prepare) is distinct from the web, React Native, Flutter, and Capacitor SDKs.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Cordova-specific gotchas worth flagging:
- **All Scandit code must run after `deviceready`.** The `Scandit.*` global namespace is not populated until then. Wrap your initialization in `document.addEventListener('deviceready', () => {...}, false);`.
- **Listener method names are iOS-style on Cordova.** The Validation Flow listener uses `didCaptureLabelWithFields(fields)` and `didSubmitManualInputForField(field, oldValue, newValue)` — NOT the web equivalents `onValidationFlowLabelCaptured` / `onManualInput`.
- **Class-based field API**, same shape as RN/Capacitor (and opposite to Flutter). Use `Scandit.CustomBarcode.initWithNameAndSymbologies(name, [...])`, `new Scandit.ExpiryDateText(name)`, `field.optional = false`, `Scandit.LabelCaptureSettings.settingsFromLabelDefinitions([...], {})`. There is no `LabelCaptureSettingsBuilder` / `LabelDefinitionBuilder` and no v8.5 factory-function sugar — those are web-only.
- After `cordova plugin add` / version bump, run `cordova prepare ios` (and `cordova prepare android`) to sync native dependencies. iOS additionally requires a fresh `pod install` inside `platforms/ios/`.
- Camera permission: iOS requires `NSCameraUsageDescription` in the app's `Info.plist` (or via `<config-file>` in `config.xml`); Android's `CAMERA` permission is declared by the plugin automatically and must be requested at runtime if your minSdkVersion targets API 23+.
- `Scandit.DataCaptureContext.initialize(licenseKey)` returns the singleton context; do not construct multiple contexts.
## Product Guidance
Apply these rules whenever the user is making a design decision, not just an API question. They reflect how Scandit recommends Label Capture be integrated.
- **Default to the Validation Flow.** New integrations should use `LabelCaptureValidationFlowOverlay`, not `LabelCaptureBasicOverlay`. Recommend the basic/advanced overlay path only when the customer explicitly needs a live AR overlay or a UI that the Validation Flow's fixed layout cannot produce. See `references/validation-flow.md`.
- **Validation Flow must be rendered full-screen.** Do not place it inside a card, half-sheet, modal slice, or partial-height widget — the layout assumes full-screen height for the field checklist, manual-entry sheet, and keyboard.
- **Prefer pre-made labels first, then pre-made fields, then custom.** Try in this order: (1) does a **pre-made label definition** cover the use case? — `Scandit.LabelDefinition.createVinLabelDefinition(name)`, `Scandit.LabelDefinition.createPriceCaptureDefinition(name)`, `Scandit.LabelDefinition.createSevenSegmentDisplayLabelDefinition(name)`. (2) Can the label be built from **pre-made fields**? — `ExpiryDateText`, `PackingDateText`, `DateText`, `WeightText`, `UnitPriceText`, `TotalPriceText`, `SerialNumberBarcode`, `PartNumberBarcode`, `ImeiOneBarcode`, `ImeiTwoBarcode`. (3) Only as a last rePreview of the first 4,000 characters. Read full instructions →
Referenced files: 5 — file references are metadata, not package contents.
label-capture-flutter8.18 KB
--- name: label-capture-flutter description: Smart Label Capture (Scandit `LabelCapture`) in Flutter projects — extracting multiple fields (price, expiry date, serial or lot number, weight) from a label in one scan, using barcode fields plus text fields with regex patterns. Use for integration, label-definition configuration, captured-label handling, the Validation Flow, and SDK version migration. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # Label Capture Flutter Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit Label Capture APIs. The Flutter plugin surface (package names, builder API, plugin initialization, widget lifecycle) is distinct from the web, React Native, Cordova, and Capacitor SDKs. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. Flutter-specific gotchas worth flagging: - **Plugin must be initialized before any Scandit API call.** Call `await ScanditFlutterDataCaptureLabel.initialize();` (and `await ScanditFlutterDataCaptureBarcode.initialize();`) **before** `DataCaptureContext.initialize(licenseKey);`. Skipping the plugin `initialize()` causes opaque MethodChannel errors at runtime. - **Listener method names are iOS-style on Flutter.** The Validation Flow uses `didCaptureLabelWithFields(fields)`, `didSubmitManualInputForField(field, oldValue, newValue)`, `didUpdateValidationFlowResult(...)`. Web names (`onValidationFlowLabelCaptured`, `onManualInput`) do not exist on Flutter. - **Two listener interfaces exist.** `LabelCaptureValidationFlowListener` declares only `didCaptureLabelWithFields`. To handle manual-input submissions or per-frame result updates, implement `LabelCaptureValidationFlowExtendedListener` (which extends the base listener with `didSubmitManualInputForField` and `didUpdateValidationFlowResult`). - **Builder API on Flutter.** Field definitions use builders: `CustomBarcodeBuilder().setSymbologies([...]).isOptional(false).build(name)`, `LabelDefinitionBuilder().addCustomBarcode(...).addExpiryDateText(...).build(name)`, `LabelCaptureSettings([labelDefinition])`. This is opposite to RN/Cordova/Capacitor (which are class-based) — do not mix them up. - Camera permission is required on both iOS (`NSCameraUsageDescription` in `ios/Runner/Info.plist`) and Android (declared automatically; request at runtime with the `permission_handler` package). - The `DataCaptureView` is a Flutter widget; its lifecycle ties to the widget tree. Pause the camera in `didChangeAppLifecycleState` (via `WidgetsBindingObserver`) and dispose listeners in the State's `dispose()`. ## Product Guidance Apply these rules whenever the user is making a design decision, not just an API question. They reflect how Scandit recommends Label Capture be integrated. - **Default to the Validation Flow.** New integrations should use `LabelCaptureValidationFlowOverlay`, not `LabelCaptureBasicOverlay`. Recommend the basic/advanced overlay path only when the customer explicitly needs a live AR overlay or a UI that the Validation Flow's fixed layout cannot produce. See `references/validation-flow.md`. - **Validation Flow must be rendered full-screen.** Do not place it inside a card, half-sheet, modal slice, or partial-height widget — the layout assumes full-screen height for the field checklist, manual-entry sheet, and keyboard. - **Prefer pre-made labels first, then pre-made fields, then custom.** Try in this order: (1) does a **pre-made label definition** cover the use case? — `LabelDefinition.vinLabelDefinitionWithName(name)`, `LabelDefinition.priceCaptureDefinitionWithName(name)`, `LabelDefinition.sevenSegmentDisplayLabelDefinitionWithName(name)`. (2) Can the label be built from **pre-made fields**?
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 5 — file references are metadata, not package contents.
label-capture-ios7.88 KB
---
name: label-capture-ios
description: Smart Label Capture (Scandit `LabelCapture`) in native iOS projects — extracting multiple fields (price, expiry date, serial or lot number, weight) from a label in one scan, using barcode fields plus text fields with regex patterns. Use for integration, label-definition configuration, captured-session handling, overlay UI, the Validation Flow, and SDK version migration.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# Label Capture iOS Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit Label Capture APIs. Label Capture has evolved across recent SDK releases:
- At the v7→v8 major bump, the `LabelFieldDefinition` regex builder methods were renamed (`setPattern`→`valueRegex`, `setPatterns`→`valueRegexes`, `setDataTypePattern`→`anchorRegex`, `setDataTypePatterns`→`anchorRegexes`).
- In v8.1, the Swift result-builder DSL (`LabelCaptureSettings { LabelDefinition("...") { ... } }`) was introduced and `Symbology` enum auto-bridging removed the need for `NSNumber` boxing. v8.0 integrations use the array initializer `LabelCaptureSettings(labelDefinitions: [...])`. The optional VF delegate method `didSubmitManualInputFor:replacingValue:withValue:` was also added in v8.1.
- In v8.2, the Validation Flow UI was redesigned. `LabelCaptureValidationFlowSettings.setPlaceholderText(_:forLabelDefinition:)` and the optional delegate method `didUpdateResult:asyncId:fields:frameData:` were added.
- iOS symbology enum values use camelCase: `.ean13UPCA`, `.gs1DatabarExpanded`, `.code128` (not the Android underscore form `EAN13_UPCA`).
- The iOS label settings use a Swift result-builder DSL (v8.1+) or array initializer (v8.0), not the fluent `.addLabel().buildFluent(...)` style used by Android.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or view modifiers. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
## Operational constraints
These are runtime/licensing facts about Label Capture — not API versioning — and they affect what you can promise the user before any code is written.
**Label Capture reads printed text only.** Handwritten text is not supported. The on-device OCR engine and ARE both target machine-printed characters (latin letters, digits, common punctuation). If the user asks about scanning handwritten values, say so explicitly and propose a manual-entry fallback (e.g. the Validation Flow's manual input field).
**ARE (Adaptive Recognition Engine)** is Scandit's cloud-based OCR fallback — enabled via `.adaptiveRecognition(.auto)` on the `LabelDefinition`. It is a property of the label definition and is **overlay-agnostic** (it works with the Basic, Advanced, or Validation Flow overlay alike — do not tell the user it is Validation-Flow-only). It is currently in Beta and needs the Adaptive Recognition Engine entitlement, which Scandit enables server-side on your subscription — there is no client-side flag the user toggles themselves; the entitlement rides in the issued license key. Trial keys can be issued for evaluation; production keys require contacting <support@scandit.com>. Do not enable it by default. (Distinct from Beta Receipt Scanning, which *does* require its own dedicated overlay.)
## Intent Routing
Based on the user's request, load the appropriate reference file before responding:
- **Questions about other Scandit products or scanning modes** (e.g. SparkScan, Barcode Capture, MatrixScan, ID Capture, or general SDK setup questions not specific to Label Capture) → hand off to the `data-capture-sdk` skill. Do not attempt to answer questions about other capture modes from memory — the dedicated skill has the correct and up-to-date references.
- **Integrating Label Capture from scratch** (e.g. "add Label Capture to my iOS app"Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
label-capture-net-android16 KB
---
name: label-capture-net-android
description: Smart Label Capture (Scandit `LabelCapture`) in .NET for Android projects (`net*-android` target framework, `Scandit.DataCapture.Label` NuGet, C#) — extracting multiple fields (price, expiry date, serial or lot number, weight) from a label in one scan via barcode and text fields. Use for integration, label definitions (including prebuilt VIN, price label, 7-segment), captured-session handling, overlays, the Validation Flow, and Scandit .NET SDK version migration — for MAUI apps (`<UseMaui>true</UseMaui>`) use label-capture-net-maui instead.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# Label Capture (Smart Label Capture) .NET for Android Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit Label Capture APIs, and the **.NET binding differs substantially from the Kotlin/Java native Android SDK**. An agent that pattern-matches from the native Android (Kotlin) Label Capture docs will get nearly every call wrong, because the .NET binding does **not** use the Kotlin fluent settings builder — it builds each field with a per-field factory and assembles a list of definitions.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or builder shapes. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
The .NET-Android-specific facts most often gotten wrong by pattern-matching from the Kotlin/iOS SDK:
- This skill targets the **non-MAUI** .NET for Android workload (project `<TargetFramework>net10.0-android</TargetFramework>` or similar, **no** `<UseMaui>` flag). For MAUI apps, the `DataCaptureView` is hosted as a XAML element and wired through handlers — completely different. If you see `<UseMaui>true</UseMaui>`, **stop and tell the user this skill does not apply.**
- **There is NO `LabelCaptureSettings.builder()` fluent chain.** The Kotlin pattern `LabelCaptureSettings.builder().addLabel().addCustomBarcode().setSymbologies(...).buildFluent("x").buildFluent("label").build()` does **not** exist in .NET. Instead you: (1) build each field via its own factory, (2) collect them in a `List<LabelFieldDefinition>`, (3) `LabelDefinition.Create(name, fields)`, (4) `LabelCaptureSettings.Create(new List<LabelDefinition> { def })`.
- **Each field type is built with a static `Builder()` factory, then `.Build("field-name")`**: `CustomBarcode.Builder().SetSymbologies(IList<Symbology>).Build("Barcode")`, `ExpiryDateText.Builder().SetLabelDateFormat(...).Build("Expiry Date")`, `TotalPriceText.Builder().IsOptional(true).Build("Total Price")`, `CustomText.Builder().SetValueRegex("...").Build("Lot")`. The builder is shared-generic, so `IsOptional(bool)`, `SetValueRegex(es)`, `SetNumberOfMandatoryInstances(int?)` are available on every field builder; `SetSymbology(ies)` on barcode builders; `SetAnchorRegex(es)` / `SetLocation(...)` on custom fields.
- **`LabelCapture` is created with a FACTORY, not `new` and not `forDataCaptureContext`**: `LabelCapture.Create(dataCaptureContext, settings)`. The constructor is private.
- **Symbology names are C# PascalCase**: `Symbology.Ean13Upca`, `Symbology.Gs1DatabarExpanded`, `Symbology.Code128`, `Symbology.Code39`, `Symbology.Qr`, `Symbology.DataMatrix`. They are **not** the Kotlin underscore style (`EAN13_UPCA`). `Symbology` lives in `Scandit.DataCapture.Barcode.Data`.
- **`SetSymbologies` takes an `IList<Symbology>`** (e.g. `new List<Symbology> { ... }`), not a vararg. For one symbology use `SetSymbology(Symbology)`.
- **Only THREE NuGet packages, no separate text-models package.** `Scandit.DataCapture.Core`, `Scandit.DataCapture.Barcode`, and `Scandit.DataCapture.Label`. Text fields (expiry date, price, weight, custom text) are bundled in `Scandit.DataCapture.Label` — there is **no** `label-text-models` artifact like onPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
label-capture-net-ios18.5 KB
---
name: label-capture-net-ios
description: Smart Label Capture (Scandit `LabelCapture`) in .NET for iOS projects (`net*-ios` target framework, `Scandit.DataCapture.Label` NuGet, C#) — extracting multiple fields (price, expiry date, serial or lot number, weight) from a label in one scan via barcode and text fields. Use for integration, label definitions (including prebuilt VIN, price label, 7-segment), captured-session handling, overlays, the Validation Flow, and Scandit .NET SDK version migration — for MAUI apps (`<UseMaui>true</UseMaui>`) use label-capture-net-maui instead.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# Label Capture (Smart Label Capture) .NET for iOS Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit Label Capture APIs, and the **.NET binding differs substantially from the Swift/Objective-C native iOS SDK** *and* from the .NET for Android binding. An agent that pattern-matches from the native iOS (Swift) Label Capture docs will get nearly every call wrong, because the .NET binding does **not** use the Swift fluent settings builder — it builds each field with a per-field factory and assembles a list of definitions.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or builder shapes. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
The .NET-iOS-specific facts most often gotten wrong by pattern-matching from the Swift SDK, the .NET Android binding, or MAUI:
- This skill targets the **non-MAUI** .NET for iOS workload (project `<TargetFramework>net10.0-ios</TargetFramework>` or similar, **no** `<UseMaui>` flag). For MAUI apps, the `DataCaptureView` is hosted as a XAML element and wired through handlers — completely different. If you see `<UseMaui>true</UseMaui>`, **stop and tell the user this skill does not apply.** The official iOS Get Started page mixes in MAUI (XAML / `*.Maui`) snippets — ignore those for a non-MAUI project.
- **There is NO `LabelCaptureSettings.builder()` fluent chain.** The Swift/Kotlin pattern `LabelCaptureSettings.settings { ... }` / `builder().addLabel()...buildFluent(...).build()` does **not** exist in .NET. Instead you: (1) build each field via its own factory, (2) collect them in a `List<LabelFieldDefinition>`, (3) `LabelDefinition.Create(name, fields)`, (4) `LabelCaptureSettings.Create(new List<LabelDefinition> { def })`.
- **Each field type is built with a static `Builder()` factory, then `.Build("field-name")`**: `CustomBarcode.Builder().SetSymbologies(IList<Symbology>).Build("Barcode")`, `ExpiryDateText.Builder().SetLabelDateFormat(...).Build("Expiry Date")`, `TotalPriceText.Builder().IsOptional(true).Build("Total Price")`, `CustomText.Builder().SetValueRegex("...").Build("Lot")`. The builder is shared-generic, so `IsOptional(bool)`, `SetValueRegex(es)`, `SetNumberOfMandatoryInstances(int?)` are available on every field builder; `SetSymbology(ies)` on barcode builders; `SetAnchorRegex(es)` / `SetLocation(...)` on custom fields.
- **`LabelCapture` is created with a FACTORY, not `new` and not `forDataCaptureContext`**: `LabelCapture.Create(dataCaptureContext, settings)`. The constructor is private.
- **`DataCaptureView.Create(DataCaptureContext, CGRect frame)` takes a `CGRect` as its second argument on iOS** — typically `this.View!.Bounds`. This is the **opposite** of the .NET Android binding, where `DataCaptureView.Create(context)` takes only the context. The returned view **is** a `UIKit.UIView` (implicit conversion), so you add it yourself with `this.View.AddSubview(dataCaptureView)` and usually set `AutoresizingMask = FlexibleWidth | FlexibleHeight`. There is no `container.AddView(...)` (that's Android).
- **Symbology names are C# PascalCase**: `Symbology.Ean13Upca`, `Symbology.Gs1DatabarExpanded`, `Symbology.Code128`Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
label-capture-net-maui20.6 KB
---
name: label-capture-net-maui
description: Smart Label Capture (Scandit `LabelCapture`) in .NET MAUI projects (`<UseMaui>true</UseMaui>`, `Scandit.DataCapture.Label` NuGet) — extracting multiple fields (price, expiry date, serial or lot number, weight) from a label in one scan via barcode and text fields. Use for integration, label definitions (prebuilt VIN, price label, 7-segment), captured-session handling, MAUI view hosting and lifecycle, the Validation Flow, and SDK version migration — for non-MAUI .NET projects use `label-capture-net-android` or `label-capture-net-ios` instead.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# Label Capture (Smart Label Capture) .NET MAUI Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit Label Capture APIs, and the **.NET binding differs substantially from the Swift/Kotlin native SDKs**. On top of that, the **MAUI integration differs from both the non-MAUI `label-capture-net-android` / `label-capture-net-ios` skills** in how the SDK is initialized, how the preview is hosted, and how listeners are written. An agent that pattern-matches from the native docs — or even from the per-platform .NET skills — will get key calls wrong.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or builder shapes. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
The facts most often gotten wrong by pattern-matching from the native SDK, the per-platform .NET skills, or the MatrixScan/Barcode MAUI skills:
- This skill targets MAUI apps with **`<UseMaui>true</UseMaui>`**. For non-MAUI .NET projects, use `label-capture-net-android` (for `net*-android`) or `label-capture-net-ios` (for `net*-ios`) instead. Those skills host the preview through a native `UIViewController` / `Activity`, which is completely different.
- **Only FOUR NuGet packages — and there is NO `Scandit.DataCapture.Label.Maui`.** Add `Scandit.DataCapture.Core`, `Scandit.DataCapture.Core.Maui`, `Scandit.DataCapture.Barcode`, and `Scandit.DataCapture.Label`. Unlike MatrixScan/Barcode (which has a `Barcode.Maui` package and a `.UseScanditBarcode()` builder extension), **Label Capture has no `*.Maui` package and no MAUI builder extension** — it reuses the generic `<scandit:DataCaptureView>` from `Core.Maui`. Text recognizers (expiry date, prices, weight, custom text) are bundled in `Scandit.DataCapture.Label` — there is **no** separate `label-text-models` package.
- **Initialization is split and unusual.** In `MauiProgram.CreateMauiApp()` call **`ScanditLabelCapture.Initialize()` directly** (it registers all the Label types and the barcode field builders), and chain **`.UseScanditCore(configure => configure.AddDataCaptureView())`** (which calls `ScanditCaptureCore.Initialize()` and registers the `DataCaptureView` handler). There is **no `UseScanditLabel()`** extension, and you do **not** call `UseScanditBarcode()` or `ScanditBarcodeCapture.Initialize()` for Label Capture — `Symbology` is just an enum and the label's barcode field builders come from `ScanditLabelCapture.Initialize()`. Do **not** add init calls to `MainApplication.OnCreate` / `AppDelegate.FinishedLaunching`; those stay as the MAUI template generates them (just forwarding to `MauiProgram.CreateMauiApp()`).
- **There is NO `LabelCaptureSettings.builder()` fluent chain.** The native pattern `LabelCaptureSettings.settings { ... }` / `builder().addLabel()...build()` does **not** exist in .NET. Instead: (1) build each field via its own factory, (2) collect them in a `List<LabelFieldDefinition>`, (3) `LabelDefinition.Create(name, fields)`, (4) `LabelCaptureSettings.Create(new List<LabelDefinition> { def })`.
- **Each field type is built with a static `Builder()` factory, then `.Build("field-name")`**: `CustomBarcode.Builder().SetSymbPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
label-capture-rn8.72 KB
---
name: label-capture-rn
description: Smart Label Capture (Scandit `LabelCapture`) in React Native projects — extracting multiple fields (price, expiry date, serial or lot number, weight) from a label in one scan, using barcode fields plus text fields with regex patterns. Use for integration, label-definition configuration, captured-label handling, the Validation Flow, and SDK version migration.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# Label Capture React Native Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit Label Capture APIs. Label Capture has evolved across recent SDK releases, and the React Native plugin surface (imports, native linking, pod install, package names) has its own conventions distinct from the web SDK.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
React Native-specific gotchas worth flagging:
- **Listener method names are iOS-style on React Native.** The Validation Flow listener uses `didCaptureLabelWithFields(fields)` and `didSubmitManualInputForField(field, oldValue, newValue)` — NOT the web equivalents `onValidationFlowLabelCaptured` / `onManualInput`. If you see web-style listener names suggested, they are wrong on React Native.
- `DataCaptureContext.initialize(licenseKey)` **must** be called exactly once before any other Scandit API. It sets up `DataCaptureContext.sharedInstance`, which is the singleton everything else reads from. Do not construct multiple contexts. (The official `LabelCaptureSimpleSample` uses the legacy `DataCaptureContext.forLicenseKey(...)` form — both work, but new integrations should use `initialize` for consistency with the rest of the v8 RN docs.)
- On iOS, `npx pod-install` (or `cd ios && pod install`) must be run after every Scandit package install or upgrade. Android auto-links via Gradle.
- Metro's bundler cache frequently masks Scandit package upgrades. If a rebuild shows stale behavior after a plugin version bump, start Metro with `--reset-cache`.
- Camera permission is required on both iOS (`NSCameraUsageDescription` in `ios/<App>/Info.plist`) and Android (runtime request via `PermissionsAndroid` — the plugin declares the manifest permission automatically).
- Field definitions on RN are **class-based**, not builder-based: `CustomBarcode.initWithNameAndSymbologies(name, [...])`, `new ExpiryDateText(name)`, `field.optional = true`, `LabelCaptureSettings.settingsFromLabelDefinitions([...], {})`. There is no `LabelCaptureSettingsBuilder` / `LabelDefinitionBuilder` and no v8.5 factory-function sugar — those are web-only.
## Product Guidance
Apply these rules whenever the user is making a design decision, not just an API question. They reflect how Scandit recommends Label Capture be integrated.
- **Default to the Validation Flow.** New integrations should use `LabelCaptureValidationFlowOverlay`, not `LabelCaptureBasicOverlay`. Recommend the basic/advanced overlay path only when the customer explicitly needs a live AR overlay or a UI that the Validation Flow's fixed layout cannot produce. See `references/validation-flow.md`.
- **Validation Flow must be rendered full-screen.** Do not place it inside a card, half-sheet, modal slice, or partial-height widget — the layout assumes full-screen height for the field checklist, manual-entry sheet, and keyboard.
- **Prefer pre-made labels first, then pre-made fields, then custom.** Try in this order: (1) does a **pre-made label definition** cover the use case? — `LabelDefinition.createVinLabelDefinition(name)`, `LabelDefinition.createPriceCaptureDefinition(name)`, `LabelDefinition.createSevenSegmentDisplayLabelDefinition(name)`. (2) Can the label be built from **pre-made fields**? —Preview of the first 4,000 characters. Read full instructions →
Referenced files: 5 — file references are metadata, not package contents.
label-capture-web4.81 KB
--- name: label-capture-web description: Smart Label Capture (Scandit `LabelCapture`) in web/browser (TypeScript/JavaScript) projects — extracting multiple fields (price, expiry date, serial or lot number, weight) from a label in one scan, using barcode fields plus text fields with regex patterns. Use for integration, label-definition configuration, captured-session handling, overlay UI, the Validation Flow, and SDK version migration. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # Label Capture Web Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit Label Capture APIs. Label Capture has evolved across recent SDK releases: - At the v7→v8 major bump (v7.6 → v8.0), `LabelFieldDefinition` regex properties were renamed (`pattern`→`valueRegex`, `patterns`→`valueRegexes`, `dataTypePattern`→`anchorRegex`, `dataTypePatterns`→`anchorRegexes`). - In v8.2, the Validation Flow UI was redesigned and three customisation properties were deprecated. - In v8.5, additive ergonomic shorthands were introduced for the builders. **ARE (Adaptive Recognition Engine)** is Scandit's cloud-based OCR fallback — enabled via `AdaptiveRecognitionMode.Auto` on label definitions. It is currently in Beta, works **only with the Validation Flow overlay**, and requires a license key with the ARE feature flag enabled. Trial keys can be issued for evaluation; production keys require contacting support@scandit.com. Do not enable it by default. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or builder shapes. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Questions about other Scandit products or scanning modes** (e.g. SparkScan, Barcode Capture, MatrixScan, ID Capture, or general SDK setup questions not specific to Label Capture) → hand off to the `data-capture-sdk` skill. Do not attempt to answer questions about other capture modes from memory — the dedicated skill has the correct and up-to-date references. - **Integrating Label Capture from scratch** (e.g. "add Label Capture to my app", "scan a price tag with barcode and expiry date", "how do I use Smart Label Capture", "how do I enable the Validation Flow", "I want to build a label scanning app", "which overlay should I use", "what is ARE", "how do I improve OCR accuracy") → read `references/integration.md` and follow the instructions there. If the user has no existing project, the guide will direct you to offer the pre-built sample first. - **Migrating or upgrading an existing Label Capture integration** (e.g. "upgrade my Label Capture to the latest SDK", "migrate from v8.1 to v8.2", "what changed between SDK versions for Label Capture") → read `references/migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, or view modifiers. If unsure whether an API exists or how it is called — or if a compile error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched (e.g. the Advanced Configurations page) contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in your fetch prompt. 2. If no direct link was found, fetch the API index (see **Full API reference** in the table below), extract the actual link from it, and follow that. URL structur
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-ar-android5.49 KB
---
name: matrixscan-ar-android
description: MatrixScan AR (Barcode AR, BarcodeAr) — scanning multiple barcodes at once with AR highlights and annotations over tracked barcodes in Android (Kotlin/Java) projects. Use for integration, scan settings, tracked-barcode handling, highlight and annotation providers, SDK version migration, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# MatrixScan AR Android Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeAr API changes between major SDK versions — class names, constructor signatures, provider interfaces, and session types have all evolved.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Android-specific gotchas worth flagging:
- `BarcodeAr(dataCaptureContext, settings)` is a direct constructor — **not** a `forDataCaptureContext()` factory (that is the BarcodeCapture pattern). On Android, BarcodeAr takes both the context and settings directly.
- `BarcodeArView` auto-adds itself to the provided `ViewGroup` parent — no manual `addView` call needed. Call `barcodeArView.start()` after providers are set up to begin scanning.
- `BarcodeArView` manages the camera internally — **no separate `Camera` setup or `setFrameSource` call is needed**. Camera position is configured via `BarcodeArViewSettings.defaultCameraPosition`.
- Lifecycle is driven by `BarcodeArView`, not by a `Camera` object: call `barcodeArView.onResume()`, `barcodeArView.onPause()`, and `barcodeArView.onDestroy()` from the corresponding Activity/Fragment callbacks.
- `BarcodeArListener.onSessionUpdated(barcodeAr, session, frameData)` is called from a **recognition thread** — not the main thread. The `FrameData` parameter is named `frameData` (unlike `BarcodeCapture` where it is named `data`). Any UI work must be dispatched via `runOnUiThread {}`.
- `BarcodeArHighlightProvider.highlightForBarcode` and `BarcodeArAnnotationProvider.annotationForBarcode` are invoked on the **main thread**. Their results are delivered via a callback — invoke `callback.onData(highlight)` or `callback.onData(annotation)` (pass `null` to hide the element). Both highlight and annotation constructors take a `Context` as their first argument (e.g. `BarcodeArRectangleHighlight(context, barcode)`).
- Android symbology names use underscores: `Symbology.EAN13_UPCA`, `Symbology.CODE39` — not camelCase.
- All symbologies are disabled by default in `BarcodeArSettings`. Enabling only what the app needs improves tracking performance.
- Request the `CAMERA` permission at runtime before scanning starts; the manifest declaration alone is not sufficient.
- `BarcodeArFeedback` is in `com.scandit.datacapture.barcode.ar.feedback` — **not** `ar.capture`. Import: `import com.scandit.datacapture.barcode.ar.feedback.BarcodeArFeedback`.
- `BarcodeArInfoAnnotationBodyComponent` is in `com.scandit.datacapture.barcode.ar.ui.annotations.info` — **not** `ar.ui.annotations`. Import: `import com.scandit.datacapture.barcode.ar.ui.annotations.info.BarcodeArInfoAnnotationBodyComponent`. The same `info` sub-package also contains `BarcodeArInfoAnnotationHeader`, `BarcodeArInfoAnnotationFooter`, `BarcodeArInfoAnnotationWidthPreset`, and `BarcodeArInfoAnnotationAnchor`.
## Intent Routing
Based on the user's request, load the appropriate reference file before responding:
- **Integrating BarcodeAr from scratch** (e.g. "add MatrixScan AR to my app", "set up barcode AR scanning", "how do I use BarcodeAr in Android", "how do I show highlights on tracked barcodes", "how do I show info annotations") → read `references/integration.md` and follow the instructions there.
## API Usage Policy
Only use APIs that are explicitly Preview of the first 4,000 characters. Read full instructions →
Referenced files: 1 — file references are metadata, not package contents.
matrixscan-ar-annotation-ios4.82 KB
--- name: matrixscan-ar-annotation-ios description: MatrixScan AR annotations in native iOS Swift projects (UIKit/SwiftUI — Swift only, not C#/.NET) — info annotations, popovers, status icons, and responsive annotations attached to tracked barcodes. Use for adding annotations, customizing their appearance and content, controlling when they appear, or handling annotation taps — pipeline setup belongs to matrixscan-ar-ios; C#/.NET apps use matrixscan-ar-net-ios or matrixscan-ar-net-maui. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan AR annotation iOS Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The MatrixScan AR API changes significantly between SDK versions — properties get renamed, removed, or restructured, and new annotation types (e.g. `BarcodeArResponsiveAnnotation`) have been added mid-v8. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or view modifiers. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. This skill is scoped to **annotations only**. Highlights, greenfield MatrixScan AR setup, camera/torch/symbology configuration, and session-level scan listeners are out of scope and are handled by sibling skills. ## Intent Routing Based on the user's request, load the appropriate reference file before responding. A single question may span multiple intents (e.g. "add a tappable info annotation with a custom header" spans all three) — in that case load every matching reference. - **Integrating MatrixScan AR annotations** (e.g. "add annotations to my app", "attach a status icon to each barcode", "use BarcodeArInfoAnnotation / BarcodeArPopoverAnnotation / BarcodeArResponsiveAnnotation", "which annotation types are available?") → read `references/integration.md` and follow the instructions there. Before writing any integration code, determine whether the project uses UIKit or SwiftUI (check for `import SwiftUI`, an `@main` `App` struct, `SceneDelegate`/`AppDelegate`, `.storyboard`/`.xib` files, etc.) and load the matching Get Started page from the References table below. - **Customizing annotations** (e.g. "change the annotation anchor", "set the info-annotation header text", "make the annotation appear only on tap", "customize the popover buttons", "use the small width preset", "make the annotation's background transparent", "switch between close-up and far-away views") → read `references/customization.md` and follow the instructions there. - **Handling user interaction with MatrixScan AR annotations** (e.g. "when a user taps an annotation do ...", "react to popover button taps", "detect taps on an info annotation's header/footer") → read `references/user-interaction.md` and follow the instructions there. Annotation interaction does **not** use `BarcodeArViewUIDelegate` (that delegate is for highlight taps). Each tappable annotation type has its own delegate. See `user-interaction.md`. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, or view modifiers. If unsure whether an API exists or how it is called — or if a compile error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched (e.g. an annotation class page) contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in your fetch prompt. 2. If no direct link was found, fetch the API index (see **Full API reference** in
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
matrixscan-ar-capacitor5.43 KB
--- name: matrixscan-ar-capacitor description: Capacitor MatrixScan AR (Barcode AR, BarcodeAr) — scanning multiple barcodes at once with AR highlights and annotations, BarcodeArView attached to a DOM element, in Capacitor iOS/Android apps (not the plain-web sibling). Use for integration, symbology configuration, highlight and annotation providers, session handling, migration from BarcodeBatch/BarcodeTracking, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan AR Capacitor Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeAr API is new in Capacitor 8.2 — there is no prior Capacitor history to reference. Properties, constructor signatures, provider interfaces, and view attachment patterns may differ from other platforms or from general knowledge. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. Capacitor-specific gotchas worth flagging: - `ScanditCaptureCorePlugin.initializePlugins()` **must** be called (and awaited) before any other Scandit API — including `DataCaptureContext` construction. Forgetting this produces runtime errors that look unrelated to initialization. - `npx cap sync` must be run after every plugin version change to propagate native artifacts into iOS/Android. Skipping it yields a web/native version mismatch at runtime. - **BarcodeArView requires a DOM element.** Unlike SparkScan, BarcodeArView is not a floating native overlay; it mirrors its size and position from a DOM element. You must call `await barcodeArView.connectToElement(element)` to attach it to the `<div id="barcode-ar-view">` container in the HTML. - **Minimum SDK version is 8.2** for BarcodeAr on Capacitor. There is no v6 or v7 history to migrate from on this platform. - `BarcodeAr` is constructed with `new BarcodeAr(settings)` — the context is wired separately via `BarcodeArView`, not passed to the mode constructor. - Camera is set up explicitly via `BarcodeAr.createRecommendedCameraSettings()`, `Camera.withSettings(cameraSettings)`, and `context.setFrameSource(camera)` — BarcodeArView manages the camera lifecycle once running. - The `highlightProvider` and `annotationProvider` are plain objects with async methods, set as properties on the `BarcodeArView` instance. - iOS requires `NSCameraUsageDescription` in `Info.plist`. Android handles camera permissions automatically. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating MatrixScan AR from scratch** (e.g. "add MatrixScan AR to my app", "set up Barcode AR", "how do I use BarcodeArView in Capacitor", "how do I show annotations", "how do I highlight barcodes") → read `references/integration.md` and follow the instructions there. - **Migrating from BarcodeBatch / BarcodeTracking to BarcodeAr** (e.g. "migrate my BarcodeBatch code", "replace BarcodeTracking with BarcodeAr", "upgrade from MatrixScan to BarcodeAr", the target file imports `BarcodeBatch`, `BarcodeBatchBasicOverlay`, `BarcodeBatchAdvancedOverlay`, `TrackedBarcodeView`, or contains `context.setMode(` with a BarcodeBatch instance) → read `references/migration.md` and follow the 10-step migration process there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, property names, or imports. If unsure whether an API exists or how it is called — or if a TypeScript / runtime error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never cons
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-ar-cordova5.82 KB
---
name: matrixscan-ar-cordova
description: Cordova MatrixScan AR (Barcode AR, BarcodeAr) via the scandit-cordova-datacapture-* plugins — scanning multiple barcodes at once with AR highlights and annotations (info annotations, popovers, status icons) on tracked barcodes. Use for integration, symbology configuration, highlight and annotation providers, BarcodeArView customization, migration from BarcodeBatch/BarcodeTracking, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# MatrixScan AR Cordova Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeAr API is new in Cordova plugin 8.2 — it did not exist in v6 or v7 for Cordova. There is no migration history to reference.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Cordova-specific gotchas worth flagging:
- The Scandit SDK is exposed on the global `window.Scandit` object. The npm package names (`scandit-cordova-datacapture-*`) are plugin manifests — they are **not** runtime ES modules. Do not emit `import { ... } from 'scandit-cordova-datacapture-*'` in user code that will run in the WebView; use `Scandit.X` (with an optional `global.d.ts` for typing) instead. Only Ionic/Angular/Webpack-bundled projects import from the packages directly.
- `document.addEventListener('deviceready', ...)` is the **only** safe gate for Scandit APIs. Do not run any Scandit call at module load time — it will fail because the Cordova bridge is not ready yet.
- `BarcodeArView` in Cordova uses a **DOM-overlay model**: the native AR view is sized and positioned to mirror a plain HTML `<div>` element. You must call `barcodeArView.connectToElement(element)` after construction to link the view to a DOM node, and `barcodeArView.detachFromElement()` when tearing down.
- `new Scandit.BarcodeAr(settings)` — this is the Cordova constructor (not `BarcodeAr.forContext`). Context is wired separately via `context.setFrameSource(camera)`.
- Camera is managed manually in BarcodeAr on Cordova: obtain it with `Scandit.Camera.withSettings(Scandit.BarcodeAr.createRecommendedCameraSettings())`, set it as the frame source, and call `camera.switchToDesiredState(Scandit.FrameSourceState.On/Off)` to start/stop.
- Highlight and annotation providers return `Promise<BarcodeArHighlight | null>` and `Promise<BarcodeArAnnotation | null>` respectively — make the methods `async` or return a Promise explicitly.
- After changing plugin versions, run `cordova prepare` (and reinstall the platform if needed) to propagate the new native artifacts.
## Intent Routing
Based on the user's request, load the appropriate reference file before responding:
- **Integrating MatrixScan AR from scratch** (e.g. "add MatrixScan AR to my app", "set up AR barcode overlays", "how do I use BarcodeAr in Cordova", "how do I show info annotations", "how do I customize highlights") → read `references/integration.md` and follow the instructions there.
- **Migrating from BarcodeBatch / BarcodeTracking to BarcodeAr** (e.g. "migrate my MatrixScan code", "update from BarcodeBatch to BarcodeAr", "I'm using BarcodeBatchBasicOverlay / BarcodeBatchAdvancedOverlay", "convert my old MatrixScan integration", "we have BarcodeTracking and need to upgrade") → read `references/migration.md` and follow the 10-step migration guide there. Key Cordova-specific caveat: `BarcodeArCustomAnnotation` is **NOT available on Cordova** — freeform HTML overlays from `BarcodeBatchAdvancedOverlay` must be replaced with built-in annotation types (`BarcodeArInfoAnnotation`, `BarcodeArPopoverAnnotation`, `BarcodeArStatusIconAnnotation`, or `BarcodeArResponsiveAnnotation`).
## API Usage Policy
Only use APIs that are explicitlPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-ar-flutter5.73 KB
--- name: matrixscan-ar-flutter description: MatrixScan AR (Barcode AR, BarcodeAr) in Flutter projects (scandit_flutter_datacapture_barcode_ar) — scanning multiple barcodes at once with AR highlights and annotations over tracked barcodes. Use for integration, scan settings, highlight and annotation providers, migration from BarcodeBatch/BarcodeTracking, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan AR Flutter Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeAr API changes between major SDK versions — class names, constructor signatures, provider interfaces, and the Flutter plugin import path have all evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. Flutter-specific gotchas worth flagging: - `await ScanditFlutterDataCaptureBarcode.initialize()` **must** be called (and awaited) in `main()` before `runApp(...)`, after `WidgetsFlutterBinding.ensureInitialized()`. Forgetting this yields a platform-channel error that can look unrelated to initialization. - `BarcodeArView` is a Flutter `StatefulWidget`. Create it once in `initState()` (not in `build()`), store it as a field, and embed it in the widget tree. Creating it inside `build()` tears it down and rebuilds the native view on every rebuild. - The highlight and annotation providers (`BarcodeArHighlightProvider`, `BarcodeArAnnotationProvider`) return `Future<BarcodeArHighlight?>` and `Future<BarcodeArAnnotation?>` respectively. These callbacks are async — do not return plain values. - `BarcodeArCustomHighlight` and `BarcodeArCustomAnnotation` use Flutter `Widget` children that are serialized as snapshots. Animated widgets are captured as a still frame at render time — they will not animate inside the AR overlay. - The BLoC (or equivalent controller) owns `DataCaptureContext`, `BarcodeAr`, and the camera lifecycle. The `State` class holds the `BarcodeArView` and implements the provider interfaces. - Camera permission is required on both iOS (`NSCameraUsageDescription` in `ios/Runner/Info.plist`) and Android (runtime request via `permission_handler` — the plugin declares the manifest permission automatically). - The barcode AR import is `scandit_flutter_datacapture_barcode_ar` — a separate barrel file from the main `scandit_flutter_datacapture_barcode` import. - `Symbology` enum values use **lowerCamelCase** in Dart: `Symbology.code128`, `Symbology.ean13Upca`, `Symbology.code39`, `Symbology.qr`, `Symbology.dataMatrix`. Do not write `Symbology.Code128` / `Symbology.EAN13UPCA` — that's the JS/TS form and will not compile in Dart. ## Intent Routing Based on the user's request, load the reference file before responding: - **Integrating BarcodeAr from scratch** (e.g. "add MatrixScan AR to my app", "set up barcode AR scanning", "how do I use BarcodeAr in Flutter", "how do I show highlights on tracked barcodes", "how do I show info annotations") → read `references/integration.md` and follow the instructions there. - **Migrating from BarcodeBatch / BarcodeTracking to BarcodeAr** (e.g. "migrate from BarcodeBatch", "convert BarcodeBatch to BarcodeAr", "move from MatrixScan to MatrixScan AR", "replace BarcodeTracking with BarcodeAr", "upgrade my old MatrixScan code to AR") → read `references/migration.md` and follow the 10-step migration guide there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, property names, or imports. If unsure whether an API exists or how it is called — or if an analyzer / runtime error occurs — fetch the relevant reference page before responding. Do not te
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-ar-highlight-ios3.78 KB
--- name: matrixscan-ar-highlight-ios description: MatrixScan AR highlights in iOS projects (Swift, UIKit/SwiftUI) — the shapes drawn over tracked barcodes. Use for adding highlights, customizing or modifying existing ones, or handling highlight tap interaction — pipeline setup belongs to matrixscan-ar-ios. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan AR highlight iOS Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The MatrixScan AR API changes significantly between major SDK versions — properties get renamed, removed, or restructured. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or view modifiers. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. ## Intent Routing Based on the user's request, load the appropriate reference file before responding. A single question may span multiple intents (e.g. "add tappable highlights to my app" is both integration and user-interaction) — in that case load every matching reference. - **Integrating MatrixScan AR highlights** (e.g. "add MatrixScan AR highlights to my app", "set up MatrixScan AR highlights", "Which MatrixScan AR highlight types are available?", "how do I use MatrixScan AR highlights") → read `references/integration.md` and follow the instructions there. Before writing any integration code, determine whether the project uses UIKit or SwiftUI (check for `import SwiftUI`, an `@main` `App` struct, `SceneDelegate`/`AppDelegate`, `.storyboard`/`.xib` files, etc.) and load the matching Get Started page from the References table below. - **Handling user interaction with MatrixScan AR highlights** (e.g. "how do I handle user interaction in MatrixScan AR highlights?", "when the user presses a MatrixScan AR highlight do ...") → read `references/user-interaction.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, or view modifiers. If unsure whether an API exists or how it is called — or if a compile error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched (e.g. the Advanced Configurations page) contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in your fetch prompt. 2. If no direct link was found, fetch the API index (see **Full API reference** in the table below), extract the actual link from it, and follow that. URL structures can vary (e.g. `api/ui/` subdirectory) and guessing will lead to 404s. ## References Use this table to pick the right page to fetch for a given question, and include the link in your answer so the user can explore further. Do not tell the user to go read the docs themselves. | Topic | Resource | |---|---| | UIKit integration | [Get Started (UIKit)](https://docs.scandit.com/sdks/ios/matrixscan-ar/get-started/) · [Sample](https://github.com/Scandit/datacapture-ios-samples/tree/master/03_Advanced_Batch_Scanning_Samples/01_Batch_Scanning_and_AR_Info_Lookup/MatrixScanARSimpleSample) | | SwiftUI integration | [Get Started (SwiftUI)](https://docs.scandit.com/sdks/ios/matrixscan-ar/get-started-with-swift-ui/) | | Full API reference | [MatrixScan AR API](https://docs.scandit.com/data-capture-sdk/ios/barcode-capture/api.html) |
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-ar-ios4.81 KB
--- name: matrixscan-ar-ios description: MatrixScan AR scanning pipeline in iOS projects (Swift, UIKit/SwiftUI) — BarcodeAr mode and settings, BarcodeArView, listener, feedback, camera and controls, plus migration from MatrixScan Batch (BarcodeBatch/BarcodeTracking). Use for integration, configuration, or troubleshooting — highlight and annotation work routes to the sibling skills matrixscan-ar-highlight-ios and matrixscan-ar-annotation-ios. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan AR iOS Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The MatrixScan AR API changes between SDK versions — classes get renamed, restructured, or replaced (e.g. `BarcodeTracking` → `BarcodeBatch` → `BarcodeAr`). **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or view modifiers. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. ## Scope This skill is scoped to the **MatrixScan AR scanning pipeline**: `DataCaptureContext`, `BarcodeAr` mode, `BarcodeArSettings`, `BarcodeArView`, `BarcodeArViewSettings`, `BarcodeArListener`, `BarcodeArFeedback`, camera and control visibility. Out of scope: - **Highlights** (customizing the shapes drawn over detected barcodes — `BarcodeArHighlightProvider`, `BarcodeArRectangleHighlight`, `BarcodeArCircleHighlight`, etc.) — handled by the `matrixscan-ar-highlight-ios` skill. - **Annotations** (info cards, status icons, popovers, responsive annotations — `BarcodeArAnnotationProvider`, `BarcodeArInfoAnnotation`, `BarcodeArPopoverAnnotation`, etc.) — handled by the `matrixscan-ar-annotation-ios` skill. If a user question spans integration **and** highlight/annotation customization, cover the integration part here and tell the user which sibling skill handles the rest. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Setting up or adjusting the MatrixScan AR scanning pipeline** (e.g. "add MatrixScan AR to my app", "set up the AR scanner", "enable these symbologies", "configure feedback / torch / camera / controls", "change the camera settings", "show the zoom control") → read `references/integration.md` and follow the instructions there. If the project already has MatrixScan AR wired up, do not re-create the context, mode, view, or lifecycle — locate the existing ones (grep for `BarcodeArView`, then `BarcodeAr`) and change only what the user asked for. Before writing code, determine whether the project uses UIKit or SwiftUI (check for `import SwiftUI`, an `@main` `App` struct, `SceneDelegate`/`AppDelegate`, `.storyboard`/`.xib` files, etc.) and use the matching Get Started page from the References table below. - **Migrating from MatrixScan Batch to MatrixScan AR** (e.g. "migrate from BarcodeBatch / BarcodeTracking to MatrixScan AR", "replace MatrixScan Batch with MatrixScan AR", "switch from overlay-based scanning to AR") → read `references/migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, or view modifiers. If unsure whether an API exists or how it is called — or if a compile error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in your fetch prompt. 2. If no direct link was found, fetch the API index
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-ar-net-android17.2 KB
--- name: matrixscan-ar-net-android description: MatrixScan AR (Barcode AR, BarcodeAr) in .NET for Android projects (`net*-android` TFM, `Scandit.DataCapture.Barcode` NuGet, non-MAUI — MAUI apps use matrixscan-ar-net-maui) — scanning multiple barcodes at once with AR highlights and annotations. Use for integration, settings, listeners/events, highlight and annotation providers, lifecycle, SDK version migration, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan AR .NET for Android Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The `BarcodeAr` API is relatively new (introduced in dotnet.android 7.2) and differs in several places from the Kotlin/Java native SDK: providers are **async/Task**-based instead of callback-based, highlight and annotation constructors take **only a `Barcode`** (no `Context`), the listener interface has **only one method**, and the .NET binding uses PascalCase, `TimeSpan` instead of `TimeInterval`, etc. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. .NET-Android-specific gotchas worth flagging: - This skill targets the **non-MAUI** .NET for Android workload (project `<TargetFramework>net10.0-android</TargetFramework>` or similar, no `<UseMaui>` flag). For MAUI apps, use a MAUI-targeted skill instead — `BarcodeArView` is hosted very differently there. - **`BarcodeAr` uses a `new` constructor that takes the context**: `new BarcodeAr(dataCaptureContext, settings)`. There is no `BarcodeAr.Create(...)` / `BarcodeAr.ForDataCaptureContext(...)` factory in .NET. `BarcodeArSettings` also uses plain `new`. (`DataCaptureContext.ForLicenseKey(key)` still uses the factory form — it lives in Core.) - **`BarcodeArView.Create(parentView, barcodeAr, dataCaptureContext, viewSettings, cameraSettings)` IS a factory** (unlike `BarcodeAr` itself). The `cameraSettings` argument is nullable — pass `null` to use `BarcodeAr.RecommendedCameraSettings`. The `parentView` is an `Android.Views.View` / `ViewGroup` (typically a `FrameLayout` or the activity's root content view). There is **no `BarcodeArCoordinatorLayout`** — that container is SparkScan-specific; `BarcodeArView` simply attaches itself to whatever `ViewGroup` you pass. - **`BarcodeArView` is `IDisposable`, not an Android `View` itself.** The class declares `public static implicit operator View(BarcodeArView view)` that converts to `Android.Views.View` when needed (e.g. for native interop), but you do **not** add it to the view hierarchy yourself — the `Create` factory attaches it to `parentView` automatically. - Lifecycle on the view is `barcodeArView.OnResume()` / `barcodeArView.OnPause()` — these are Android-only methods (guarded by `#if __ANDROID__` in the binding) and they are **not** the activity's `OnPause`/`OnResume`. Forward the activity calls into them. **`OnDestroy()` does not exist on the .NET `BarcodeArView` — call `Dispose()` instead** (in the activity's `OnDestroy` or `Dispose`). - **`IBarcodeArListener` has only one method:** `OnSessionUpdated(BarcodeAr, BarcodeArSession, IFrameData)`. There are **no `OnObservationStarted` / `OnObservationStopped` callbacks** like the Kotlin `BarcodeArListener` has. Implementing those will produce compile errors — the interface simply does not declare them. - Prefer the **event API** (`barcodeAr.SessionUpdated += handler`) over the listener interface in idiomatic C#. The handler receives `BarcodeArEventArgs` with `BarcodeAr`, `Session`, and `FrameData`. `AddListener(IBarcodeArListener)` still works for parity with other platforms. - **`OnSessionUpdated` / `SessionUpdated` runs on a background recognition thread.** Dispatch any UI update via `RunOnUiThrea
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-ar-net-ios18.1 KB
--- name: matrixscan-ar-net-ios description: MatrixScan AR (Barcode AR, BarcodeAr) in .NET for iOS projects (`net*-ios` TFM, `Scandit.DataCapture.Barcode` NuGet, non-MAUI — MAUI apps use matrixscan-ar-net-maui) — scanning multiple barcodes at once with AR highlights and annotations (info annotations, popovers, status icons) in C#. Use for integration, settings, listeners/events, highlight and annotation providers, torch/zoom/macro controls, lifecycle, SDK version migration, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan AR .NET for iOS Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The `BarcodeAr` API is relatively new (introduced in `dotnet.ios` 7.2) and differs in several places from the Swift native SDK: providers are **async/Task**-based instead of delegate-based, highlight and annotation constructors take **only a `Barcode`** (no `context` argument), the listener interface has **only one method**, `BarcodeArView` is **`IDisposable`** rather than a `UIView` subclass, and the .NET binding uses PascalCase, `TimeSpan` instead of `TimeInterval`, etc. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. .NET-iOS-specific gotchas worth flagging: - This skill targets the **non-MAUI** .NET for iOS workload (project `<TargetFramework>net10.0-ios</TargetFramework>` or similar, no `<UseMaui>` flag). For MAUI apps, use a MAUI-targeted skill instead — `BarcodeArView` is hosted very differently there (XAML / `Microsoft.Maui.Controls.View`). - **`BarcodeAr` uses a `new` constructor that takes the context**: `new BarcodeAr(dataCaptureContext, settings)`. There is no `BarcodeAr.Create(...)` / `BarcodeAr.ForDataCaptureContext(...)` factory in .NET. `BarcodeArSettings` also uses plain `new`. (`DataCaptureContext.ForLicenseKey(key)` still uses the factory form — it lives in Core.) - **`BarcodeArView.Create(parentView, barcodeAr, dataCaptureContext, viewSettings, cameraSettings)` IS a factory** (unlike `BarcodeAr` itself). The `cameraSettings` argument is nullable — pass `null` to use `BarcodeAr.RecommendedCameraSettings`. The `parentView` is a `UIView` (typically `this.View` of the hosting view controller, or a dedicated container `UIView` outlet). `BarcodeArView` attaches itself to the `parentView` automatically — do **not** call `this.View.AddSubview(...)` on it. - **`BarcodeArView` is `IDisposable`, not a `UIView` subclass.** The class declares `public static implicit operator View(BarcodeArView view)` that converts to `UIKit.UIView` when needed (e.g. for native interop, since `View` is aliased to `UIView` on iOS via `global using View = UIKit.UIView;`), but you do **not** add it to the view hierarchy yourself — the `Create` factory attaches it to `parentView` automatically. - **There is no `OnResume()` / `OnPause()` on the .NET `BarcodeArView` on iOS.** Those methods are **Android-only** (guarded by `#if __ANDROID__` in the binding). On iOS the lifecycle is `barcodeArView.Start()` in `ViewWillAppear` and `barcodeArView.Stop()` in `ViewWillDisappear` — matching the official `MatrixScanARSimpleSample`. Calling `barcodeArView.OnResume()` from a .NET iOS view controller is a compile error. - **`BarcodeArView.Dispose()` does the teardown.** There is no `OnDestroy()` method on `BarcodeArView` (that is an Android Java/Kotlin idiom). Call `Dispose()` from your view controller's `Dispose(bool)` override or rely on `using` semantics if you own a short-lived instance. - **iOS-only view controls.** `ShouldShowMacroModeControl` (`bool`) and `MacroModeControlPosition` (`Anchor`) exist **only on iOS** (Android does not expose these). They sit alongside the cross-platform `ShouldShowTor
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-ar-net-maui24.1 KB
--- name: matrixscan-ar-net-maui description: MatrixScan AR (Barcode AR, BarcodeAr) in .NET MAUI projects (`Scandit.DataCapture.Barcode.Maui` NuGet, XAML BarcodeArView) — scanning multiple barcodes at once with AR highlights and annotations. For non-MAUI .NET projects use matrixscan-ar-net-android or matrixscan-ar-net-ios. Use for integration, settings, listeners/events, highlight and annotation providers, lifecycle, SDK version migration, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan AR .NET MAUI Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The `BarcodeAr` API is relatively new (first shipped on `dotnet.android` / `dotnet.ios` in 7.2), and the **MAUI** binding is a thin layer on top that turns the per-TFM `BarcodeArView` into a XAML control — it changes the class identity, the namespace, the assembly name, the constructor surface, the lifecycle hooks, and the way controls are wired. Patterns from the standalone `matrixscan-ar-net-android` / `matrixscan-ar-net-ios` skills do not always apply unchanged here. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. MAUI-specific gotchas worth flagging: - This skill targets MAUI apps with `<UseMaui>true</UseMaui>`. For non-MAUI .NET projects, use `matrixscan-ar-net-android` (for `net*-android`) or `matrixscan-ar-net-ios` (for `net*-ios`) instead. The MAUI `BarcodeArView` is a completely different class (`Scandit.DataCapture.Barcode.Ar.UI.Maui.BarcodeArView` deriving from `Microsoft.Maui.Controls.View`) with bindable properties and no `Create(parentView, ...)` factory — patterns from the per-TFM skills will not compile here. - **Fetch the SDK version from NuGet before editing the `.csproj`.** WebFetch `https://www.nuget.org/packages/Scandit.DataCapture.Barcode.Maui/` and read the latest **stable** version off the page (skip `-beta.*` / `-preview.*` / `-rc.*` suffixes). Do not guess — versions from training data are stale and `dotnet restore` will fail with `NU1103` if the pinned version isn't published. Use the same version for all four packages. - **Android `SupportedOSPlatformVersion` must be ≥ `24`.** The MAUI template defaults to `21`, which is below Scandit's Android AAR minimum and fails the build with `uses-sdk:minSdkVersion 21 cannot be smaller than version 24 declared in library`. Bump the `.csproj` value to `24.0` as part of the integration. iOS minimum is `15.0` (matches the MAUI template default). - Required NuGet packages: `Scandit.DataCapture.Core`, `Scandit.DataCapture.Core.Maui`, `Scandit.DataCapture.Barcode`, `Scandit.DataCapture.Barcode.Maui`. All four are needed — Core/Barcode provide the platform bindings, Core.Maui/Barcode.Maui provide the MAUI builder extensions and handlers. - **`MauiProgram.cs` builder chain for BarcodeAr is `.UseScanditCore().UseScanditBarcode(configure => configure.AddBarcodeArView())`.** `UseScanditCore()` takes **no** configure lambda — BarcodeAr has its own dedicated MAUI control (`<scandit:BarcodeArView>`), it does **not** use the generic `<scandit:DataCaptureView>`. `UseScanditBarcode(c => c.AddBarcodeArView())` **must** include the inner configure with `AddBarcodeArView()` to register the MAUI handler. This is the SparkScan shape, not the BarcodeBatch shape (the BarcodeBatch MAUI integration uses `.UseScanditCore(c => c.AddDataCaptureView()).UseScanditBarcode()` because BarcodeBatch has no dedicated MAUI view). Do not cross-pollinate the two patterns. - **`<scandit:BarcodeArView>` is a MAUI `View` (XAML control), not `IDisposable`.** There is **no `BarcodeArView.Create(parentView, barcodeAr, dataCaptureContext, settings, cameraSettings)` factory in MAUI** — that sig
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
matrixscan-ar-rn5.83 KB
--- name: matrixscan-ar-rn description: MatrixScan AR (Barcode AR, BarcodeAr) in React Native projects — scanning multiple barcodes at once with AR overlays, highlights, and annotations on tracked barcodes. Use for integration, symbology configuration, highlight and annotation providers, session handling, feedback, migration from BarcodeBatch, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan AR React Native Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeAr* API surface changes significantly between major SDK versions — classes get renamed, constructor signatures change, properties are restructured, and the React Native plugin surface (imports, native linking, pod install, package names) has also evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. React Native-specific gotchas worth flagging: - `DataCaptureContext.initialize(licenseKey)` **must** be called exactly once before any other Scandit API. It sets up `DataCaptureContext.sharedInstance`, which is the singleton everything else reads from. Do not construct multiple contexts. - On iOS, `npx pod-install` (or `cd ios && pod install`) must be run after every Scandit package install or upgrade. Android auto-links via Gradle — no manual step there. - Metro's bundler cache frequently masks Scandit package upgrades. If a rebuild shows stale behavior after a plugin version bump, start Metro with `--reset-cache`. - `BarcodeArView` is a React component that **wraps** its children — the native AR overlay renders on top of your JSX tree. Children render under the native AR layer. Do not render `BarcodeArView` as a sibling to the content that should appear under the overlay. - Highlight providers (`BarcodeArHighlightProvider.highlightForBarcode`) and annotation providers (`BarcodeArAnnotationProvider.annotationForBarcode`) fire **asynchronously, once per barcode**. They are `async` functions that return a Promise resolving to the highlight or annotation object. Do not assume synchronous return. - `BarcodeArView` must be started explicitly via `view.start()` in the `ref` callback. Unlike SparkScan, the view does not start automatically on mount. - Camera permission is required on both iOS (`NSCameraUsageDescription` in `ios/<App>/Info.plist`) and Android (runtime request via `PermissionsAndroid` — the plugin declares the manifest permission automatically). - `BarcodeAr` requires SDK 7.1+. The `new BarcodeAr(settings)` constructor (without a context argument) is available from react-native=7.6. Use `dataCaptureContext.addMode(barcodeAr)` to attach the mode to the context. - `BarcodeArCustomHighlight` requires SDK 8.0+. `BarcodeArCustomAnnotation` requires SDK 8.1+. `BarcodeArResponsiveAnnotation` requires SDK 8.2+. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating MatrixScan AR from scratch** (e.g. "add MatrixScan AR to my app", "set up Barcode AR", "how do I use BarcodeArView in React Native", "how do I show AR overlays on barcodes", "adding or changing highlights or annotations", "lifecycle, cleanup, or session handling") → read `references/integration.md` and follow the instructions there. - **Migrating from BarcodeBatch to BarcodeAr** (e.g. "migrate from BarcodeBatch", "convert BarcodeBatch to BarcodeAr", "move from MatrixScan to MatrixScan AR", "replace BarcodeTracking with BarcodeAr", "upgrade my old MatrixScan code to AR") → read `references/migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-ar-web6.39 KB
---
name: matrixscan-ar-web
description: MatrixScan AR (Barcode AR, BarcodeAr) in web/browser (TypeScript/JavaScript) projects (@scandit/web-datacapture-barcode) — scanning multiple barcodes at once with AR overlays, highlights, and annotations on tracked barcodes. Use for integration, symbology configuration, highlight and annotation providers, session handling, migration from BarcodeBatch, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# MatrixScan AR Web Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeAr* Web API is substantially different from the React Native API — the initialization pattern, view creation, and provider callback signature all differ.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or import paths. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Web-specific gotchas worth flagging:
- `DataCaptureContext.forLicenseKey()` sets `DataCaptureContext.sharedInstance` as a side effect — no need to save the return value. Access the context via `DataCaptureContext.sharedInstance` throughout the app.
- `BarcodeAr.forContext(DataCaptureContext.sharedInstance, settings)` is **async** — always `await` it. Do not use `new BarcodeAr(settings)` (that is the React Native ≥7.6 form).
- `BarcodeArView.create(element, context, barcodeAr)` is **async** — always `await` it. The `element` argument is the DOM container into which the view is inserted.
- `BarcodeArView` **is an HTML element** (extends `ScanditHTMLElement`) — it attaches itself to the provided container. Clean it up by calling `barcodeArView.remove()`, which removes it from the DOM.
- **Providers use a callback pattern on web**, not a return value. The signatures are `highlightForBarcode(barcode, callback)` and `annotationForBarcode(barcode, callback)`. Deliver the result via `callback(highlight)` / `callback(annotation)` — do NOT return it. This is different from React Native where providers are async functions returning a Promise.
- Must call `await barcodeArView.start()` **explicitly** — the view does not start automatically after `create()`.
- `ScanditIconBuilder.build()` returns `Promise<ScanditIcon>` — icon construction is **async** on web. Use `new ScanditIconBuilder().withIcon(ScanditIconType.Checkmark).build()` — there is no static `forType()` method, and `ScanditIconType.Info` does not exist. The full enum (31 values) is in `references/integration.md`.
- `BarcodeArResponsiveAnnotation.threshold` is a **static property** — set it BEFORE calling `BarcodeArResponsiveAnnotation.create(barcode, closeUp, far)`.
- **BarcodeArView manages the camera internally.** Do NOT manually set up `Camera`, `context.setFrameSource`, or `switchToDesiredState` — that pattern belongs to BarcodeBatch, not BarcodeAr.
- **No `DataCaptureView` is needed.** `BarcodeArView.create()` replaces `DataCaptureView` entirely for MatrixScan AR.
- The module loader is `barcodeCaptureLoader()` (from `@scandit/web-datacapture-barcode`) — there is no separate loader for BarcodeAr.
- **Custom highlight/annotation elements** must implement `BarcodeArHighlight` / `BarcodeArAnnotation` as Web Components extending `HTMLElement`. They must have `position: absolute`, `will-change: transform`, and implement `updatePosition(point, transformOrigin, rotationAngle)` which the SDK calls every frame. Add `[hidden] { display: none }` for SDK visibility management. Register once with `customElements.define` guarded by `if (!customElements.get(tag))`.
- `session.addedTrackedBarcodes` returns `Record<string, TrackedBarcode>` (a dictionary), **not** an array — use `Object.values(session.addedTrackedBarcodes)` to iterate. Same for `session.allTrackedBarcodes`.
- **Multithreading is mandatory.** Set `Cross-OriginPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-batch-android5.07 KB
---
name: matrixscan-batch-android
description: MatrixScan Batch (MatrixScan, BarcodeBatch, legacy BarcodeTracking) — tracking and scanning multiple barcodes at once in Android (Kotlin/Java) projects. Use for integration, settings and symbologies, tracked-barcode handling, basic/advanced overlay customization, lifecycle, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# MatrixScan Batch Android Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeBatch API changes between major SDK versions — constructor signatures, overlay factories, and listener method names have all evolved.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Android-specific gotchas worth flagging:
- `BarcodeBatch.forDataCaptureContext(dataCaptureContext, settings)` is a **factory method** — not a direct constructor and not `BarcodeBatch(settings)` (that is the Flutter ≥7.6 form).
- Camera setup is **manual**, exactly like BarcodeCapture: create `Camera.getDefaultCamera(BarcodeBatch.createRecommendedCameraSettings())`, call `dataCaptureContext.setFrameSource(camera)`, and drive the camera from `onResume`/`onPause`.
- `BarcodeBatchListener.onSessionUpdated` is called on a **recognition thread** — not the main thread. Dispatch any UI work via `runOnUiThread {}`.
- **Do not hold references** to `BarcodeBatchSession` or its collections outside the `onSessionUpdated` callback — the session is only safe to access within that callback.
- `BarcodeBatchBasicOverlay.newInstance(mode, view)` (and the style overload) **auto-adds the overlay to the view** — no separate `addOverlay` call needed.
- `BarcodeBatchAdvancedOverlay.newInstance(mode, view)` also auto-adds to the view.
- **Per-barcode brush customization** (`brushForTrackedBarcode`, `setBrushForTrackedBarcode`) requires the **MatrixScan AR add-on** license. The basic overlay with a uniform default brush does not.
- **BarcodeBatchAdvancedOverlay** requires the **MatrixScan AR add-on** license.
- Android listener method names differ from Flutter: `onTrackedBarcodeTapped` (not `didTapTrackedBarcode`), `viewForTrackedBarcode` (not `widgetForTrackedBarcode`), `clearTrackedBarcodeViews` (not `clearTrackedBarcodeWidgets`).
- `BarcodeBatchAdvancedOverlayListener` uses Android `View` objects — not Flutter Widgets.
- Android symbology names use underscores: `Symbology.EAN13_UPCA`, `Symbology.CODE128`, `Symbology.QR` — not camelCase.
## Intent Routing
Based on the user's request, load the appropriate reference file before responding:
- **Integrating MatrixScan Batch from scratch, configuring settings, handling tracked barcodes, customizing overlays (basic FRAME/DOT style, tap callbacks, advanced AR views, anchor/offset positioning), reacting to removed barcodes, or emitting feedback** → read `references/integration.md` and follow the instructions there.
- **Migrating or upgrading an existing MatrixScan Batch integration** (e.g. "upgrade from v6 to v7", "rename BarcodeTracking to BarcodeBatch", "bump the Scandit SDK to v8", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there.
- **Replacing a third-party multi-barcode scanner with MatrixScan Batch** (e.g. "migrate from ML Kit barcode scanning to Scandit MatrixScan", "replace my ML Kit multi-barcode scanner with BarcodeBatch", "switch from [library] to MatrixScan Batch") → read `references/third-party-migration.md` and follow the instructions there.
## API Usage Policy
Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, or property names. If unsure whether an API exists or how it Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
matrixscan-batch-capacitor5.72 KB
--- name: matrixscan-batch-capacitor description: Capacitor MatrixScan Batch (scandit-capacitor-datacapture-barcode) — MatrixScan, BarcodeBatch, legacy BarcodeTracking — tracking and scanning multiple barcodes at once with basic/advanced AR overlays in Capacitor iOS/Android apps (not the plain-web sibling). Use for integration, settings and symbologies, per-barcode brushes, TrackedBarcodeView annotations, lifecycle, SDK version migration, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan Batch Capacitor Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeBatch* API surface changes between major SDK versions — constructor signatures, overlay constructors, and listener shapes have all evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. Capacitor-specific gotchas worth flagging: - `ScanditCaptureCorePlugin.initializePlugins()` **must** be called (and awaited) before any other Scandit API — including `DataCaptureContext.initialize`. Forgetting this produces runtime errors that look unrelated to initialization. - `npx cap sync` must be run after every plugin version change to propagate native artifacts into iOS/Android. Skipping it yields a web/native version mismatch at runtime. - `context.setMode(barcodeBatch)` is how the mode is registered in the context on Capacitor (confirmed from both samples). This replaces any previously active mode. - `DataCaptureView.forContext(context)` is the Capacitor factory for the capture view. Then call `view.connectToElement(htmlElement)` to attach it to the DOM. - **Modern constructors require SDK 7.6+**: `new BarcodeBatch(settings)`, `new BarcodeBatchBasicOverlay(mode, style)`, `new BarcodeBatchAdvancedOverlay(mode)`, and `BarcodeBatch.createRecommendedCameraSettings()` are all available from capacitor=7.6. - **AdvancedOverlay uses serialized views**: On Capacitor, `setViewForTrackedBarcode` accepts `view: Promise<TrackedBarcodeView?>` — a serialized `TrackedBarcodeView`, NOT a native UI instance. Use `TrackedBarcodeView.withHTMLElement(domElement, options)` from `scandit-capacitor-datacapture-barcode`. Wrap it in a Promise or pass directly — the sample passes the instance directly (the API internally wraps it). - **MatrixScan AR add-on required**: `BarcodeBatchAdvancedOverlay`, `IBarcodeBatchBasicOverlayListener.brushForTrackedBarcode`, and `setBrushForTrackedBarcode` all require the MatrixScan AR add-on license. - Camera permission: iOS requires `NSCameraUsageDescription` in `Info.plist`. Android is handled automatically by the plugin. - **TrackedObject (Capacitor 8.2+)**: In SDK 8.2+, a `TrackedObject` base class was introduced that `TrackedBarcode` extends. No recipe is needed for this — the `TrackedBarcode` API you use day-to-day is unchanged. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating MatrixScan Batch from scratch** (e.g. "add MatrixScan to my app", "set up BarcodeBatch", "track multiple barcodes simultaneously", "show AR overlays", "per-barcode brushes", "tap handling", "overlay style (frame/dot)", "feedback / beep / vibration on scan", "lifecycle or cleanup", "camera permissions") → read `references/integration.md` and follow the instructions there. - **Upgrading the Scandit SDK version** (e.g. "migrate from v6/v7 to v8", "BarcodeTracking is gone", "rename BarcodeTracking to BarcodeBatch", "DataCaptureContext.forLicenseKey not found") **or replacing a third-party scanner** (e.g. "switch from @capacitor-mlkit/barcode-scanning / ML Kit to MatrixScan Batch") → read `references/migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do no
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-batch-cordova5.98 KB
---
name: matrixscan-batch-cordova
description: Cordova MatrixScan Batch (scandit-cordova-datacapture-* plugins) — MatrixScan, BarcodeBatch, legacy BarcodeTracking — tracking and scanning multiple barcodes at once with basic/advanced AR overlays. Use for integration, settings and symbologies, per-barcode brushes, TrackedBarcodeView annotations, lifecycle, SDK version migration, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# MatrixScan Batch Cordova Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeBatch* API surface changes between major SDK versions — constructor signatures, overlay constructors, and listener shapes have all evolved.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names.
Cordova-specific gotchas worth flagging:
- **Global namespace**: The Scandit SDK is exposed on `window.Scandit`. Use `Scandit.BarcodeBatch`, `Scandit.DataCaptureView`, etc. at runtime. The npm packages (`scandit-cordova-datacapture-*`) are plugin manifests, not ES modules. Do not emit `import { ... } from 'scandit-cordova-datacapture-*'` in user code running in the WebView. Only TypeScript projects using a bundler can import types at compile time.
- **`deviceready` gate**: All Scandit APIs must be called after `document.addEventListener('deviceready', ...)`. Never call at module load time.
- **`context.setMode(barcodeBatch)`**: This is the Cordova method to register the mode with the context. It replaces any previously active mode. Confirmed from both Cordova samples.
- **Modern constructors require SDK 7.6+**: `new Scandit.BarcodeBatch(settings)`, `new Scandit.BarcodeBatchBasicOverlay(mode, style)`, `new Scandit.BarcodeBatchAdvancedOverlay(mode)`, and `Scandit.BarcodeBatch.createRecommendedCameraSettings()` are all available from cordova=7.6.
- **AdvancedOverlay uses serialized views**: On Cordova, `setViewForTrackedBarcode` accepts `view: Promise<TrackedBarcodeView?>` — a serialized `TrackedBarcodeView`, NOT a native UI instance. Use `Scandit.TrackedBarcodeView.withHTMLElement(domElement, options)` to construct one. This is the same shape as Capacitor. See the Bubbles sample for the exact pattern.
- **MatrixScan AR add-on required**: `BarcodeBatchAdvancedOverlay`, `IBarcodeBatchBasicOverlayListener.brushForTrackedBarcode`, and `setBrushForTrackedBarcode` all require the MatrixScan AR add-on to be licensed.
- **Camera permissions** are configured automatically by the plugins on both iOS and Android.
- **`DataCaptureView.forContext(context)`** is the Cordova factory. Then call `view.connectToElement(htmlElement)` to attach it to the DOM.
- **TrackedObject (Cordova 8.2+)**: In SDK 8.2+, a `TrackedObject` base class was introduced that `TrackedBarcode` extends. No recipe is needed — the `TrackedBarcode` API you use day-to-day is unchanged.
## Intent Routing
Based on the user's request, load the appropriate reference file before responding:
- **Integrating MatrixScan Batch from scratch** (e.g. "add MatrixScan to my app", "set up BarcodeBatch", "track multiple barcodes simultaneously", "show AR overlays", "per-barcode brushes", "tap handling", "removed barcodes", "feedback / beep / vibration", "lifecycle or cleanup", "camera permissions") → read `references/integration.md` and follow the instructions there.
- **Migrating or upgrading an existing MatrixScan integration** (e.g. "upgrade from v6 to v7/v8", "migrate BarcodeTracking to BarcodeBatch", "is BarcodeTracking the same as BarcodeBatch?", "bump the Scandit plugins", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there.
- **Replacing a third-party multi-barcode scanner** (e.g. "replace phonegap-plugin-barcodescanner with MatrixScan Batch", "migrate from the Cordova ML Kit Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
matrixscan-batch-flutter6.6 KB
--- name: matrixscan-batch-flutter description: MatrixScan Batch (MatrixScan, BarcodeBatch, legacy BarcodeTracking) in Flutter projects (scandit_flutter_datacapture_barcode_batch) — tracking and scanning multiple barcodes at once. Use for integration, settings and symbologies, tracked-barcode handling, per-barcode brushes, advanced-overlay AR widgets, lifecycle, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan Batch Flutter Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeBatch* API surface changes between major SDK versions — constructor signatures, overlay constructors, listener shapes, and Flutter-specific class names have all evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. Flutter-specific gotchas worth flagging: - `await ScanditFlutterDataCaptureBarcode.initialize()` **must** be called (and awaited) in `main()` after `WidgetsFlutterBinding.ensureInitialized()` and before `runApp(...)`. The Bubbles sample also calls `await DataCaptureContext.initialize(licenseKey)` in `main()` and then uses `DataCaptureContext.sharedInstance`; the Simple sample passes the context to the screen. Both patterns are valid — pick the one that matches the project structure. - `BarcodeBatch(settings)` is the context-free constructor (Flutter ≥7.6). After constructing, call `dataCaptureContext.setMode(barcodeBatch)` explicitly. On older SDKs use the factory constructor that accepts the context. - `BarcodeBatch.createRecommendedCameraSettings()` is available from Flutter ≥7.6. - **Advanced overlay method names on Flutter differ from other platforms**: - Set a widget: `setWidgetForTrackedBarcode(BarcodeBatchAdvancedOverlayWidget? widget, TrackedBarcode trackedBarcode)` (NOT `setViewForTrackedBarcode`) - Clear all widgets: `clearTrackedBarcodeWidgets()` (NOT `clearTrackedBarcodeViews`) - **Custom AR annotation = subclass of `BarcodeBatchAdvancedOverlayWidget`** (Flutter-only base class). The widget state must extend `BarcodeBatchAdvancedOverlayWidgetState<T>` and override `build()` returning a `BarcodeBatchAdvancedOverlayContainer`. - **Using `BarcodeBatchAdvancedOverlay` requires the MatrixScan AR add-on.** Using `brushForTrackedBarcode` and `setBrushForTrackedBarcode` on `BarcodeBatchBasicOverlay` also requires the MatrixScan AR add-on. - `BarcodeBatchAdvancedOverlay` exposes a `view` getter on Flutter (Flutter-only; not available on other platforms). - `offsetForTrackedBarcode` is a member of `BarcodeBatchAdvancedOverlayListener` on Flutter (per the RST, `@dart@` annotation). It is present on Flutter; no extra interface needed. - **`TrackedObject` (Flutter ≥7.3+)**: A `TrackedObject` base class was introduced in SDK 7.3 that `TrackedBarcode` extends. No recipe is required for this — the day-to-day `TrackedBarcode` API is unchanged. - The import barrel for BarcodeBatch classes is `scandit_flutter_datacapture_barcode_batch` — a separate barrel from `scandit_flutter_datacapture_barcode`. Always import both. - `Symbology` enum values use **lowerCamelCase** in Dart: `Symbology.code128`, `Symbology.ean13Upca`, `Symbology.code39`. Do not write `Symbology.Code128` or `Symbology.EAN13UPCA`. - `session.trackedBarcodes` is a `Map<int, TrackedBarcode>` in Dart (keyed by integer identifier, not string). - `session.removedTrackedBarcodes` is a `List<int>` in Dart (integer identifiers). - Lifecycle cleanup: call `_barcodeBatch.removeListener(this)`, set `_barcodeBatch.isEnabled = false`, switch camera off, and call `dataCaptureContext.removeAllModes()` (or `removeCurrentMode()` if using the singleton pattern). - License placeholder must be exactly: `'-- ENTER YOUR SCANDIT LICENSE KEY HERE --'` ## Intent Routing Based on the user's request, load the reference file
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
matrixscan-batch-ios7.8 KB
---
name: matrixscan-batch-ios
description: MatrixScan Batch (MatrixScan, BarcodeBatch, legacy BarcodeTracking) — tracking and scanning multiple barcodes at once in iOS (Swift, UIKit/SwiftUI) projects. Use for integration, settings and symbologies, tracked-barcode handling, basic/advanced overlay customization, lifecycle, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# MatrixScan Batch iOS Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeBatch API changes between major SDK versions — initializer signatures, overlay constructors, and delegate method names have all evolved (e.g. `BarcodeTracking` → `BarcodeBatch`).
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
iOS-specific gotchas worth flagging:
- `BarcodeBatch(context: context, settings: settings)` is a **direct convenience initializer** — not a factory method like Android's `BarcodeBatch.forDataCaptureContext(...)`. Passing a non-nil context auto-attaches the mode to the context.
- Camera setup is **manual**: get `Camera.default`, call `context.setFrameSource(camera, completionHandler: nil)`, then `camera?.apply(BarcodeBatch.recommendedCameraSettings, completionHandler: nil)`. Drive the camera from `viewWillAppear` / `viewWillDisappear`.
- `BarcodeBatchListener.barcodeBatch(_:didUpdate:frameData:)` is called on a **background queue** — not the main thread. Dispatch UI work via `DispatchQueue.main.async {}`.
- **Do not hold references** to `BarcodeBatchSession.trackedBarcodes`, `addedTrackedBarcodes`, `updatedTrackedBarcodes`, or `removedTrackedBarcodes` outside the callback — copy the data before the callback returns.
- `BarcodeBatchBasicOverlay(barcodeBatch:view:)` and `BarcodeBatchAdvancedOverlay(barcodeBatch:view:)` **auto-add the overlay** to the `DataCaptureView` — no separate `addOverlay` call needed.
- **`DataCaptureView` must be `addSubview`'d manually** — unlike `BarcodeArView`, `DataCaptureView` does not auto-attach to a parent view.
- **Per-barcode brush customization** (`barcodeBatchBasicOverlay(_:brushFor:)`, `setBrush(_:for:)`) requires the **MatrixScan AR add-on** license. A uniform default brush (no delegate) does not.
- **BarcodeBatchAdvancedOverlay** requires the **MatrixScan AR add-on** license.
- **No built-in feedback** — `BarcodeBatch` never plays a sound or vibrates on its own (unlike `BarcodeCapture` / `SparkScan`). Emit feedback manually with `Feedback.default.emit()` from inside the listener callback (dispatched to the main thread), gated on `session.addedTrackedBarcodes` so it doesn't beep every frame.
- `session.removedTrackedBarcodes` is an **`[Int]` of tracking identifiers** (barcodes that left the frame) — not `TrackedBarcode` objects. `addedTrackedBarcodes` / `updatedTrackedBarcodes` are `[TrackedBarcode]`.
- iOS symbology cases are **camelCase**: `.ean13UPCA`, `.code128`, `.qr` — not `EAN13_UPCA` / `CODE128` / `QR` like Android.
- iOS delegate methods use Swift naming: `barcodeBatchBasicOverlay(_:didTap:)` (not Android's `onTrackedBarcodeTapped`), `barcodeBatchAdvancedOverlay(_:viewFor:)` (not `viewForTrackedBarcode`).
- `BarcodeBatchAdvancedOverlayDelegate` uses `UIView` — not Android `View` or SwiftUI views.
- SwiftUI: `DataCaptureView` is a `UIView` and cannot be dropped into SwiftUI directly. Wrap a UIKit view controller in a `UIViewControllerRepresentable` and keep all BarcodeBatch APIs inside that view controller.
- Cleanup: `BarcodeBatchListener` is held as a **weak** reference, so a missed `removeListener` won't leak — but call `barcodeBatch.removeListener(self)` in `deinit` to make the lifecycle explicit. When using the shared singleton (`DataCaptureContext.sharePreview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
matrixscan-batch-net-android14.8 KB
---
name: matrixscan-batch-net-android
description: MatrixScan Batch (MatrixScan, BarcodeBatch, legacy BarcodeTracking) in .NET for Android projects (`net*-android` TFM, `Scandit.DataCapture.Barcode` NuGet, non-MAUI — MAUI apps use matrixscan-batch-net-maui) — tracking and scanning multiple barcodes at once. Use for integration, settings and symbologies, listeners/events, basic/advanced overlay customization, camera lifecycle, SDK version migration, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# MatrixScan Batch .NET for Android Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeBatch API changes between major SDK versions — the class itself was renamed from `BarcodeTracking` to `BarcodeBatch` at v7.0, overlay factories evolved, and the .NET binding deviates from the Kotlin / iOS native APIs in several places (`Create` factories instead of `forDataCaptureContext`, `Enabled` instead of `isEnabled`, `TimeSpan` instead of `TimeInterval`, PascalCase symbology names, etc.).
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
.NET-Android-specific gotchas worth flagging:
- This skill targets the **non-MAUI** .NET for Android workload (project `<TargetFramework>net10.0-android</TargetFramework>`, no `<UseMaui>` flag). For MAUI apps, use the `matrixscan-batch-net-maui` skill instead (planned).
- **`BarcodeBatch.Create(dataCaptureContext, settings)` is the .NET factory** — not `new BarcodeBatch(...)` (the public constructor is `private`) and not `BarcodeBatch.ForDataCaptureContext(...)` (that name appears in the Kotlin / docs API but the C# binding is `Create`). When the context is non-null, the factory attaches the mode to the context automatically.
- **`BarcodeBatchSettings.Create()` is a factory** — also `private` constructor. Writing `new BarcodeBatchSettings()` is a compile error.
- **`BarcodeBatchBasicOverlay.Create(...)` and `BarcodeBatchAdvancedOverlay.Create(...)` are factories**, each with multiple overloads. When passed a non-null `DataCaptureView`, both auto-add the overlay to the view — no separate `AddOverlay` call is needed.
- **`BarcodeBatch.RecommendedCameraSettings` is a static property**, not a method. The canonical pattern (mirroring the official .NET Android sample) is `camera = Camera.GetDefaultCamera(); camera.ApplySettingsAsync(BarcodeBatch.RecommendedCameraSettings);`. The Kotlin form `createRecommendedCameraSettings()` does **not** exist in the .NET binding.
- Camera setup is **manual**, mirroring BarcodeCapture on .NET Android: `Camera.GetDefaultCamera()` → `camera.ApplySettingsAsync(BarcodeBatch.RecommendedCameraSettings)` → `dataCaptureContext.SetFrameSourceAsync(camera)` (the .NET binding is `SetFrameSourceAsync`, not the synchronous Kotlin `setFrameSource`).
- **`DataCaptureView.Create(dataCaptureContext)` takes no `Context` parameter** in .NET — different from Kotlin's `DataCaptureView.newInstance(context, dataCaptureContext)`. The returned Android `View` is added to a `FrameLayout` container via `container.AddView(dataCaptureView)`.
- **`IBarcodeBatchListener.OnSessionUpdated(BarcodeBatch, BarcodeBatchSession, IFrameData)` runs on a background recognition thread** — not the UI thread. Dispatch any UI work via `RunOnUiThread(() => { … })`. The third parameter is `IFrameData` (the .NET binding), not `FrameData` (Kotlin).
- The .NET binding also exposes the **event API** on `BarcodeBatch`: `barcodeBatch.SessionUpdated += handler` (`EventHandler<BarcodeBatchEventArgs>`). Use either the listener interface OR the event — not both for the same handler. There is **no** `BarcodeScanned` event on `BarcodeBatch` (batch is tracking, not single-scan).Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
matrixscan-batch-net-ios15.2 KB
---
name: matrixscan-batch-net-ios
description: MatrixScan Batch (MatrixScan, BarcodeBatch, legacy BarcodeTracking) in .NET for iOS projects (`net*-ios` TFM, `Scandit.DataCapture.Barcode` NuGet, non-MAUI — MAUI apps use matrixscan-batch-net-maui) — tracking and scanning multiple barcodes at once. Use for integration, settings and symbologies, listeners/events, basic/advanced overlay customization, camera lifecycle, SDK version migration, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# MatrixScan Batch .NET for iOS Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeBatch API changes between major SDK versions — the class itself was renamed from `BarcodeTracking` to `BarcodeBatch` at v7.0, overlay factories evolved, and the .NET binding deviates from the native Swift API in several places (`Create` factories instead of `init(context:settings:)`, `Enabled` instead of `isEnabled`, PascalCase symbology names, `DispatchQueue.MainQueue.DispatchAsync` for UI dispatch, etc.).
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
.NET-iOS-specific gotchas worth flagging:
- This skill targets the **non-MAUI** .NET for iOS workload (project `<TargetFramework>net10.0-ios</TargetFramework>`, no `<UseMaui>` flag). For MAUI apps, use the `matrixscan-batch-net-maui` skill instead (planned).
- **`BarcodeBatch.Create(dataCaptureContext, settings)` is the .NET factory** — not `new BarcodeBatch(...)` (the public constructor is `private`) and not `BarcodeBatch.ForDataCaptureContext(...)` (that name appears in the Swift / docs API but the C# binding is `Create`). When the context is non-null, the factory attaches the mode to the context automatically.
- **`BarcodeBatchSettings.Create()` is a factory** — also `private` constructor. Writing `new BarcodeBatchSettings()` is a compile error.
- **`BarcodeBatchBasicOverlay.Create(...)` and `BarcodeBatchAdvancedOverlay.Create(...)` are factories**, each with multiple overloads. When passed a non-null `DataCaptureView`, both auto-add the overlay to the view — no separate `AddOverlay` call is needed.
- **`BarcodeBatch.RecommendedCameraSettings` is a static property**, not a method. The canonical pattern (mirroring the official .NET iOS sample) is `camera = Camera.GetDefaultCamera(); camera.ApplySettingsAsync(BarcodeBatch.RecommendedCameraSettings);`. The Swift form `createRecommendedCameraSettings()` does **not** exist in the .NET binding.
- Camera setup is **manual**, mirroring BarcodeCapture on .NET iOS, **in this order**: `Camera.GetDefaultCamera()` → `dataCaptureContext.SetFrameSourceAsync(camera)` → `camera.ApplySettingsAsync(BarcodeBatch.RecommendedCameraSettings)`. Bind the camera to the context **before** applying settings (matches the official `MatrixScanSimpleSample` order). The .NET binding is `SetFrameSourceAsync` — not the synchronous Swift `setFrameSource(_:completionHandler:)`.
- **`DataCaptureView.Create(dataCaptureContext, frame)` takes a `CGRect`** as the second argument on iOS — different from the Android `Create(dataCaptureContext)` overload. The canonical call site is `DataCaptureView.Create(dataCaptureContext, this.View!.Bounds)`. Set `AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth` and add it with `this.View.AddSubview(dataCaptureView)` followed by `this.View.SendSubviewToBack(dataCaptureView)`.
- **View-controller constructor depends on how the VC is instantiated.** If the VC is inflated by a storyboard / XIB (typical when the project has a `Main.storyboard` with `UIMainStoryboardFile` set in `Info.plist`), keep the `public MyViewController(IntPtr handle) : base(handle) { }` construcPreview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
matrixscan-batch-net-maui18.6 KB
---
name: matrixscan-batch-net-maui
description: MatrixScan Batch (MatrixScan, BarcodeBatch, legacy BarcodeTracking) in .NET MAUI projects (`Scandit.DataCapture.Barcode.Maui` NuGet, XAML DataCaptureView) — tracking and scanning multiple barcodes at once with basic/advanced overlays. For non-MAUI .NET projects use matrixscan-batch-net-android or matrixscan-batch-net-ios. Use for integration, settings, listeners/events, overlay customization, lifecycle, SDK version migration, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# MatrixScan Batch .NET MAUI Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeBatch API changes significantly between major SDK versions — the class itself was renamed from `BarcodeTracking` to `BarcodeBatch` at v7.0, the namespace moved from `Scandit.DataCapture.Barcode.Tracking.*` to `Scandit.DataCapture.Barcode.Batch.*`, and the .NET MAUI binding adds platform-specific lifecycle, handler, and native-view-bridging concerns on top of the regular .NET API. Patterns from the standalone `matrixscan-batch-net-android` / `matrixscan-batch-net-ios` skills do not always apply unchanged.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
MAUI-specific gotchas worth flagging:
- This skill targets MAUI apps with `<UseMaui>true</UseMaui>`. For non-MAUI .NET projects, use `matrixscan-batch-net-android` (for `net*-android`) or `matrixscan-batch-net-ios` (for `net*-ios`) instead.
- **Fetch the SDK version from NuGet before editing the `.csproj`.** WebFetch `https://www.nuget.org/packages/Scandit.DataCapture.Barcode.Maui/` and read the latest **stable** version off the page (skip `-beta.*` / `-preview.*` / `-rc.*` suffixes). Do not guess — versions from training data are stale and `dotnet restore` will fail with `NU1103` if the pinned version isn't published. Use the same version for all four packages.
- **Android `SupportedOSPlatformVersion` must be ≥ `24`.** The MAUI template defaults to `21`, which is below Scandit's Android AAR minimum and fails the build with `uses-sdk:minSdkVersion 21 cannot be smaller than version 24 declared in library`. Bump the `.csproj` value to `24.0` (or higher) as part of the integration.
- Required NuGet packages: `Scandit.DataCapture.Core`, `Scandit.DataCapture.Core.Maui`, `Scandit.DataCapture.Barcode`, `Scandit.DataCapture.Barcode.Maui`. All four are needed — Core/Barcode provide the platform bindings, Core.Maui/Barcode.Maui provide the MAUI builder extensions and handlers.
- `MauiProgram.cs` builder chain is **specific** and the order matters:
```csharp
builder
.UseMauiApp<App>()
.UseScanditCore(configure => configure.AddDataCaptureView())
.UseScanditBarcode();
```
`UseScanditBarcode()` takes **no inner configure** — there is no MAUI handler for BarcodeBatch itself, the call exists only to invoke `ScanditBarcodeCapture.Initialize()`. Do **not** write `UseScanditBarcode(configure => configure.AddBarcodeBatchView())` — that method does not exist. BarcodeBatch in MAUI uses the generic `<scandit:DataCaptureView>`, not a dedicated view.
- **Do NOT call `ScanditCaptureCore.Initialize()` / `ScanditBarcodeCapture.Initialize()` in `MainApplication.OnCreate` or `AppDelegate.FinishedLaunching`.** The MAUI builder extensions (`UseScanditCore` / `UseScanditBarcode`) perform this SDK initialization themselves. This is different from the non-MAUI `matrixscan-batch-net-android` / `matrixscan-batch-net-ios` skills, which require manual initialization for SDK 8.0+. In a MAUI app, the `MainApplication` / `AppDelegate` only need to forward to `MauiProgram.CreateMauiApp()` — leave them alone.
- `BarcodeBatch` does **notPreview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
matrixscan-batch-rn5.52 KB
--- name: matrixscan-batch-rn description: MatrixScan Batch (MatrixScan, BarcodeBatch, legacy BarcodeTracking) in React Native projects — tracking and scanning multiple barcodes at once. Use for integration, settings and symbologies, tracked-barcode handling, per-barcode brushes, advanced-overlay AR annotations, tap handling, manual feedback, lifecycle, third-party scanner replacement, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan Batch React Native Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeBatch* API surface changes between major SDK versions — constructor signatures, overlay constructors, and listener shapes have all evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. React Native-specific gotchas worth flagging: - `DataCaptureContext.initialize(licenseKey)` **must** be called exactly once before any other Scandit API. It sets up `DataCaptureContext.sharedInstance`. Do not construct multiple contexts. - `dataCaptureContext.setMode(barcodeBatch)` is how the mode is registered in the context (confirmed from all RN samples). This replaces any previously active mode. - `dataCaptureContext.removeMode(barcodeBatch)` is the cleanup call — use it in the `useEffect` cleanup function. - `new BarcodeBatch(settings)` and `new BarcodeBatchBasicOverlay(mode, style)` and `new BarcodeBatchAdvancedOverlay(mode)` constructors (without a context argument) are available from react-native=7.6. - `BarcodeBatch.createRecommendedCameraSettings()` is available from react-native=7.6. - Overlays must be added to a `DataCaptureView` via `view.addOverlay(overlay)` inside the `DataCaptureView` `ref` callback. - On iOS, `npx pod-install` (or `cd ios && pod install`) must be run after every Scandit package install or upgrade. Android auto-links via Gradle. - Metro's bundler cache frequently masks Scandit package upgrades. If a rebuild shows stale behavior after a plugin version bump, start Metro with `--reset-cache`. - Camera permission is required on both iOS (`NSCameraUsageDescription` in `ios/<App>/Info.plist`) and Android (runtime request via `PermissionsAndroid`). - **New Architecture caveat (react-native ≥ 0.79, iOS)**: When using the new React Native architecture (Fabric / TurboModules), iOS apps must have the `AppDelegate` implement the `ScanditReactNativeFactoryContainer` protocol (available in the core module) when using `BarcodeBatchAdvancedOverlay`. See integration.md for details. - **MatrixScan AR add-on required**: `BarcodeBatchAdvancedOverlay`, `BarcodeBatchBasicOverlayListener.brushForTrackedBarcode`, and `BarcodeBatchBasicOverlay.setBrushForTrackedBarcode` all require the MatrixScan AR add-on to be licensed. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating MatrixScan Batch from scratch** (e.g. "add MatrixScan to my app", "set up BarcodeBatch", "track multiple barcodes simultaneously", "read the tracked barcode data / identifier / location", "handle taps on highlights or AR views", "emit feedback / beep on a new barcode", "show AR overlays", "per-barcode brushes", "lifecycle or cleanup", "camera permissions") → read `references/integration.md` and follow the instructions there. - **Replacing a third-party multi-barcode scanner with MatrixScan Batch** (e.g. "replace my react-native-vision-camera useCodeScanner with MatrixScan Batch", "migrate from VisionCamera multi-barcode scanning to Scandit", "switch from RNCamera / ML Kit batch scanning to BarcodeBatch") → read `references/third-party-migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatu
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-batch-web6.8 KB
--- name: matrixscan-batch-web description: MatrixScan Batch (MatrixScan, BarcodeBatch, legacy BarcodeTracking) in web/browser (TypeScript/JavaScript) projects (@scandit/web-datacapture-barcode) — tracking and scanning multiple barcodes at once. Use for integration, settings and symbologies, per-barcode brushes, HTML-element AR overlays, manual feedback, lifecycle, SDK version migration, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan Batch Web Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeBatch Web API changes between major SDK versions — constructor signatures, overlay factory names, async patterns, and initialization have all evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or import paths. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. Web-specific gotchas worth flagging: - `BarcodeBatch.forContext(context, settings)` is **async** — always `await` it. Do not use `new BarcodeBatch(settings)` (that is the React Native ≥7.6 form). - `barcodeBatch.setEnabled(true/false)` is **async** — always `await` it. - `BarcodeBatchBasicOverlay.withBarcodeBatchForView(barcodeBatch, view)` and `BarcodeBatchBasicOverlay.withBarcodeBatchForViewWithStyle(barcodeBatch, view, style)` are **async** factory methods — always `await` them. There is no implicit overlay. - `BarcodeBatchAdvancedOverlay.withBarcodeBatchForView(barcodeBatch, view)` is **async** — always `await` it. - `setAnchorForTrackedBarcode` and `setOffsetForTrackedBarcode` on `BarcodeBatchAdvancedOverlay` are **synchronous** (return `void`) — do not `await` them. - `clearTrackedBarcodeViews()` on `BarcodeBatchAdvancedOverlay` is also **synchronous** (returns `void`). - `BarcodeBatch.recommendedCameraSettings` is a **static property**, not a method call. - The module loader is `barcodeCaptureLoader()` (from `@scandit/web-datacapture-barcode`) — there is no separate `barcodeBatchLoader`. Both BarcodeCapture and BarcodeBatch use the same loader. - **Multithreading is mandatory for BarcodeBatch.** Without `Cross-Origin-Opener-Policy: same-origin` and `Cross-Origin-Embedder-Policy: require-corp` (self-hosted) or `credentialless` (CDN), the SDK falls back to single-threaded mode and batch tracking will be too slow to use. - **AR views on web use plain HTML elements** — `TrackedBarcodeView.withHTMLElement(element, options)` returns a `Promise<TrackedBarcodeView>`. Pass that Promise directly to `setViewForTrackedBarcode` or return it from `viewForTrackedBarcode` — both accept a Promise. This is NOT a subclass pattern. - `session.removedTrackedBarcodes` returns `string[]` (identifiers serialized as strings) — use `Number.parseInt(id, 10)` when comparing against `TrackedBarcode.identifier` (which is a `number`). - The `DataCaptureView` can be created before context init: `new DataCaptureView()` → `connectToElement(element)` → `await view.setContext(context)`. This allows a progress bar to be shown during SDK loading. The alternative `await DataCaptureView.forContext(context)` is equally valid. - The DOM element passed to `view.connectToElement()` must have defined dimensions and a set `position` (e.g. `fixed` or `absolute`) — zero-sized or unpositioned containers will not render the camera preview. - Camera is managed manually: call `await context.frameSource?.switchToDesiredState(FrameSourceState.On)` to start and `FrameSourceState.Off` to stop. The camera does not stop automatically when the page loses focus. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating MatrixScan Batch from scratch** (e.g. "add MatrixScan to my web app", "set up BarcodeBatch", "track multiple barcodes simultaneously", "sh
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
matrixscan-count-android12.4 KB
---
name: matrixscan-count-android
description: MatrixScan Count (BarcodeCount) in native Android projects (Kotlin/Java, `com.scandit.datacapture:barcode`) — counting and receiving barcodes in bulk with the BarcodeCountView UI in an Activity or Fragment, scanning against an expected/receiving list, clustering, status mode, explicitly managed camera. Use for integration, settings and symbology configuration, result handling, UI customization, or troubleshooting counting workflows.
license: Apache-2.0
metadata:
author: scandit
version: "0.1.1"
---
# MatrixScan Count Android Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The MatrixScan Count API has
evolved across SDK versions — classes, properties, and factory methods may have been renamed or
restructured, and the Android API differs from the iOS one in concrete ways (factory methods, listener
names, view construction).
**Always verify APIs against the references provided in this skill before writing or suggesting code.**
Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in
the provided references, fetch the relevant documentation page before responding.
The single most common mistake is assuming the view owns the camera: in MatrixScan Count the
**`BarcodeCountView` does NOT own or manage the camera** — you create and drive the camera explicitly
(`Camera.getDefaultCamera(...)`, apply `BarcodeCount.createRecommendedCameraSettings()`,
`dataCaptureContext.setFrameSource(...)`, and switch its state across `onResume`/`onPause`). See
`references/integration.md` (Camera section). (This is unlike `BarcodeArView` in MatrixScan AR, which
*does* manage the camera internally — don't carry that habit over.)
Android-specific gotchas worth flagging:
- `BarcodeCount.forDataCaptureContext(dataCaptureContext, settings)` is the **static factory** that
creates the mode — **not** a `BarcodeCount(...)` constructor and **not** `forContext(...)`.
- `BarcodeCountView` is created with the **static `BarcodeCountView.newInstance(context, dataCaptureContext, barcodeCount)` factory** — not a constructor. There is an overload taking a `BarcodeCountViewStyle` (`ICON` / `DOT`) and one taking a `DataCaptureView`. The view does **not** add itself to the hierarchy — call `addView(...)`.
- Recommended camera settings come from the **static** `BarcodeCount.createRecommendedCameraSettings()` — not a property like iOS's `recommendedCameraSettings`.
- The result-collecting callback is `BarcodeCountListener.onScan(barcodeCount, session, data)` (the `FrameData` parameter is named `data`). It is called on an **internal recognition thread** — dispatch to the main thread with `runOnUiThread {}` before touching UI/app state. `onSessionUpdated` / `onObservationStarted` / `onObservationStopped` are optional default methods.
- The List/Exit/SingleScan buttons are delivered by **`BarcodeCountViewUiListener`** (`barcodeCountView.uiListener`); per-barcode brushes/icons and barcode-tap callbacks are delivered by the **separate `BarcodeCountViewListener`** (`barcodeCountView.listener`). Prefer the `onListButtonTapped(view, snapshot)` / `onExitButtonTapped(view, snapshot)` overloads — the `snapshot` is a nullable `BarcodeCountSessionSnapshot?` (its `recognizedBarcodes` etc. give you the count at tap time; access with `snapshot?.…`). The single-arg `(view)` forms are **deprecated**.
- Symbology names are uppercase with underscores: `Symbology.EAN13_UPCA`, `Symbology.QR` (not `QR_CODE`), `Symbology.CODE128`. Enable one with `settings.setSymbologyEnabled(symbology, true)` or a set with `settings.enableSymbologies(set)`. All symbologies are disabled by default.
- Highlight appearance is customized per style: on the default **Icon style** customize the **icon** (`iconForRecognizedBarcode` returning a `BarcodeCountIcon`, or `setIconForRecognizedBarcode`); on the **Dot style** customize the **`Brush`** (Preview of the first 4,000 characters. Read full instructions →
Referenced files: 6 — file references are metadata, not package contents.
matrixscan-count-capacitor6.04 KB
---
name: matrixscan-count-capacitor
description: Capacitor MatrixScan Count (BarcodeCount) — plugin scandit-capacitor-datacapture-barcode. Multi-barcode counting and receiving workflows (scan-and-count, inventory count, capture list, status mode) with BarcodeCountView on a DOM element in Capacitor apps, iOS/Android native only. For React Native use matrixscan-count-rn. Use for integration, symbology configuration, result handling, view customization, or troubleshooting counting workflows.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# MatrixScan Count Capacitor Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCount API has evolved significantly across versions — constructor signatures, view factory methods, and feature availability vary by SDK version. Properties, method names, and plugin patterns may differ from other platforms or from general knowledge.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Capacitor-specific gotchas worth flagging:
- `ScanditCaptureCorePlugin.initializePlugins()` **must** be called (and awaited) before any other Scandit API — including `DataCaptureContext` construction. Forgetting this produces runtime errors that look unrelated to initialization.
- `npx cap sync` must be run after every plugin version change to propagate native artifacts into iOS/Android. Skipping it yields a web/native version mismatch at runtime.
- **BarcodeCountView requires a DOM element.** `BarcodeCountView.connectToElement(htmlElement)` mirrors its size and position from a DOM element. Call `detachFromElement()` on cleanup.
- **BarcodeCount runs on iOS and Android only.** It does not run in the browser. Guard with `Capacitor.isNativePlatform()` if your app also targets web.
- **Minimum SDK versions:**
- BarcodeCount on Capacitor: **6.18**
- `new BarcodeCount(settings)` constructor (no context): **7.6**. Before 7.6, use `BarcodeCount.forDataCaptureContext(context, settings)`.
- `BarcodeCountView` constructed with object literal `new BarcodeCountView({context, barcodeCount, style})`: verified in samples. The static factories `BarcodeCountView.forContextWithMode(context, barcodeCount)` and `BarcodeCountView.forContextWithModeAndStyle(context, barcodeCount, style)` are also documented.
- Not-in-list action settings (`BarcodeNotInListActionSettings`): **7.1**
- Status mode (`setStatusProvider`, `shouldShowStatusModeButton`, `shouldShowStatusIconsOnScan`): **8.3**
- Mapping flow (`BarcodeCountMappingFlowSettings`, `BarcodeCountView.forMapping`): **8.3**
- Plugin packages: `@scandit/datacapture-barcode` and `@scandit/datacapture-core` (npm registry) **or** `scandit-capacitor-datacapture-barcode` and `scandit-capacitor-datacapture-core` depending on the package registry used. Check the user's existing `package.json` imports and match.
- Camera permission: iOS `NSCameraUsageDescription` in `Info.plist`. Android handled automatically by the plugin.
- `BarcodeCount.recommendedCameraSettings` (static getter) returns recommended camera settings. On Capacitor 7.6+, `BarcodeCount.createRecommendedCameraSettings()` (static method) is also available — the sample uses the getter form.
- `barcodeCount.isEnabled = true` must be set to start scanning after creating `BarcodeCountView`.
## Intent Routing
Based on the user's request, load the appropriate reference file before responding:
- **Integrating MatrixScan Count from scratch** (e.g. "add MatrixScan Count to my app", "set up BarcodeCount", "how do I use BarcodeCountView in Capacitor", "how do I count barcodes", "scan against a list", "packing slip verification", "receiving workflow") → read `references/integraPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-count-cordova6.74 KB
---
name: matrixscan-count-cordova
description: Cordova MatrixScan Count (BarcodeCount) — plugin scandit-cordova-datacapture-barcode. Counting and receiving workflows (scan-and-count, inventory count, scan against a capture list, status mode, tap-to-uncount) with BarcodeCountView in Cordova apps. For Capacitor use matrixscan-count-capacitor. Use for integration, symbology configuration, view customization, result handling, SDK version migration, or troubleshooting counting workflows.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# MatrixScan Count Cordova Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCount Cordova API has evolved significantly across SDK versions. Key milestones:
- **Cordova 6.24**: BarcodeCount first available on Cordova.
- **Cordova 7.6**: Context-free constructor `new Scandit.BarcodeCount(settings)` introduced; `context.addMode(barcodeCount)` is now the wiring call.
- **Cordova 7.1**: `BarcodeCountNotInListActionSettings` available.
- **Cordova 8.3**: `BarcodeCountStatusProvider`, `shouldShowStatusModeButton`, `textForBarcodesNotInListDetectedHint`, `textForClusteringGestureHint`, `textForScreenCleanedUpHint`, `disableModeWhenCaptureListCompleted`, `ClusteringMode` available.
- **Filtering / unique / additional barcodes / reset**: `BarcodeCountSettings.filterSettings` (`BarcodeFilterSettings` — `excludedSymbologies`, `excludedCodesRegex`), `expectsOnlyUniqueBarcodes`, `setAdditionalBarcodes` / `clearAdditionalBarcodes`, and `reset()` are available on Cordova.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
> **Source note**: There is no public Cordova MatrixScan Count sample. The integration reference is anchored to the internal DebugApp (`frameworks/cordova/debugapp/src/pages/BarcodeCount.tsx` and `frameworks/cordova/debugapp/src/hooks/modes/useBarcodeCount.ts`) and the Cordova plugin source (`frameworks/cordova/scandit-cordova-datacapture-barcode/www/ts/src/BarcodeCountView.ts`).
## Cordova-Specific Gotchas
- **Global namespace**: The Scandit SDK is exposed on `window.Scandit`. Use `Scandit.BarcodeCount`, `Scandit.BarcodeCountView`, etc. at runtime. The npm packages (`scandit-cordova-datacapture-*`) are plugin manifests, not ES modules. Do not emit `import { ... } from 'scandit-cordova-datacapture-*'` in user code running in the WebView. Only TypeScript projects using Webpack/bundler can import types at compile time.
- **`deviceready` gate**: All Scandit APIs must be called after `document.addEventListener('deviceready', ...)`. Never call at module load time.
- **Plugin install**: Both plugins are required:
```bash
cordova plugin add scandit-cordova-datacapture-core
cordova plugin add scandit-cordova-datacapture-barcode
```
After any plugin change, run `cordova prepare`.
- **Web platform NOT supported**: BarcodeCount on Cordova requires iOS or Android. The web platform is not supported.
- **`BarcodeCountView` uses a DOM-overlay model**: The native view is sized and positioned to mirror an HTML element. The attach API (verified against plugin source) is:
- `barcodeCountView.connectToElement(htmlElement)` — synchronous, no `await` needed (internally async, but the public signature is `void`).
- `barcodeCountView.detachFromElement()` — synchronous `void`. Call during teardown.
- `barcodeCountView.setFrame(rect, isUnderContent)` — manually position using a `Rect`. Returns `Promise<void>`. Use only when NOT using `connectToElement`.
- `barcodeCountView.show()` / `barcodeCountView.hide()` — returns `Promise<void>`. Only use with `setFrame`; throws if called with an element attached.
- **Constructor pattern (≥7.6)**: `new Scandit.BarcodeCoPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-count-flutter6.09 KB
--- name: matrixscan-count-flutter description: MatrixScan Count (BarcodeCount) in Flutter projects — scandit_flutter_datacapture_barcode_count package. Multi-barcode counting and receiving workflows (scan-and-count, counting against a target list, status providers) with the BarcodeCountView widget. Use for integration, scan settings, result handling, UI customization, SDK version migration, or troubleshooting counting workflows. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan Count Flutter Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCount API changes between major SDK versions — class names, constructor signatures, listener interfaces, and the Flutter plugin import path have all evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. Flutter-specific gotchas worth flagging: - `await ScanditFlutterDataCaptureBarcode.initialize()` **must** be called (and awaited) in `main()` before `runApp(...)`, after `WidgetsFlutterBinding.ensureInitialized()`. Forgetting this yields a platform-channel error that can look unrelated to initialization. - `BarcodeCountView` is a Flutter `StatefulWidget`. The sample creates it inline in `build()` using the cascade `..uiListener = _bloc ..listener = _bloc` — this is correct for BarcodeCount because the view is not torn down on rebuild in the same way as BarcodeArView. However, storing it as a field in `initState()` is also acceptable for clarity. - `BarcodeCount(settings)` is the context-free constructor available on Flutter ≥7.6. On older SDKs (Flutter 6.17–7.5) you must use `BarcodeCount.forDataCaptureContext(context, settings)` which returns a `Future<BarcodeCount>` — **await** it before adding listeners. After ≥7.6, call `dataCaptureContext.setMode(barcodeCount)` explicitly when using the context-free constructor. - The BLoC owns `DataCaptureContext`, `BarcodeCount`, and the camera lifecycle. The BLoC also implements `BarcodeCountListener`, `BarcodeCountViewListener`, and `BarcodeCountViewUiListener`. - The BarcodeCount import barrel is `scandit_flutter_datacapture_barcode_count` — a separate barrel from `scandit_flutter_datacapture_barcode`. Always import both. - `Symbology` enum values use **lowerCamelCase** in Dart: `Symbology.code128`, `Symbology.ean13Upca`, `Symbology.code39`. Do not write `Symbology.Code128` / `Symbology.EAN13UPCA` — that is the JS/TS form and will not compile in Dart. - **Flutter-only listener methods**: `BarcodeCountListener` on Flutter ≥8.3 has an extended interface `IBarcodeCountExtendedListener` that adds `didUpdateSession`. `BarcodeCountCaptureListListener` on Flutter ≥8.3 has `IBarcodeCountCaptureListExtendedListener` that adds `didCompleteCaptureList`. These are Flutter-exclusive additions. - `BarcodeCountView` must be presented full screen per the SDK documentation. - Camera permission is required on both iOS (`NSCameraUsageDescription` in `ios/Runner/Info.plist`) and Android (runtime request via `permission_handler`). - Min SDK callouts: BarcodeCount Flutter 6.17; context-free constructor 7.6; Status mode 7.0 (earliest on Flutter); Mapping flow 8.3; Not-in-list action settings 8.3; `TextForBarcodesNotInListDetectedHint` 8.3; `TextForClusteringGestureHint` 8.3; `shouldDisableModeOnExitButtonTapped` 8.3. - License placeholder must be exactly: `'-- ENTER YOUR SCANDIT LICENSE KEY HERE --'` ## Intent Routing Based on the user's request, load the reference file before responding: - **Integrating BarcodeCount from scratch** (e.g. "add MatrixScan Count to my app", "set up barcode counting", "how do I use BarcodeCount in Flutter", "how do I count barcodes", "scanning against a list") →
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-count-ios8.82 KB
--- name: matrixscan-count-ios description: MatrixScan Count (BarcodeCount) in native iOS projects (Swift/Objective-C, ScanditBarcodeCapture) — counting and receiving barcodes in bulk with the BarcodeCountView UI in UIKit or SwiftUI, scanning against an expected/receiving list, spatial map, explicitly managed camera. Use for integration, settings and symbology configuration, result handling, UI customization, status mode, or troubleshooting counting workflows. license: Apache-2.0 metadata: author: scandit version: "0.1.1" --- # MatrixScan Count iOS Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The MatrixScan Count API has evolved across SDK versions — classes, properties, and initializers may have been renamed or restructured. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or view modifiers. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. The single most common mistake is assuming the view owns the camera: in MatrixScan Count the **`BarcodeCountView` does NOT own or manage the camera** — you create and drive the camera explicitly (`Camera.default`, apply `BarcodeCount.recommendedCameraSettings`, `context.setFrameSource`, and switch its state across the lifecycle). See `references/integration.md` (Camera section). ## Scope This skill is scoped to the **MatrixScan Count counting workflow**: `DataCaptureContext`, the `BarcodeCount` mode, `BarcodeCountSettings` (symbologies, per-symbology tuning, `expectsOnlyUniqueBarcodes`), `BarcodeCountView` (the built-in AR counting UI with Icon / Dot styles), the explicitly-managed camera frame source and lifecycle, `BarcodeCountListener` for collecting scanned barcodes, the List / Exit / Single-Scan button callbacks (`BarcodeCountViewUIDelegate`), feedback, control visibility, customizing the AR highlights (per-state brushes / icons / taps), and scanning against an expected/receiving list (`BarcodeCountCaptureList` + `TargetBarcode`). Also covered: **filtering** (count only some of the barcodes in the scene), the **hardware trigger** (volume button), and **scan preview** (`BarcodeCountSettings(scanPreviewEnabled:)`) — see the Advanced configurations section of `integration.md`. Out of scope: **tote mapping (MS Map)** is not covered. Mention it only as a pointer. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Setting up or adjusting the MatrixScan Count counting flow** (e.g. "add MatrixScan Count to my app", "count barcodes in bulk", "store the scanned barcodes when the list button is tapped", "mute the beep", "use the Dot style", restrict symbologies, show/hide a built-in control, "enable scan preview") → read `references/integration.md` and follow the instructions there. If the project already has MatrixScan Count wired up, do not re-create the context, mode, view, camera, or lifecycle — locate the existing ones (grep for `BarcodeCountView`, then `BarcodeCount`) and change only what the user asked for. Before writing code, determine whether the project uses UIKit or SwiftUI (check for `import SwiftUI`, an `@main` `App` struct, `SceneDelegate`/`AppDelegate`, `.storyboard`/`.xib` files, etc.) and use the matching Get Started page from the References table below. - **Customizing the look of the AR highlights** (e.g. "change the highlight color", "use a custom icon/brush per barcode", "use the dot style with custom colors") → read `references/highlights.md`. This assumes the basic integration is already in place; it covers the Icon (default) vs Dot styles, customizing the **icon** per barcode (`BarcodeCountIcon` built with `ScanditIconBuilder`, via the `iconForRecognizedBarcode` delegate callback / `setIcon`), and customizing the **Dot-style color** via `Brush` (the `recogn
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 6 — file references are metadata, not package contents.
matrixscan-count-net-android17.1 KB
--- name: matrixscan-count-net-android description: MatrixScan Count (BarcodeCount) in .NET for Android projects (net*-android, Scandit.DataCapture.Barcode NuGet, non-MAUI) — counting/receiving barcodes in bulk with BarcodeCountView, capture/receiving lists, spatial map, explicitly managed camera. For MAUI apps use matrixscan-count-net-maui. Use for integration, settings configuration, result handling, UI customization, SDK version migration, or troubleshooting counting workflows. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan Count .NET for Android Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs, and the .NET binding differs from the Kotlin/Java and iOS native SDKs in several places: factories instead of constructors, PascalCase members, C# events alongside listener interfaces, an explicitly-managed camera, etc. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. .NET-Android-specific gotchas worth flagging (and the places people get it wrong by pattern-matching from MatrixScan AR or the Kotlin SDK): - This skill targets the **non-MAUI** .NET for Android workload (project `<TargetFramework>net10.0-android</TargetFramework>` or similar, no `<UseMaui>` flag). For MAUI apps, use a MAUI-targeted skill instead — `BarcodeCountView` is hosted as a XAML element there and the lifecycle is wired through handlers, which is completely different. - **`BarcodeCount` is created with a FACTORY, not `new`**: `BarcodeCount.Create(dataCaptureContext, settings)` (there is also a `BarcodeCount.Create(settings)` overload with no context). `new BarcodeCount(...)` is a compile error — the constructor is private. `BarcodeCountSettings` **does** use a plain `new BarcodeCountSettings()`. (Note this is the opposite of MatrixScan AR, where `BarcodeAr` uses `new` and the *view* uses a factory.) - **The camera is explicitly managed by you — `BarcodeCountView` does NOT own it.** This is the single biggest difference from MatrixScan AR. You must: get `Camera.GetDefaultCamera(BarcodeCount.RecommendedCameraSettings)` (or `Camera.DefaultCamera` then `camera.ApplySettingsAsync(...)`), call `dataCaptureContext.SetFrameSourceAsync(camera)`, and toggle the camera yourself with `camera.SwitchToDesiredStateAsync(FrameSourceState.On)` / `FrameSourceState.Off` in the activity's `OnResume` / `OnPause`. There is no `barcodeCountView.OnResume()` / `OnPause()` / `Start()` / `Stop()` — those are MatrixScan AR methods and do not exist on `BarcodeCountView`. - **`barcodeCount.Enabled` (get/set `bool`) must be set to `true`** for frames to be processed. Set it `true` in `OnResume` and (optionally) `false` in `OnPause`. `BarcodeAr` has no such toggle; `BarcodeCount` does. - **`BarcodeCountView.Create(Context, DataCaptureContext, BarcodeCount [, BarcodeCountViewStyle])`** takes the Android **`Context`** (the activity) as its first argument — **not** a parentView/ViewGroup (that's the AR signature). The style overload takes `BarcodeCountViewStyle.Icon` (default look) or `BarcodeCountViewStyle.Dot`. - **`BarcodeCountView` IS a real Android `View`** (via `public static implicit operator View(BarcodeCountView)`). You add it to the hierarchy yourself: `container.AddView(barcodeCountView)`. This is the opposite of `BarcodeArView`, which is *not* a View and auto-attaches itself. Do **not** look for an auto-attach `parentView` argument on `BarcodeCountView.Create`. - **`IBarcodeCountListener` has THREE methods:** `OnScan(BarcodeCount, BarcodeCountSession, IFrameData)`, `OnObservationStarted(BarcodeCount)`, `OnObservationStopped(BarcodeCount)`. (MatrixScan AR's listener has only one — do not assume parity.) The idiomatic C# alternative is t
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-count-net-ios17.6 KB
--- name: matrixscan-count-net-ios description: MatrixScan Count (BarcodeCount) in .NET for iOS projects (net*-ios, Scandit.DataCapture.Barcode NuGet, non-MAUI) — counting/receiving barcodes in bulk with BarcodeCountView in a UIViewController, capture/receiving lists, spatial map, explicitly managed camera. For MAUI apps use matrixscan-count-net-maui. Use for integration, settings configuration, result handling, UI customization, SDK version migration, or troubleshooting counting workflows. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan Count .NET for iOS Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs, and the .NET binding differs from the Swift/Objective-C native SDK and from the Android .NET binding in several places: factories instead of constructors, PascalCase members, C# events alongside listener interfaces, an explicitly-managed camera, and a `CGRect`-based view factory. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. .NET-iOS-specific gotchas worth flagging (the places people get it wrong by pattern-matching from MatrixScan AR, the native Swift SDK, the Android .NET binding, or MAUI): - This skill targets the **non-MAUI** .NET for iOS workload (project `<TargetFramework>net10.0-ios</TargetFramework>` or similar, no `<UseMaui>` flag). For MAUI apps, use a MAUI-targeted skill instead — there `BarcodeCountView` is hosted as a XAML element and wired through `HandlerChanged`, which is completely different. **The official iOS Get Started page mixes in MAUI (XAML / `Scandit.DataCapture.Barcode.Maui`) snippets — ignore those for a non-MAUI project.** - **`BarcodeCount` is created with a FACTORY, not `new`**: `BarcodeCount.Create(dataCaptureContext, settings)` (there is also a `BarcodeCount.Create(settings)` overload with no context). `new BarcodeCount(...)` is a compile error — the constructor is private. `BarcodeCountSettings` **does** use a plain `new BarcodeCountSettings()`. - **`BarcodeCountView.Create(CGRect frame, DataCaptureContext, BarcodeCount [, BarcodeCountViewStyle])`** takes a **`CGRect` frame** as its first argument — typically `this.View!.Bounds`. It does **not** take an Android `Context` (that's the Android binding) and it is **not** a parent view. The style overload takes `BarcodeCountViewStyle.Icon` (default look) or `BarcodeCountViewStyle.Dot`. - **`BarcodeCountView` IS a real `UIView`** (via `public static implicit operator View(BarcodeCountView)`, where `View` resolves to `UIKit.UIView` on iOS). You add it to the hierarchy yourself: `this.View.AddSubview(barcodeCountView)`, and usually set `AutoresizingMask = FlexibleWidth | FlexibleHeight`. - **The camera is explicitly managed by you — `BarcodeCountView` does NOT own it.** You must: get `Camera.GetDefaultCamera()` (or the `Camera.DefaultCamera` property), apply `BarcodeCount.RecommendedCameraSettings` with `camera.ApplySettingsAsync(...)`, call `dataCaptureContext.SetFrameSourceAsync(camera)`, and toggle the camera yourself with `camera.SwitchToDesiredStateAsync(FrameSourceState.On / .Standby / .Off)` in `ViewWillAppear` / `ViewWillDisappear`. There is no `barcodeCountView.OnResume()` / `Start()` / `Stop()` — those don't exist. (iOS does have `PrepareScanning`/`StopScanning` on the view, but the camera frame-source toggle is the normal lifecycle handle.) - **iOS lifecycle is `UIViewController`, not an Android Activity.** Toggle the camera and `barcodeCount.Enabled` in `ViewWillAppear`/`ViewWillDisappear`. iOS additionally has **`FrameSourceState.Standby`** — a lighter "pause" used when navigating to another screen *within* the app (keeps the camera warm), versus `FrameSourceState.Off` when actually back
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-count-net-maui17.4 KB
---
name: matrixscan-count-net-maui
description: MatrixScan Count (BarcodeCount) in .NET MAUI projects (<UseMaui>true</UseMaui>, Scandit.DataCapture.Barcode.Maui NuGet) — counting/receiving workflows with the BarcodeCountView XAML control and capture/receiving lists. For non-MAUI .NET use matrixscan-count-net-android or matrixscan-count-net-ios. Use for integration, XAML and builder-chain setup, result handling, UI customization, SDK version migration, or troubleshooting counting workflows.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# MatrixScan Count .NET MAUI Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The .NET binding differs from the Kotlin/Java and Swift native SDKs (factories instead of constructors, PascalCase members, C# events alongside listener interfaces), and the .NET MAUI integration adds its own handler/XAML/lifecycle concerns on top. Patterns from the standalone `matrixscan-count-net-android` / `matrixscan-count-net-ios` skills do not always apply unchanged — and the MAUI `BarcodeCountView` is **not** wired the way the non-MAUI native views are.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
MAUI-specific gotchas worth flagging (and the places people get it wrong by pattern-matching from MatrixScan Batch, SparkScan, or the native Android/iOS Count skills):
- This skill targets MAUI apps with `<UseMaui>true</UseMaui>`. For non-MAUI .NET projects, use `matrixscan-count-net-android` (for `net*-android`) or `matrixscan-count-net-ios` (for `net*-ios`) instead — there the view is hosted natively (added to a `FrameLayout` / a `UIView`), which is completely different from the MAUI XAML control.
- **The MAUI builder chain for BarcodeCount is `.UseScanditCore().UseScanditBarcode(configure => configure.AddBarcodeCountView())`.** `UseScanditCore` takes **no** lambda; `UseScanditBarcode` **does** take a lambda with `AddBarcodeCountView()` inside it. This is the **same shape as SparkScan** (`AddSparkScanView`) and the **opposite** of the BarcodeBatch / BarcodeCapture chain, which is `.UseScanditCore(c => c.AddDataCaptureView()).UseScanditBarcode()`. Do **not** write `AddDataCaptureView()` for BarcodeCount — it has its own pre-built MAUI handler and does **not** use the generic `<scandit:DataCaptureView>`.
- **XAML namespace is `clr-namespace:Scandit.DataCapture.Barcode.Count.UI.Maui;assembly=ScanditBarcodeCaptureMaui`.** Note `assembly=ScanditBarcodeCaptureMaui` (no dots) — the NuGet package is `Scandit.DataCapture.Barcode.Maui` but the assembly it produces is `ScanditBarcodeCaptureMaui`. The control is `<scandit:BarcodeCountView>`, distinct from SparkScan's `<scandit:SparkScanView>` and from the generic `<scandit:DataCaptureView>`.
- **`<scandit:BarcodeCountView>` requires two bound properties: `DataCaptureContext` and `BarcodeCount`.** Both are `OneTime` bindable properties — bind them to view-model properties (`DataCaptureContext="{Binding DataCaptureContext}"`, `BarcodeCount="{Binding BarcodeCount}"`). Without both, the preview is black and counting never starts. Setting `x:Name` alone does **not** wire them.
- **The view-style property is `ViewStyle`, not `Style`, and its default is `Dot`.** In XAML write `ViewStyle="Icon"` (or `ViewStyle="Dot"`). `Style` is a stock MAUI `VisualElement` property and setting it does nothing for the counting UI. `ViewStyle` is `OneTime` — set it in XAML at creation, not later in code.
- **You manage the camera yourself — `BarcodeCountView` does NOT own it.** This is the single biggest difference from SparkScan in MAUI (where the `SparkScanView` drives the camera through `OnAppearing()`/`OnDisappearing()`). For BarcodeCount you must: `Camera.Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-count-rn6.84 KB
--- name: matrixscan-count-rn description: MatrixScan Count (BarcodeCount) in React Native projects — scandit-react-native-datacapture-barcode package. Multi-barcode counting workflows (scan-and-count, counting against an expected capture list, status overlays) with BarcodeCountView. For Capacitor use matrixscan-count-capacitor. Use for integration, settings and symbology configuration, result handling, UI customization, or troubleshooting counting workflows. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # MatrixScan Count React Native Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The BarcodeCount* API surface changes significantly between major SDK versions — constructor signatures change, new properties are added, and the React Native plugin surface (imports, native linking, pod install, package names) has also evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. React Native-specific gotchas worth flagging: - `DataCaptureContext.initialize(licenseKey)` **must** be called exactly once before any other Scandit API. It sets up `DataCaptureContext.sharedInstance`, which is the singleton everything else reads from. Do not construct multiple contexts. - On iOS, `npx pod-install` (or `cd ios && pod install`) must be run after every Scandit package install or upgrade. Android auto-links via Gradle — no manual step there. - Metro's bundler cache frequently masks Scandit package upgrades. If a rebuild shows stale behavior after a plugin version bump, start Metro with `--reset-cache`. - `BarcodeCountView` is a React component (rendered as JSX). Pass `barcodeCount` and `context` as props. Do NOT manually attach the view to the context — the props handle that. The view does not require an explicit `start()` call (unlike BarcodeArView). - `listener` and `uiListener` on `BarcodeCountView` are set imperatively via the `ref` callback: `view.listener = ...` and `view.uiListener = ...`. - Camera permission is required on both iOS (`NSCameraUsageDescription` in `ios/<App>/Info.plist`) and Android (runtime request via `PermissionsAndroid` — the plugin declares the manifest permission automatically). - The `new BarcodeCount(settings)` constructor (without a context argument) is available from react-native=7.6. Older integrations used `BarcodeCount.forDataCaptureContext(context, settings)`. If the target project is on an older plugin, use the factory. Use `dataCaptureContext.addMode(barcodeCount)` to attach the mode when using the ≥7.6 constructor. - `BarcodeCountStatusProvider`, `setStatusProvider`, `shouldShowStatusModeButton`, `shouldShowStatusIconsOnScan`, `TextForBarcodesNotInListDetectedHint`, `TextForScreenCleanedUpHint`, `TextForClusteringGestureHint`, `StatusModeButtonAccessibilityLabel/Hint`, `StatusModeButtonContentDescription`: all require react-native=8.3+. - `BarcodeCountNotInListActionSettings` and `barcodeNotInListActionSettings` on `BarcodeCountView`: require react-native=7.1+. - `tapToUncountEnabled`: requires react-native=7.0+. - `enableHardwareTrigger(keyCode)` on Android: requires react-native=7.1+, device API level ≥28. - `hardwareTriggerEnabled` (iOS volume button trigger): requires react-native=7.1+. - `BarcodeCountStatusProvider.onStatusRequested(barcodes, callback)` is **callback-based** — do NOT await it. Call `callback.onStatusReady(result)` to deliver the result. The callback pattern is async from the platform's perspective. - `BarcodeCountSettings.clusteringMode` requires react-native=8.3+. - `BarcodeCountSettings.disableModeWhenCaptureListCompleted` requires react-native=8.3+. - `BarcodeCountSession.recognizedBarcodes` (array API) requires react-native=7.0
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
matrixscan-pick-ios4.37 KB
--- name: matrixscan-pick-ios description: MatrixScan Pick (BarcodePick) in native iOS projects (Swift, ScanditBarcodeCapture) — pick/put verification workflows where the app confirms each item picked, with BarcodePickView, product provider, highlight styles, and auto-pick or tap-to-pick behavior. Use for integration, settings configuration, highlight styling, feedback, finish-button handling, or troubleshooting pick workflows. license: Apache-2.0 metadata: author: scandit version: "0.1.1" --- # MatrixScan Pick iOS Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The MatrixScan Pick API has evolved across SDK versions — classes, properties, and view modifiers may have been renamed or restructured. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or view modifiers. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. ## Scope This skill is scoped to the **MatrixScan Pick picking workflow**: `DataCaptureContext`, `BarcodePick` mode, `BarcodePickSettings`, `BarcodePickView`, `BarcodePickViewSettings`, the product provider (`BarcodePickAsyncMapperProductProvider`), state-aware highlights (CustomView and built-in styles), the finish button, sound/haptic feedback, camera and control visibility. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Setting up or adjusting the MatrixScan Pick picking flow** (e.g. "add MatrixScan Pick to my app", "set up the product list", "show / hide the finish button", "mute the beep", "track what's been picked") → read `references/integration.md` and follow the instructions there. If the project already has MatrixScan Pick wired up, do not re-create the context, mode, view, or lifecycle — locate the existing ones (grep for `BarcodePickView`, then `BarcodePick`) and change only what the user asked for. Before writing code, determine whether the project uses UIKit or SwiftUI (check for `import SwiftUI`, an `@main` `App` struct, `SceneDelegate`/`AppDelegate`, `.storyboard`/`.xib` files, etc.) and use the matching Get Started page from the References table below. - **Customizing the highlights drawn over barcodes** (e.g. "change the highlight color per state", "use a rectangle instead of a dot", "show an icon / status badge on picked items", "draw a custom view over each barcode", "style the to-pick vs picked highlight") → read `references/highlights.md`. This assumes the basic integration is already in place; it covers the five highlight styles and the per-state brush / icon / status-icon / custom-view APIs. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, or view modifiers. If unsure whether an API exists or how it is called — or if a compile error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in your fetch prompt. 2. If no direct link was found, fetch the API index (see **Full API reference** in the table below), extract the actual link from it, and follow that. URL structures can vary (e.g. `api/ui/` subdirectory) and guessing will lead to 404s. ## References Use this table to pick the right page to fetch for a given question, and include the link in your answer so the user can explore further. | Topic | Resource | |---|---| | UIKit integration | [Get Started (UIKit
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
sparkscan-android3.41 KB
--- name: sparkscan-android description: SparkScan single-barcode scanning with the pre-built scanning UI in native Android (Kotlin/Java) projects. Use for integration, scan settings, result handling, UI customization, SDK version migration, replacing a third-party barcode scanning library, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # SparkScan Android Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The SparkScan API changes significantly between major SDK versions — properties get renamed, removed, or restructured. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating SparkScan from scratch** (e.g. "add SparkScan to my app", "set up barcode scanning", "how do I use SparkScan", "how do I handle feedback in SparkScan") → read `references/integration.md` and follow the instructions there. - **Migrating or upgrading an existing SparkScan integration** (e.g. "upgrade from v6 to v7", "migrate my SparkScan", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there. - **Replacing a third-party barcode scanner with SparkScan** (e.g. "replace my [scanner] with SparkScan", "migrate from [framework] to SparkScan", "switch from [library] barcode scanning to SparkScan") → read `references/third-party-migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, or property names. If unsure whether an API exists or how it is called — or if a compile error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched (e.g. the Advanced Configurations page) contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in your fetch prompt. 2. If no direct link was found, fetch the API index (see **Full API reference** in the table below), extract the actual link from it, and follow that. URL structures can vary (e.g. `api/ui/` subdirectory) and guessing will lead to 404s. ## References Direct users to the right resource based on their question: | Topic | Resource | |---|---| | Get Started | [Get Started](https://docs.scandit.com/sdks/android/sparkscan/get-started/) · [Sample](https://github.com/Scandit/datacapture-android-samples/tree/master/01_Single_Scanning_Samples/01_Barcode_Scanning_with_Pre_Built_UI/ListBuildingSample) | | Advanced topics (custom feedback, hardware triggers, scanning modes, UI customization) | [Advanced Configurations](https://docs.scandit.com/sdks/android/sparkscan/advanced/) | | Full API reference | [SparkScan API](https://docs.scandit.com/data-capture-sdk/android/barcode-capture/api.html) |
Referenced files: 3 — file references are metadata, not package contents.
sparkscan-capacitor4.63 KB
--- name: sparkscan-capacitor description: Capacitor — SparkScan single-barcode scanning with the pre-built scanning UI in Capacitor (Ionic) hybrid mobile apps via the Scandit Capacitor plugins (`ScanditCaptureCorePlugin`), not the browser-only web SDK. Use for integration, scan settings, result handling, UI customization, SDK version migration, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # SparkScan Capacitor Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The SparkScan API changes significantly between major SDK versions — properties get renamed, removed, or restructured, and the Capacitor plugin surface (imports, plugin initialization, native sync steps) has also evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. Capacitor-specific gotchas worth flagging: - `ScanditCaptureCorePlugin.initializePlugins()` **must** be called (and awaited) before any other Scandit API — including `DataCaptureContext` construction. Forgetting this produces runtime errors that look unrelated to initialization. - `npx cap sync` must be run after every plugin version change to propagate native artifacts into iOS/Android. Skipping it yields a web/native version mismatch at runtime. - SparkScan renders as a native overlay above the webview — there is no DOM mount point for the scanner. Do not instruct users to add a `<div id="scanner">` container. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating SparkScan from scratch** (e.g. "add SparkScan to my app", "set up barcode scanning", "how do I use SparkScan in Capacitor", "how do I handle feedback in SparkScan") → read `references/integration.md` and follow the instructions there. - **Migrating or upgrading an existing SparkScan integration** (e.g. "upgrade from v6 to v7", "migrate my SparkScan", "bump the Scandit plugins to v8", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, property names, or imports. If unsure whether an API exists or how it is called — or if a TypeScript / runtime error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched (e.g. the Advanced Configurations page) contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in your fetch prompt. 2. If no direct link was found, fetch the API index (see **Full API reference** in the table below), extract the actual link from it, and follow that. URL structures vary across SDK versions and plugin paths (e.g. `api/ui/` subdirectory) and guessing will lead to 404s. ## Framework variant policy Capacitor is a WebView-based framework. Examples in this skill use **plain JavaScript (ES modules)**. TypeScript projects can use the same imports and APIs verbatim — just add types — but this skill does not assume a TypeScript project by default. If the target project is clearly TypeScript (`.ts` files, `tsconfig.json`), adapt the final output to TypeScript syntax; otherwise stay in plain JS. ## References Direct users to the right resource based on their question: | Topic | Resource | |---|---| | Capacitor integration | [Get Star
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
sparkscan-cordova4.82 KB
---
name: sparkscan-cordova
description: Cordova — SparkScan single-barcode scanning with the pre-built scanning UI in Apache Cordova hybrid apps via the `scandit-cordova-datacapture-*` plugins (global `window.Scandit`), not the browser-only web SDK. Use for integration, scan settings, result handling, UI customization, SDK version migration, or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# SparkScan Cordova Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The SparkScan API changes significantly between major SDK versions — properties get renamed, removed, or restructured, and the Cordova plugin surface (global `Scandit` namespace, plugin install commands, `deviceready` timing) has also evolved.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
Cordova-specific gotchas worth flagging:
- The Scandit SDK is exposed on the global `window.Scandit` object. The npm package names (`scandit-cordova-datacapture-*`) are plugin manifests — they are **not** runtime ES modules. Do not emit `import { ... } from 'scandit-cordova-datacapture-*'` in user code that will run in the WebView; use `Scandit.X` (with an optional `global.d.ts` for typing) instead. Only Ionic/Angular/Webpack-bundled projects import from the packages directly.
- `document.addEventListener('deviceready', ...)` is the **only** safe gate for Scandit APIs. Do not run any Scandit call at module load time — it will fail because the Cordova bridge is not ready yet.
- After changing plugin versions, run `cordova prepare` (and reinstall the platform if needed) to propagate the new native artifacts. Skipping this yields a runtime version mismatch.
## Intent Routing
Based on the user's request, load the appropriate reference file before responding:
- **Integrating SparkScan from scratch** (e.g. "add SparkScan to my app", "set up barcode scanning", "how do I use SparkScan in Cordova", "how do I handle feedback in SparkScan") → read `references/integration.md` and follow the instructions there.
- **Migrating or upgrading an existing SparkScan integration** (e.g. "upgrade from v6 to v7", "migrate my SparkScan", "bump the Scandit plugins to v8", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there.
## API Usage Policy
Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, property names, or imports. If unsure whether an API exists or how it is called — or if a runtime error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further.
**Never construct or guess documentation URLs.** When you need a specific class or property's API page:
1. First check whether the page you already fetched contains a direct hyperlink to it — topic pages link directly to relevant API symbols.
2. If no direct link was found, fetch the API index (see **Full API reference** in the table below), extract the actual link from it, and follow that.
URL structures vary across SDK versions and plugin paths and guessing will lead to 404s.
## Framework variant policy
Cordova is a WebView-based framework. Examples in this skill use **plain JavaScript** (with optional JSDoc type hints as seen in the official ListBuildingSample). The same API works in TypeScript — add a `global.d.ts` declaration file (described in `references/integration.md`) and write TypeScript syntax. This skill does not assume a TypeScript project by default. If the target project is clearly TypeScript (`.ts` files, `tsconfig.jPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
sparkscan-flutter5.1 KB
--- name: sparkscan-flutter description: SparkScan single-barcode scanning with the pre-built scanning UI (`SparkScanView` widget) in Flutter (Dart) projects. Use for integration, scan settings, result handling, UI customization, SDK version migration, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # SparkScan Flutter Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The SparkScan API changes significantly between major SDK versions — properties get renamed, removed, or restructured, and the Flutter plugin surface (imports, plugin initialization, pub packages) has also evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. Flutter-specific gotchas worth flagging: - `await ScanditFlutterDataCaptureBarcode.initialize()` **must** be called (and awaited) in `main()` before `runApp(...)`, after `WidgetsFlutterBinding.ensureInitialized()`. Forgetting this yields a platform-channel error that can look unrelated to initialization. - `SparkScanView` is a Flutter `StatefulWidget` that **wraps** a child widget — it is not a pure native overlay. The child widget renders underneath the native scanning controls. Do not instruct users to stack `SparkScanView` separately from their normal widget tree. - `flutter pub get` must be run after every package version change. On iOS, the Podfile resolves transitively — no manual pod install needed unless the user has a custom setup. - Camera permission is required on both iOS (`NSCameraUsageDescription` in `ios/Runner/Info.plist`) and Android (runtime request via `permission_handler` — the plugin declares the manifest permission automatically). ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating SparkScan from scratch** (e.g. "add SparkScan to my app", "set up barcode scanning", "how do I use SparkScan in Flutter", "how do I handle feedback in SparkScan") → read `references/integration.md` and follow the instructions there. - **Migrating or upgrading an existing SparkScan integration** (e.g. "upgrade from v6 to v7", "migrate my SparkScan", "bump the Scandit packages to v8", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, property names, or imports. If unsure whether an API exists or how it is called — or if an analyzer / runtime error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched (e.g. the Advanced Configurations page) contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in your fetch prompt. 2. If no direct link was found, fetch the API index (see **Full API reference** in the table below), extract the actual link from it, and follow that. URL structures vary across SDK versions and package paths (e.g. `api/ui/` subdirectory) and guessing will lead to 404s. ## Framework variant policy Flutter apps use many state-management patterns (StatefulWidget, BLoC, Provider, Riverpod). Examples in this skill use the **BLoC pattern** because it matches the official `ListBuildingSample`, keeps the scan pipeline cleanly separated from the widget tree, and composes well with the camera lifecy
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
sparkscan-ios3.67 KB
--- name: sparkscan-ios description: SparkScan single-barcode scanning with the pre-built scanning UI in native iOS (Swift) projects. Use for integration, scan settings, result handling, UI customization, SDK version migration, replacing a third-party barcode scanning library, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.1.3" --- # SparkScan iOS Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The SparkScan API changes significantly between major SDK versions — properties get renamed, removed, or restructured. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or view modifiers. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating SparkScan from scratch** (e.g. "add SparkScan to my app", "set up barcode scanning", "how do I use SparkScan", "how do I handle feedback in SparkScan") → read `references/integration.md` and follow the instructions there. - **Migrating or upgrading an existing SparkScan integration** (e.g. "upgrade from v6 to v7", "migrate my SparkScan", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there. - **Replacing a third-party barcode scanner with SparkScan** (e.g. "replace my [scanner] with SparkScan", "migrate from [framework] to SparkScan", "switch from [library] barcode scanning to SparkScan") → read `references/third-party-migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, or view modifiers. If unsure whether an API exists or how it is called — or if a compile error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched (e.g. the Advanced Configurations page) contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in your fetch prompt. 2. If no direct link was found, fetch the API index (see **Full API reference** in the table below), extract the actual link from it, and follow that. URL structures can vary (e.g. `api/ui/` subdirectory) and guessing will lead to 404s. ## References Direct users to the right resource based on their question: | Topic | Resource | |---|---| | UIKit integration | [Get Started (UIKit)](https://docs.scandit.com/sdks/ios/sparkscan/get-started/) · [Sample](https://github.com/Scandit/datacapture-ios-samples/tree/master/01_Single_Scanning_Samples/01_Barcode_Scanning_with_Prebuilt_UI/ListBuildingSampleUIKit) | | SwiftUI integration | [Get Started (SwiftUI)](https://docs.scandit.com/sdks/ios/sparkscan/get-started-with-swift-ui/) · [Sample](https://github.com/Scandit/datacapture-ios-samples/tree/master/01_Single_Scanning_Samples/01_Barcode_Scanning_with_Prebuilt_UI/ListBuildingSampleSwiftUI) | | Advanced topics (custom feedback, hardware triggers, scanning modes, UI customization) | [Advanced Configurations](https://docs.scandit.com/sdks/ios/sparkscan/advanced/) | | Full API reference | [SparkScan API](https://docs.scandit.com/data-capture-sdk/ios/barcode-capture/api.html) |
Referenced files: 3 — file references are metadata, not package contents.
sparkscan-net-android15.8 KB
---
name: sparkscan-net-android
description: SparkScan single-barcode scanning with the pre-built `SparkScanView` UI in .NET for Android projects (`net*-android` target framework, `Scandit.DataCapture.Barcode` NuGet, non-MAUI — for MAUI apps use sparkscan-net-maui). Use for integration, scan settings, result handling, feedback customization, lifecycle wiring, SDK version migration (v6→v7→v8), replacing third-party scanners (ZXing.Net), or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# SparkScan .NET for Android Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The SparkScan API changes between major SDK versions — button-visibility / color properties get renamed, removed, or restructured. The .NET binding also uses **different naming conventions** than the Kotlin/Java native SDK (PascalCase, `Enabled` instead of `isEnabled`, `TimeSpan` instead of `TimeInterval`, etc.), and a few naming choices differ from the rest of the .NET API.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
.NET-Android-specific gotchas worth flagging:
- This skill targets the **non-MAUI** .NET for Android workload (project `<TargetFramework>net10.0-android</TargetFramework>`, no `<UseMaui>` flag). For MAUI apps, use the `sparkscan-net-maui` skill instead.
- **`SparkScan` and `SparkScanSettings` use plain `new` constructors, not `Create(...)` factories.** This is unusual compared to the rest of the .NET API (`BarcodeCapture.Create(...)`, `BarcodeCaptureSettings.Create()`, `DataCaptureView.Create(...)`). The canonical pattern is `var settings = new SparkScanSettings(); var sparkScan = new SparkScan(settings);` — writing `SparkScan.Create(...)` or `SparkScanSettings.Create()` is a compile error. `DataCaptureContext.ForLicenseKey(key)` still uses the factory form (it lives in Core, not Spark).
- **`SparkScanView.Create(parent, context, sparkScan, settings)` IS a factory** (unlike `SparkScan` itself). The parent argument must be a `SparkScanCoordinatorLayout` for everything to position correctly — passing an arbitrary `ViewGroup` is supported by the binding but the official sample uses `SparkScanCoordinatorLayout` and so should you.
- **`SparkScanCoordinatorLayout` is declared in XML, not C#.** It lives in `Scandit.DataCapture.Barcode.Spark.UI.Platform.Android` and is referenced from the activity layout as `<com.scandit.datacapture.barcode.spark.ui.SparkScanCoordinatorLayout … />`. Get it with `FindViewById<SparkScanCoordinatorLayout>(Resource.Id.spark_scan_coordinator)`.
- Lifecycle on the view is `sparkScanView.OnPause()` / `sparkScanView.OnResume()` — these are **not** the activity's `OnPause`/`OnResume`. Forward the activity calls into them: `protected override void OnPause() { base.OnPause(); this.sparkScanView.OnPause(); }`.
- The .NET `ISparkScanListener` has **only two** methods: `OnBarcodeScanned(SparkScan, SparkScanSession, IFrameData?)` and `OnSessionUpdated(SparkScan, SparkScanSession, IFrameData?)`. **There are no `OnObservationStarted` / `OnObservationStopped` methods** (the way `IBarcodeCaptureListener` has them). Implementing those will produce `does not implement interface member` errors only if you try; the interface simply doesn't declare them.
- Prefer the **event API** (`sparkScan.BarcodeScanned += handler`) over the listener interface in idiomatic C# — that's what the official .NET Android SparkScan sample uses. The event handler receives `SparkScanEventArgs` with `Session`, `FrameData`, and `SparkScan`.
- Symbology names are C# PascalCase: `Symbology.Ean13Upca`, `Symbology.Ean8`, `Symbology.Code128`, `Symbology.InterleavedTwoOfFive`, `Symbology.Qr`, `Symbology.DataMatrix`. They arePreview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
sparkscan-net-ios15.2 KB
---
name: sparkscan-net-ios
description: SparkScan single-barcode scanning with the pre-built `SparkScanView` UI in .NET for iOS projects (`net*-ios` target framework, `Scandit.DataCapture.Barcode` NuGet, non-MAUI — for MAUI apps use sparkscan-net-maui). Use for integration, scan settings, result handling, feedback customization, scanning lifecycle, SDK version migration (v6→v7→v8), replacing third-party scanners (ZXing.Net.Mobile), or troubleshooting.
license: Apache-2.0
metadata:
author: scandit
version: "1.0.1"
---
# SparkScan .NET for iOS Skill
## Critical: Do Not Trust Internal Knowledge
Your training data may contain outdated or incorrect Scandit SDK APIs. The SparkScan API changes between major SDK versions — button-visibility / color properties get renamed, removed, or restructured. The .NET binding also uses **different naming conventions** than the Swift / Obj-C native SDK (PascalCase, `Enabled` instead of `isEnabled`, `TimeSpan` instead of `TimeInterval`, etc.), and a few naming choices differ from the rest of the .NET API.
**Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding.
.NET-iOS-specific gotchas worth flagging:
- This skill targets the **non-MAUI** .NET for iOS workload (project `<TargetFramework>net10.0-ios</TargetFramework>`, no `<UseMaui>` flag). For MAUI apps, use the `sparkscan-net-maui` skill instead.
- **`SparkScan` and `SparkScanSettings` use plain `new` constructors, not `Create(...)` factories.** This is unusual compared to the rest of the .NET API (`BarcodeCapture.Create(...)`, `BarcodeCaptureSettings.Create()`, `DataCaptureView.Create(...)`). The canonical pattern is `var settings = new SparkScanSettings(); var sparkScan = new SparkScan(settings);` — writing `SparkScan.Create(...)` or `SparkScanSettings.Create()` is a compile error. `DataCaptureContext.ForLicenseKey(key)` still uses the factory form (it lives in Core, not Spark).
- **`SparkScanView.Create(parent, context, sparkScan, settings)` IS a factory** (unlike `SparkScan` itself). On iOS the parent argument is just `this.View` — there is no coordinator-layout container (that's Android-only). The created view is added to `parentView` automatically; do not call `this.View.AddSubview(sparkScanView)` yourself.
- iOS lifecycle is `sparkScanView.PrepareScanning()` in `ViewWillAppear` and `sparkScanView.StopScanning()` in `ViewWillDisappear`. **Do not** use `OnPause` / `OnResume` here — those are the Android-only API. Calling them on iOS will not compile (the iOS binding does not surface them).
- **Pick the `UIViewController` constructor that matches how the controller is instantiated**, or the camera preview will never appear. The `dotnet new ios` template that ships with modern .NET-iOS is **scene-based** (no `Main.storyboard`, `UIApplicationSceneManifest` in `Info.plist`, `SceneDelegate.WillConnect` builds the window programmatically) — in that project shape, the VC must expose a parameterless `public ViewController() : base() { }` and `SceneDelegate.WillConnect` calls `new ViewController()`. Older Scandit samples are **storyboard-based** (`UIMainStoryboardFile` in `Info.plist`, `customClass="ViewController"` in the storyboard) — those need `public ViewController(IntPtr handle) : base(handle) { }` because storyboard inflation invokes that ctor with a real native handle. **Never call `new ViewController(IntPtr.Zero)`** to bridge the two: `IntPtr.Zero` is a null native handle, so the resulting managed wrapper has no underlying `UIViewController`; `this.View` never attaches to the window, `SparkScanView.Create(parentView: this.View, …)` lands on a detached view, and the app launches into a blank screen with no camera and no scans. See `references/integration.md` "Scene-based vs storyboard instantiation" forPreview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
sparkscan-net-maui16 KB
--- name: sparkscan-net-maui description: SparkScan single-barcode scanning with the pre-built `SparkScanView` UI in .NET MAUI projects (`<UseMaui>true</UseMaui>`, `Scandit.DataCapture.Barcode.Maui` NuGet) — for non-MAUI .NET projects use sparkscan-net-android or sparkscan-net-ios. Use for integration, scan settings, result handling, feedback and UI customization, SDK version migration (v6→v7→v8), replacing third-party MAUI scanners (ZXing.Net.Maui), or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # SparkScan .NET MAUI Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The SparkScan API changes between major SDK versions — button-visibility / color properties get renamed, removed, or restructured. The .NET binding also uses **different naming conventions** than the Kotlin / Swift native SDKs (PascalCase, `Enabled` instead of `isEnabled`, `TimeSpan` instead of `TimeInterval`, etc.), and the MAUI control has its own quirks that are separate from both the BarcodeCapture MAUI integration and the non-MAUI .NET-Android / .NET-iOS SparkScan integrations. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. MAUI-specific gotchas worth flagging: - This skill is for MAUI apps (`<UseMaui>true</UseMaui>` in the `.csproj`). If the project does **not** have `<UseMaui>true</UseMaui>`, use the `sparkscan-net-android` or `sparkscan-net-ios` skill instead — those cover the non-MAUI .NET Android / .NET iOS workloads. - **The MAUI builder chain for SparkScan is different from the BarcodeCapture MAUI builder chain.** SparkScan uses `.UseScanditCore().UseScanditBarcode(configure => configure.AddSparkScanView())` — `UseScanditCore` takes **no** `configure` lambda and `UseScanditBarcode` **does** take a configure lambda with `AddSparkScanView()` inside it. This is the **opposite** shape of the BarcodeCapture builder, which is `.UseScanditCore(c => c.AddDataCaptureView()).UseScanditBarcode()` (Core takes a configure lambda; Barcode takes none). Do not cross-pollinate — if you see a BarcodeCapture MAUI sample online with `UseScanditCore(c => c.AddDataCaptureView()).UseScanditBarcode()`, that pattern is correct **for BarcodeCapture only**. For SparkScan, the builder line must read `.UseScanditCore().UseScanditBarcode(c => c.AddSparkScanView())`. Cross-reference the BarcodeCapture MAUI skill if both modes coexist in the same app — both registrations are needed in that case. - **`AddDataCaptureView()` is not needed for SparkScan.** SparkScan has its own pre-built MAUI handler (`<scandit:SparkScanView>`) — it does not use the generic `<scandit:DataCaptureView>`. Calling `UseScanditCore(c => c.AddDataCaptureView())` on a SparkScan-only project is harmless but unnecessary; the simpler `UseScanditCore()` is what the official sample uses. - **XAML namespace is `clr-namespace:Scandit.DataCapture.Barcode.Spark.UI.Maui;assembly=ScanditBarcodeCaptureMaui`.** Note: `assembly=ScanditBarcodeCaptureMaui` (no dots in the assembly name) — the NuGet package is `Scandit.DataCapture.Barcode.Maui` but the assembly it produces is `ScanditBarcodeCaptureMaui`. Easy to get wrong if you just copy the package id. - **`<scandit:SparkScanView>` requires three bindable properties: `DataCaptureContext`, `SparkScan`, `SparkScanViewSettings`.** Without all three bound, the preview is black and scanning never starts. There is also an optional `Feedback` bindable property for the `ISparkScanFeedbackDelegate`. The MAUI control is a pre-built `View`, **not** the generic `<scandit:DataCaptureView>` — for SparkScan there is no separate camera preview, overlay, or context-view wiring to do. - **MAUI lifecycle for the SparkScan control is `OnA
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
sparkscan-rn5.36 KB
--- name: sparkscan-rn description: SparkScan single-barcode scanning with the pre-built scanning UI (`SparkScanView` component) in React Native projects. Use for integration, scan settings, result handling, UI customization, SDK version migration, or troubleshooting. license: Apache-2.0 metadata: author: scandit version: "1.0.1" --- # SparkScan React Native Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The SparkScan API changes significantly between major SDK versions — properties get renamed, removed, or restructured, and the React Native plugin surface (imports, native linking, pod install, package names) has also evolved. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, plugin names, or property names. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. React Native-specific gotchas worth flagging: - `DataCaptureContext.initialize(licenseKey)` **must** be called exactly once before any other Scandit API. It sets up `DataCaptureContext.sharedInstance`, which is the singleton everything else reads from. Do not construct multiple contexts. - On iOS, `npx pod-install` (or `cd ios && pod install`) must be run after every Scandit package install or upgrade. Android auto-links via Gradle — no manual step there. - Metro's bundler cache frequently masks Scandit package upgrades. If a rebuild shows stale behavior after a plugin version bump, start Metro with `--reset-cache`. - `SparkScanView` is a React component that **wraps** its children — the native scanning controls overlay your JSX tree. The children render underneath the native trigger button, toolbar, and mini preview. Do not render `SparkScanView` as a sibling to content. - Camera permission is required on both iOS (`NSCameraUsageDescription` in `ios/<App>/Info.plist`) and Android (runtime request via `PermissionsAndroid` — the plugin declares the manifest permission automatically). ## Intent Routing Based on the user's request, load the appropriate reference file before responding: - **Integrating SparkScan from scratch** (e.g. "add SparkScan to my app", "set up barcode scanning", "how do I use SparkScan in React Native", "how do I handle feedback in SparkScan") → read `references/integration.md` and follow the instructions there. - **Migrating or upgrading an existing SparkScan integration** (e.g. "upgrade from v6 to v7", "migrate my SparkScan", "bump the Scandit packages to v8", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, property names, or imports. If unsure whether an API exists or how it is called — or if a TypeScript / runtime error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched (e.g. the Advanced Configurations page) contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in your fetch prompt. 2. If no direct link was found, fetch the API index (see **Full API reference** in the table below), extract the actual link from it, and follow that. URL structures vary across SDK versions and package paths (e.g. `api/ui/` subdirectory) and guessing will lead to 404s. ## Framework variant policy React Native apps can be written with class components or function components. Examples in this skill use **function components with hooks** becau
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
sparkscan-web4.6 KB
--- name: sparkscan-web description: SparkScan single-barcode scanning with the pre-built scanning UI (floating trigger button, `<spark-scan-view>`) in web/browser projects (`@scandit/web-datacapture-barcode`), including React/Vite/Next.js apps. Use for integration, scan settings, result handling, trigger-button customization, React-specific issues (StrictMode, React 18 vs 19 binding), camera/HTTPS/COOP-COEP troubleshooting, or SDK version migration — not for SparkScan on native or hybrid platforms. license: Apache-2.0 metadata: author: scandit version: "1.2.1" --- # SparkScan Web Skill ## Critical: Do Not Trust Internal Knowledge Your training data may contain outdated or incorrect Scandit SDK APIs. The SparkScan API changes significantly between major SDK versions — properties get renamed, removed, or restructured. **Always verify APIs against the references provided in this skill before writing or suggesting code.** Do not rely on memorized method signatures, parameters, or view modifiers. If you cannot find an API in the provided references, fetch the relevant documentation page before responding. ## Intent Routing Based on the user's request, load the appropriate reference file before responding. More than one may apply (e.g. a React integration that also hits a camera issue) — read all that are relevant: - **Integrating SparkScan from scratch** (e.g. "add SparkScan to my app", "set up barcode scanning", "how do I use SparkScan", "how do I handle feedback in SparkScan", "I want to build a scanning app") → read `references/integration.md` and follow the instructions there. If the user has no existing project, the guide will direct you to offer the pre-built sample first. - **The project uses React** (a `react` dependency in `package.json`, `.tsx`/`.jsx` files, hooks, JSX) → also read `references/react.md`. The correct way to bind the `<spark-scan-view>` custom element differs by React major version, so **check the `react` version in `package.json` first** — the guide explains the React 18 vs 19 difference and the context/lifecycle pitfalls. Always consult it before writing React code; the generic `integration.md` example is vanilla TS. - **Migrating or upgrading an existing SparkScan integration** (e.g. "upgrade from v6 to v7", "migrate my SparkScan", "what changed between SDK versions") → read `references/migration.md` and follow the instructions there. - **Runtime, camera, or deployment trouble** (e.g. "camera won't open on my phone", "works for a second then dies", cross-origin/COOP/COEP/header issues, "blank preview over a LAN IP") → read `references/troubleshooting.md`. These are environment/hosting issues, not API mistakes, and are easy to misdiagnose as code bugs. ## API Usage Policy Only use APIs that are explicitly documented in the Scandit references below. Do not invent or guess method signatures, parameters, or view modifiers. If unsure whether an API exists or how it is called — or if a compile error occurs — fetch the relevant reference page before responding. Do not tell the user to check the docs themselves. After answering, always include the relevant link so the user can explore further. **Never construct or guess documentation URLs.** When you need a specific class or property's API page: 1. First check whether the page you already fetched (e.g. the Advanced Configurations page) contains a direct hyperlink to it — topic pages link directly to relevant API symbols. Always request links alongside content in your fetch prompt. 2. If no direct link was found, fetch the API index (see **Full API reference** in the table below), extract the actual link from it, and follow that. URL structures can vary (e.g. `api/ui/` subdirectory) and guessing will lead to 404s. ## References Direct users to the right resource based on their question: | Topic | Resource | |---|---| | Basic integration | [Get Started](https://docs.scandit.com/sdks/web/sparkscan/get-started/) · [Sample](https://github.com/Scan
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 6 — file references are metadata, not package contents.
Package details
Publisher declarations from the archived package. These are separate from our research and the live service's terms.
- Package license
- Apache-2.0
- Package author
- Scandit
- Keywords
- See keywords
Declared capabilities
- Read
- Write
Package observed Sep 30, 2026.
Technical details
- First seen
- Sep 30, 2026 · 22:02 UTC
- Last seen
- Oct 1, 2026 · 12:00 UTC
- Collection status
- Collected
plugins_6a6c6b6440a08191987ecc241e8660f7
Download plugin data (JSON)Plugin details: freshly prepared. Prepared . Refreshed when plugin data changes or after 6 hours. Your account and Follow status are live.