Saltar al pie de página
COMPARAR CON OTROS COMPONENTES

BarcodeScanning.MAUI vs IronBarcode: Comparación de bibliotecas de códigos de barras C#

BarcodeScanning.Native.Maui es un complemento para la cámara, no una biblioteca de códigos de barras. Si tu aplicación se ejecuta en Windows, procesa archivos subidos o lee códigos de barras de archivos PDF, no es la herramienta adecuada, y el archivo README no lo deja claro desde el principio. La página del paquete lo describe como una "biblioteca de escaneo de código de barras para .NET MAUI", que es técnicamente preciso, pero omite la restricción crítica: es un CameraView control que dispara un evento cuando un código de barras entra en un marco de cámara en vivo. Esa es la lista completa de funciones. Esta comparación examina la diferencia arquitectónica entre una biblioteca de control de cámara y un SDK de código de barras completo, lo que ayuda a los equipos a comprender dónde encaja cada herramienta y dónde se queda corta.

Comprender el escaneo de códigos de barras.MAUI

BarcodeScanning.Native.Maui envuelve la cámara nativa de detección de código de barras API en iOS (Apple Vision framework) y Android (ML Kit) en un control MAUI CameraView. Un desarrollador inserta el control en una página XAML, configura un controlador de eventos y la biblioteca activa ese evento cada vez que se detecta un código de barras en la transmisión de la cámara en directo. Todo el modelo de interacción se basa en la entrada de la cámara y la salida del evento; no hay otra vía.

La biblioteca es de código abierto y gratuita bajo la licencia MIT. Su objetivo de diseño es concreto y explícito: proporcionar detección de códigos de barras en tiempo real mediante cámara para aplicaciones MAUI de iOS y Android con la mínima interfaz API posible. Logra ese objetivo delegando en las API de la plataforma nativa en lugar de implementar su propio motor de decodificación de códigos de barras.

Características arquitectónicas clave de BarcodeScanning.Native.Maui:

  • Entrada solo de cámara: La biblioteca solo acepta fotogramas de cámara en directo. No hay ReadFromFile(), ni ReadFromBytes(), ni ReadFromStream(), ni ningún método ReadFromPdf() en ninguna parte de la API pública.
  • Solo para iOS y Android: La biblioteca encapsula las API nativas específicas de iOS (marco Vision) y de Android (ML Kit). MAUI no tiene implementación para Windows ni está previsto que la tenga.
  • Sin capacidad de generación: BarcodeScanning.Native.Maui lee códigos de barras de los fotogramas de la cámara. No puede generar códigos de barras en ningún formato.
  • Inexactitud en los códigos UPC-A de iOS: El marco Vision de Apple devuelve 13 dígitos para los códigos de barras UPC-A (añadiendo un cero inicial para que coincida con la codificación EAN-13). La biblioteca transmite este valor sin procesar, sin ninguna corrección, lo que requiere una solución manual en el código de la aplicación.
  • Problema conocido de fiabilidad del PDF417: El propio sistema de seguimiento de incidencias de la biblioteca en GitHub documenta el escaneo del PDF417 como "muy problemático: la mayoría de los escaneos nunca se producen", lo que supone un bloqueo directo para etiquetas de envío, permisos de conducir y tarjetas de embarque.
  • Superficie pública mínima: La API pública consiste en CameraView, OnDetectionFinished, OnDetectionFinishedEventArgs, y BarcodeResult con DisplayValue y BarcodeFormat. Eso es todo con lo que interactúa el código de la aplicación.
  • Licencia MIT, sin costo: La biblioteca es de uso gratuito y no tiene costo de licencia.

Patrón de escaneo de la cámara en vivo

El patrón completo de la API BarcodeScanning.Native.Maui consiste en un control XAML combinado con un controlador de eventos C#:


<scanner:CameraView x:Name="CameraView"
                    OnDetectionFinished="OnBarcodeDetected"
                    CameraEnabled="True"
                    BarcodeFormats="All" />

<scanner:CameraView x:Name="CameraView"
                    OnDetectionFinished="OnBarcodeDetected"
                    CameraEnabled="True"
                    BarcodeFormats="All" />
XML
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode != null)
        ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode != null)
        ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArgs)
    Dim barcode = e.BarcodeResults.FirstOrDefault()
    If barcode IsNot Nothing Then
        ResultLabel.Text = barcode.DisplayValue
    End If
End Sub
$vbLabelText   $csharpLabel

Este control proporciona a los usuarios un visor en tiempo real integrado en la página de MAUI. La detección de códigos de barras se activa continuamente mientras la cámara está en funcionamiento. La experiencia de usuario es realmente buena para aplicaciones de consumo donde la interacción principal consiste en "apuntar y escanear". La limitación es que esta es la única interacción que admite la biblioteca; en el momento en que los requisitos van más allá de la detección de cámara en tiempo real en iOS o Android, BarcodeScanning.Native.Maui no tiene nada que ofrecer.

Entendiendo IronBarcode

IronBarcode es una biblioteca comercial para la lectura y generación de códigos de barras en .NET que funciona con datos de entrada en lugar de con secuencias de vídeo de cámaras. Lee códigos de barras de archivos de imagen, matrices de bytes, flujos de datos y documentos PDF. En MAUI, se integra con la cámara del sistema a través de MediaPicker - la misma API estándar de MAUI que las aplicaciones utilizan para la selección de fotos - capturar una foto y luego procesar la imagen resultante como una entrada estática.

IronBarcode implementa su propio motor de descodificación de códigos de barras en lugar de delegar en API nativas específicas de la plataforma. Esto significa que la misma llamada BarcodeReader.Read() se comporta de forma coherente en iOS, Android, Windows, macOS, ASP.NET y procesos de servidor en segundo plano. La biblioteca también proporciona una API completa de generación de códigos de barras a través de BarcodeWriter y QRCodeWriter.

Características clave de IronBarcode:

  • API estática basada en archivos: BarcodeReader.Read() acepta una ruta de archivo, matriz de bytes, flujo o PDF - cualquier fuente de datos estática.
  • Cobertura completa de plataformas: se admiten los sistemas operativos iOS, Android, Windows y macOS MAUI. El mismo código se ejecuta en las cuatro plataformas sin bifurcaciones específicas para cada una.
  • Generación de códigos de barras: BarcodeWriter.CreateBarcode() y QRCodeWriter.CreateQrCode() generan Code128, QR, DataMatrix y otros formatos como archivos de imagen o matrices de bytes.
  • Compatibilidad con PDF: Los códigos de barras incrustados en documentos PDF se leen directamente sin necesidad de un paso intermedio de extracción de imágenes.
  • Decodificación precisa del código UPC-A: Devuelve el valor UPC-A correcto de 12 dígitos sin necesidad de soluciones alternativas de normalización manual.
  • Licencias comerciales: Lite $749, Plus $1,499, Professional $2,999, Ilimitado $5,999 — licencias perpetuas con un año de soporte.
  • Implementación en el servidor: Se ejecuta en ASP.NET, Azure Functions, contenedores Docker y AWS Lambda sin depender de una cámara física.

Comparación de características

La siguiente tabla destaca las diferencias fundamentales entre BarcodeScanning.Native.Maui e IronBarcode:

Característica BarcodeScanning.MAUI IronBarcode
Finalidad principal detección de códigos de barras mediante cámara en directo Lectura y generación de códigos de barras a partir de cualquier fuente de datos.
Fuentes de entrada Solo fotogramas de cámara en directo Archivos, matrices de bytes, flujos de datos, PDF
Soporte de Plataforma Solo para iOS y Android MAUI iOS, Android, Windows, macOS MAUI+ servidor
Generación de códigos de barras No Sí — BarcodeWriter + QRCodeWriter
Modelo de licencia MIT (gratuito, de código abierto) Comercial: de la Lite a la ilimitada por $5,999.
Servidor / ASP.NET No

Comparación detallada de características

Característica BarcodeScanning.MAUI IronBarcode
Lectura
Lectura de fotogramas de la cámara en directo Sí — Control de CameraView No (utiliza MediaPicker para capturar y luego leer)
visor de la cámara en la aplicación Sí, en tiempo real y continuo. No, utiliza la interfaz de usuario de la cámara del sistema a través de MediaPicker.
Leer desde archivo de imagen No Sí - BarcodeReader.Read(path)
Leer desde una matriz de bytes No Sí - BarcodeReader.Read(bytes)
Leer desde la transmisión No Sí - BarcodeReader.Read(stream)
Leer desde PDF No Sí - BarcodeReader.Read(pdf)
Detección de múltiples códigos de barras Sí (varios por fotograma mediante e.BarcodeResults) Sí (opción ExpectMultipleBarcodes)
Control de velocidad de lectura Ninguno ReadingSpeed.Balanced / Faster / Slower
Precisión del código UPC-A en iOS Devuelve 13 dígitos (error), requiere normalización manual. Devuelve el código UPC-A correcto de 12 dígitos.
Fiabilidad del PDF417 "La mayoría de los escaneos nunca se realizan" (problemas de GitHub ) Se admite
Generación
Generación de códigos de barras No Sí - BarcodeWriter.CreateBarcode()
Generación de código QR No Sí - QRCodeWriter.CreateQrCode()
Salida como PNG / matriz de bytes No
Plataforma
iOS MAUI
Android MAUI
MAUI de Windows No
macOS MAUI No documentado
ASP.NET / lado del servidor No
Docker / Azure / AWS Lambda No
Compatibilidad con .NET Framework No (solo MAUI) Sí — .NET Framework 4.6.2+
Licencias
Tipo de licencia MIT (código abierto) perpetuo comercial
Coste Gratis Lite $749, Plus $1,499, Professional $2,999, Ilimitado $5,999
Modo de evaluación N/A Prueba gratuita disponible

Arquitectura: Control de cámara frente a API de procesamiento de archivos

La diferencia más fundamental entre estas dos bibliotecas es el modelo de entrada. BarcodeScanning.Native.Maui está diseñado en torno a una transmisión continua de vídeo por cámara; IronBarcode está diseñado en torno a entradas de datos discretas. No se trata de implementaciones contrapuestas de la misma idea, sino de diferentes opciones arquitectónicas para diferentes casos de uso.

Escaneo de códigos de barras. Enfoque MAUI

BarcodeScanning.Native.Maui encapsula el sistema nativo de detección de cámaras en cada plataforma. En Android, ML Kit procesa los fotogramas. En iOS, el marco de trabajo Vision de Apple procesa los fotogramas. La biblioteca muestra esto como un control MAUI CameraView con un evento OnDetectionFinished. El código de la aplicación nunca procesa directamente los bytes de la imagen; solo procesa los valores del código de barras detectados que surgen del evento.

private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode != null)
        ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode != null)
        ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArgs)
    Dim barcode = e.BarcodeResults.FirstOrDefault()
    If barcode IsNot Nothing Then
        ResultLabel.Text = barcode.DisplayValue
    End If
End Sub
$vbLabelText   $csharpLabel

La consecuencia de este diseño es que no existe otro punto de entrada. La cámara no es opcional; es la única entrada que reconoce la biblioteca. Un servidor, un archivo, un PDF, una máquina Windows: ninguno de ellos tiene una cámara en el sentido que esta biblioteca espera.

Enfoque IronBarcode

IronBarcode recibe datos de imagen a través de su método estático BarcodeReader.Read(). Quien realiza la llamada proporciona los datos —desde cualquier fuente— y la biblioteca los decodifica. En MAUI, los datos proceden de MediaPicker; En un servidor, proviene de la carga de un formulario; En una aplicación de escritorio, proviene de un cuadro de diálogo de archivos.

// IronBarcode in MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;

private async void ScanBarcodeButton_Clicked(object sender, EventArgs e)
{
    var photo = await MediaPicker.CapturePhotoAsync();
    if (photo == null) return;

    using var stream = await photo.OpenReadAsync();
    using var ms = new MemoryStream();
    await stream.CopyToAsync(ms);

    var results = BarcodeReader.Read(ms.ToArray());
    foreach (var result in results)
        ResultLabel.Text = result.Value;
}
// IronBarcode in MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;

private async void ScanBarcodeButton_Clicked(object sender, EventArgs e)
{
    var photo = await MediaPicker.CapturePhotoAsync();
    if (photo == null) return;

    using var stream = await photo.OpenReadAsync();
    using var ms = new MemoryStream();
    await stream.CopyToAsync(ms);

    var results = BarcodeReader.Read(ms.ToArray());
    foreach (var result in results)
        ResultLabel.Text = result.Value;
}
Imports IronBarCode
Imports System.IO

Private Async Sub ScanBarcodeButton_Clicked(sender As Object, e As EventArgs)
    Dim photo = Await MediaPicker.CapturePhotoAsync()
    If photo Is Nothing Then Return

    Using stream = Await photo.OpenReadAsync()
        Using ms As New MemoryStream()
            Await stream.CopyToAsync(ms)

            Dim results = BarcodeReader.Read(ms.ToArray())
            For Each result In results
                ResultLabel.Text = result.Value
            Next
        End Using
    End Using
End Sub
$vbLabelText   $csharpLabel

Este código se ejecuta de forma idéntica en iOS, Android y Windows MAUI. Para el uso del lado del servidor, el mismo método BarcodeReader.Read() acepta una matriz de bytes de un archivo cargado o una ruta PDF. La documentación de IronBarcode abarca todos los tipos de entrada compatibles.

Cobertura de plataforma y compatibilidad con Windows

La cobertura de la plataforma es donde la limitación estructural de BarcodeScanning.Native.Maui se vuelve concreta para los equipos que desarrollan aplicaciones MAUI.

Escaneo de códigos de barras. Enfoque MAUI

BarcodeScanning.Native.Maui no es compatible con el destino Windows en MAUI. No se trata de una deficiencia temporal, sino de una consecuencia estructural de la arquitectura de la biblioteca. La biblioteca encapsula las API nativas específicas de iOS (marco Vision) y de Android (ML Kit). Windows no dispone de ninguna de ellas. Los equipos que desarrollan una aplicación MAUI para iOS, Android y Windows (un escenario estándar de múltiples plataformas) no pueden usar BarcodeScanning.Native.Maui como solución de código de barras para las tres plataformas. Deben implementar por separado el código específico para la plataforma Windows o reemplazar la biblioteca por completo.

Enfoque IronBarcode

La llamada BarcodeReader.Read() de IronBarcode funciona en objetivos MAUI de Windows, iOS, Android y macOS sin ningún código específico de la plataforma. No hay bloques #if WINDOWS, ni carga condicional de dependencias, ni se necesitan implementaciones stub. Para archivos y PDF de entrada, el patrón también es consistente:

using IronBarCode;

// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
    var results = BarcodeReader.Read(file.FullPath);
    foreach (var result in results)
        Console.WriteLine($"{result.Format}: {result.Value}");
}

// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
using IronBarCode;

// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
    var results = BarcodeReader.Read(file.FullPath);
    foreach (var result in results)
        Console.WriteLine($"{result.Format}: {result.Value}");
}

// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
Imports IronBarCode

' Read barcodes from a file the user selected
Dim file = Await FilePicker.PickAsync()
If file IsNot Nothing Then
    Dim results = BarcodeReader.Read(file.FullPath)
    For Each result In results
        Console.WriteLine($"{result.Format}: {result.Value}")
    Next
End If

' Read barcodes directly from a PDF — no image extraction step needed
Dim pdfResults = BarcodeReader.Read("shipment-manifest.pdf")
$vbLabelText   $csharpLabel

La guía de integración de IronBarcode para MAUI proporciona instrucciones de configuración completas para todos los dispositivos compatibles con MAUI. IronBarcode también admite la implementación del lado del servidor en entornos ASP.NET, Docker, Azure Functions y AWS Lambda, donde BarcodeScanning.Native.Maui no tiene ninguna ruta.

Precisión en la lectura de códigos de barras: UPC-A y PDF417

Dos problemas específicos de precisión de formato en BarcodeScanning.Native.Maui tienen consecuencias directas para las aplicaciones de producción.

Escaneo de códigos de barras. Enfoque MAUI

En iOS, la detección subyacente de BarcodeScanning.Native.Maui (Apple Vision) devuelve 13 dígitos para los códigos de barras UPC-A. El código UPC-A tiene un formato de 12 dígitos; El cero inicial adicional coincide con la codificación EAN-13. La biblioteca transmite este valor sin corregir. Las aplicaciones que almacenan códigos UPC-A en una base de datos pueden acumular registros con un cero inicial que no debería estar allí.

La solución alternativa documentada requiere comprobar el formato y recortar el valor:

// Workaround required for iOS UPC-A — strip the leading zero manually
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode == null) return;

    var value = barcode.DisplayValue;
    if (barcode.BarcodeFormat == BarcodeFormat.UPC_A && value.Length == 13)
        value = value.Substring(1); // strip Apple's prepended leading zero

    ProcessBarcode(value);
}
// Workaround required for iOS UPC-A — strip the leading zero manually
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
    var barcode = e.BarcodeResults.FirstOrDefault();
    if (barcode == null) return;

    var value = barcode.DisplayValue;
    if (barcode.BarcodeFormat == BarcodeFormat.UPC_A && value.Length == 13)
        value = value.Substring(1); // strip Apple's prepended leading zero

    ProcessBarcode(value);
}
' Workaround required for iOS UPC-A — strip the leading zero manually
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArgs)
    Dim barcode = e.BarcodeResults.FirstOrDefault()
    If barcode Is Nothing Then Return

    Dim value = barcode.DisplayValue
    If barcode.BarcodeFormat = BarcodeFormat.UPC_A AndAlso value.Length = 13 Then
        value = value.Substring(1) ' strip Apple's prepended leading zero
    End If

    ProcessBarcode(value)
End Sub
$vbLabelText   $csharpLabel

Esta solución alternativa invalida silenciosamente los códigos de barras EAN-13 que comienzan con 0 si se omite la comprobación de formato. El problema PDF417 está documentado por separado en los problemas de GitHub como "muy problemático: la mayoría de los escaneos nunca se realizan", y afecta a etiquetas de envío, permisos de conducir y tarjetas de embarque.

Enfoque IronBarcode

IronBarcode devuelve el valor UPC-A correcto de 12 dígitos sin necesidad de normalización manual. PDF417 es un formato compatible que se lee de forma fiable. La generación de código también está disponible a través de la API de IronBarcode:

using IronBarCode;

// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");

// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
using IronBarCode;

// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");

// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
Imports IronBarCode

' Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500) _
    .SaveAsPng("qr.png")

' Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

En aplicaciones donde la precisión de los datos de códigos de barras afecta directamente a las consultas de inventario, las transacciones en puntos de venta o las integraciones de la cadena de suministro, el manejo correcto del formato de IronBarcode elimina una categoría de errores de producción que BarcodeScanning.Native.Maui deja en el código de la aplicación. La documentación de IronBarcode sobre la lectura de códigos de barras describe en detalle el comportamiento específico de cada formato.

Referencia de mapeo de API

BarcodeScanning.Native.Maui IronBarcode
CameraView Control XAML Sin control de cámara - utilice MediaPicker.CapturePhotoAsync() para capturar
OnDetectionFinished evento BarcodeReader.Read(imageBytes)
e.BarcodeResults Valor de retorno de BarcodeReader.Read() (IEnumerable)
e.BarcodeResults.FirstOrDefault() results.FirstOrDefault()
barcode.DisplayValue result.Value
barcode.BarcodeFormat result.Format
BarcodeFormats="All" Detección automática: no se necesita configuración para formatos múltiples.
CameraEnabled="True" MediaPicker.CapturePhotoAsync() llamada
Solo iOS y Android iOS, Android, Windows, macOS (MAUI) + ASP.NET, escritorio
Solo marcos de cámara Archivos, matrices de bytes, flujos de datos, PDF
No hay API para archivos/PDF. BarcodeReader.Read(path) - acepta archivos de imagen y PDF
Sin MAUI de Windows Compatibilidad total con MAUI de Windows
API sin generación BarcodeWriter.CreateBarcode() + QRCodeWriter.CreateQrCode()

Cuando los equipos consideran migrar de BarcodeScanning.MAUI a IronBarcode

Se agregó el destino MAUI de Windows a la compilación.

Las aplicaciones MAUI suelen comenzar con un objetivo para iOS y Android, y posteriormente añaden Windows a medida que la aplicación madura o a medida que se amplían los requisitos de distribución Enterprise . Cuando se agrega el destino Windows, BarcodeScanning.Native.Maui se convierte en un obstáculo inmediato: no hay implementación para Windows ni solución alternativa dentro de la biblioteca. En esta situación, los equipos deben mantener una implementación de código de barras independiente para Windows utilizando una biblioteca diferente, o bien migrar toda la capa de código de barras a una biblioteca que funcione de forma consistente en todos los sistemas MAUI. La segunda opción es operativamente más sencilla y elimina la sobrecarga de mantenimiento que supone la ramificación específica de la plataforma.

Se han añadido requisitos para la carga de archivos o el procesamiento de PDF.

Las aplicaciones móviles suelen comenzar utilizando el escaneo de la cámara en tiempo real como único método de entrada y, posteriormente, se amplían para aceptar imágenes o documentos subidos a la aplicación. Cuando un usuario necesita escanear un código de barras de una foto en su galería, de una imagen recibida por correo electrónico o de un PDF que contiene manifiestos de envío o tarjetas de embarque, BarcodeScanning.Native.Maui no tiene ninguna ruta de código que ofrecer. Los equipos que alcanzan este límite de requisitos se enfrentan a una disyuntiva: añadir una segunda biblioteca de códigos de barras junto con BarcodeScanning.Native.Maui para la entrada de archivos y PDF, o migrar a una única biblioteca que gestione todos los tipos de entrada. Gestionar dos paquetes de códigos de barras con API, tipos de resultados y tablas de compatibilidad de formatos diferentes añade una complejidad a largo plazo que una solución de un solo paquete evita.

Se introduce el procesamiento de códigos de barras del lado del servidor.

Las aplicaciones que escanean códigos de barras en dispositivos móviles suelen desarrollar un componente del lado del servidor: un punto final de API de ASP.NET que valida los códigos de barras, un proceso en segundo plano que procesa archivos PDF o una función en la nube que extrae los números de seguimiento de los documentos cargados. BarcodeScanning.Native.Maui es una biblioteca de control de interfaz de usuario que depende del contexto del hardware de la cámara; No puede ejecutarse en un proceso de servidor. Un equipo que necesita la misma lógica de lectura de códigos de barras tanto en dispositivos móviles como en servidores debe usar una biblioteca diferente para el lado del servidor. Cuando surge el requisito del lado del servidor, los equipos suelen evaluar si es preferible consolidar una única biblioteca que abarque tanto dispositivos móviles como servidores, en lugar de mantener dos implementaciones separadas.

La precisión de los datos UPC-A se convierte en un problema de producción.

El comportamiento del código UPC-A de 13 dígitos en iOS no siempre se detecta durante el desarrollo. Los códigos de barras UPC-A escaneados durante el desarrollo pueden parecer que funcionan correctamente, pero el cero inicial introducido por el marco Vision de Apple aparece en la base de datos. Los equipos que descubren códigos UPC-A de 13 dígitos en registros de inventario, sistemas de punto de venta o integraciones de la cadena de suministro se enfrentan a un problema de corrección de datos, además de un problema de código. La solución alternativa documentada en los problemas de GitHub de BarcodeScanning.Native.Maui corrige los escaneos nuevos, pero no soluciona los problemas con los datos históricos. Cuando se hace evidente el alcance del problema de calidad de los datos, migrar a una biblioteca que devuelva valores UPC-A correctos sin normalización a nivel de aplicación suele ser la solución a largo plazo más limpia.

PDF417 Se requiere escanear el documento

PDF417 es el formato de código de barras que se utiliza en las etiquetas de envío, los permisos de conducir y las tarjetas de embarque en Norteamérica. Estos son objetivos de escaneo comunes para aplicaciones de logística, verificación de identidad y viajes. El sistema de seguimiento de incidencias de BarcodeScanning.Native.Maui en GitHub documenta que PDF417 es "muy problemático: la mayoría de los escaneos nunca se realizan". Para cualquier aplicación donde la fiabilidad de PDF417 sea un requisito funcional y no una característica deseable, este problema conocido supone un obstáculo directo que obliga a evaluar bibliotecas alternativas.

Consideraciones comunes sobre la migración

Evento de cámara a MediaPicker y lectura estática

El principal cambio estructural en la migración es la sustitución del patrón de eventos de cámara continua por una captura MediaPicker seguida de BarcodeReader.Read(). Se eliminan el manejador de eventos OnDetectionFinished, el control XAML CameraView y la declaración de espacio de nombres XML scanner:. En su lugar, un botón activa MediaPicker.CapturePhotoAsync(), y los bytes de foto resultantes se pasan a BarcodeReader.Read(). Esto cambia la experiencia del usuario, pasando de un visor continuo en tiempo real a la pantalla de una cámara de sistema, lo cual resulta apropiado para la mayoría de las aplicaciones empresariales.

Cambios en la serialización de hilos

BarcodeScanning.Native.Maui dispara OnDetectionFinished en un subproceso en segundo plano, por lo que todos los controladores existentes que actualizan los elementos de la interfaz de usuario envuelven sus actualizaciones en MainThread.BeginInvokeOnMainThread(). Con el patrón MediaPicker + async utilizado por IronBarcode, la continuación después de await vuelve al contexto de llamada, que suele ser el hilo principal. En la mayoría de los casos se pueden eliminar las envolturas MainThread.BeginInvokeOnMainThread(), simplificando el código del manejador de eventos.

Eliminación de la solución alternativa UPC-A

Cualquier código base que maneje el comportamiento iOS UPC-A de 13 dígitos de BarcodeScanning.Native.Maui tendrá código que compruebe BarcodeFormat.UPC_A y llame a Substring(1) para eliminar el cero inicial. Este código debe eliminarse después de la migración: IronBarcode devuelve el valor correcto de 12 dígitos, y dejar la solución alternativa eliminaría incorrectamente el primer dígito de las lecturas UPC-A válidas.

Permisos de MAUI

BarcodeScanning.Native.Maui añade automáticamente permisos de cámara a los manifiestos de Android e iOS como parte de la configuración del paquete. Con IronBarcode utilizando MediaPicker, se requieren los permisos de cámara MAUI estándar en AndroidManifest.xml y Info.plist - los mismos permisos que cualquier aplicación MAUI necesita para MediaPicker.CapturePhotoAsync(). Estos permisos suelen estar ya presentes en los proyectos de MAUI que utilizan la cámara para cualquier propósito.

Funcionalidades adicionales de IronBarcode

Más allá de las capacidades cubiertas en esta comparación, IronBarcode proporciona características que BarcodeScanning.Native.Maui no aborda en ningún nivel:

  • Generación de códigos de barras : Genera códigos Code128, QR, DataMatrix, PDF417 y otros formatos como PNG, SVG o matriz de bytes, utilizables en la interfaz de usuario de MAUI, respuestas de API o etiquetas impresas.
  • Generación de códigos QR : Cree códigos QR con estilo, incluyendo la inserción de logotipos, la personalización del color y el control del nivel de corrección de errores.
  • Lectura de múltiples códigos de barras: La opción ExpectMultipleBarcodes lee todos los códigos de barras presentes en una sola imagen de una sola pasada.
  • Extracción de códigos de barras de PDF : Lea directamente los códigos de barras incrustados en documentos PDF, sin necesidad de conversión de imagen intermedia.
  • Implementación en el servidor : Implemente la misma lógica de lectura y generación de códigos de barras en ASP.NET, Azure Functions, Docker y AWS Lambda sin depender de ninguna cámara.
  • Configuración de la velocidad de lectura: Los ajustes ReadingSpeed.Faster, Balanced y Slower permiten ajustar el rendimiento frente a la precisión en función de la calidad de la imagen.
  • Compatibilidad con macOS MAUI : Compatibilidad total con macOS para aplicaciones de escritorio MAUI, que abarca el cuarto destino MAUI que BarcodeScanning.Native.Maui no documenta.

Compatibilidad con .NET y preparación para el futuro

IronBarcode es compatible con .NET 6, .NET 7, .NET 8 y .NET 9, así como con .NET Framework 4.6.2 y versiones posteriores. Esto significa que se ejecuta en el conjunto completo de destinos de MAUI, así como en entornos de servidor heredados que aún no han migrado a .NET moderno. IronBarcode recibe actualizaciones periódicas y es compatible con .NET 10 a medida que su adopción aumente hasta 2026. BarcodeScanning.Native.Maui es una biblioteca exclusiva de MAUI, sin soporte .NET Framework ni ruta de implementación del lado del servidor. Para los equipos cuyo código base abarca tanto MAUI como aplicaciones de servidor .NET Framework o .NET Core existentes, IronBarcode proporciona una API coherente en todos los entornos sin necesidad de un paquete de códigos de barras independiente para cada contexto de ejecución.

Conclusión

BarcodeScanning.Native.Maui e IronBarcode abordan problemas diferentes. BarcodeScanning.Native.Maui es una biblioteca de control de cámara que proporciona un visor en tiempo real con detección automática de códigos de barras en iOS y Android. IronBarcode es una biblioteca de lectura y generación de códigos de barras que procesa datos de imágenes estáticas de cualquier fuente en todas las plataformas .NET . La diferencia arquitectónica —transmisión continua de vídeo de la cámara frente a entrada de datos discreta— determina qué biblioteca es la adecuada para un conjunto de requisitos determinado.

BarcodeScanning.Native.Maui es la opción correcta cuando la aplicación es una aplicación móvil para consumidores dirigida únicamente a iOS y Android, cuando la vista previa de la cámara en tiempo real dentro de la aplicación con detección continua de fotogramas es el patrón de UX requerido, y cuando los requisitos no se ampliarán para incluir Windows, carga de archivos, procesamiento de PDF o trabajo con códigos de barras del lado del servidor. Dentro de ese ámbito limitado, es gratuito, minimalista y funcional.

IronBarcode es la opción correcta cuando la compatibilidad con plataformas debe incluir Windows MAUI, cuando la entrada de códigos de barras proviene de archivos, PDF o matrices de bytes, además de o en lugar de una cámara en vivo, cuando el procesamiento de códigos de barras del lado del servidor forma parte de la arquitectura, o cuando se requiere la generación de códigos de barras junto con la lectura. También resulta apropiado cuando la precisión del código UPC-A o la fiabilidad del PDF417 son requisitos de producción en lugar de limitaciones aceptables. El coste de la licencia comercial es el precio a pagar por estas funcionalidades.

Para los equipos cuyos requisitos se ajustan actualmente al alcance limitado de BarcodeScanning.Native.Maui, esta biblioteca es una opción razonable y rentable. Para los equipos cuyos requisitos han crecido o se prevé que crezcan más allá del escaneo de cámaras en tiempo real en dos plataformas, la falta de coincidencia de alcance con BarcodeScanning.Native.Maui no es un problema de configuración, sino de arquitectura. La API consistente de IronBarcode en todos los tipos de entrada, plataformas y destinos de implementación es la solución práctica a esa discrepancia.

Preguntas Frecuentes

¿Qué es BarcodeScanning.MAUI?

BarcodeScanning.MAUI es una librería de código de barras .NET para generar y leer códigos de barras en aplicaciones C#. Es una de las varias alternativas que los desarrolladores evalúan cuando seleccionan una solución de código de barras para proyectos .NET.

¿Cuáles son las principales diferencias entre BarcodeScanning.MAUI e IronBarcode?

IronBarcode utiliza una API estática y sin estado que no requiere gestión de instancias, mientras que BarcodeScanning.MAUI suele requerir la creación y configuración de instancias antes de su uso. IronBarcode también proporciona compatibilidad nativa con PDF, detección automática de formato y licencia de clave única en todos los entornos.

¿Es IronBarcode más fácil de licenciar que BarcodeScanning.MAUI?

IronBarcode utiliza una única clave de licencia que cubre tanto el desarrollo como los despliegues de producción. Esto simplifica las canalizaciones de CI/CD y las configuraciones de Docker en comparación con los sistemas de licencias que separan las claves de SDK de las claves de tiempo de ejecución.

¿Soporta IronBarcode todos los formatos de código de barras que soporta BarcodeScanning.MAUI?

IronBarcode es compatible con más de 30 simbologías de códigos de barras, incluidos QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 y muchos más. La autodetección de formatos significa que no se requiere una enumeración explícita de formatos.

¿Es IronBarcode compatible con la lectura nativa de códigos de barras en PDF?

Sí. IronBarcode lee códigos de barras directamente desde archivos PDF utilizando BarcodeReader.Read("document.pdf") sin necesidad de una biblioteca de renderizado de PDF independiente. Los resultados por página incluyen el número de página, el formato del código de barras, el valor y la puntuación de confianza.

¿Cómo gestiona IronBarcode el procesamiento por lotes en comparación con BarcodeScanning.MAUI?

Los métodos estáticos de IronBarcode no tienen estado y son naturalmente seguros para subprocesos, lo que permite el uso directo de Parallel.ForEach sin gestión de instancias por subproceso. No hay límite de rendimiento en ningún nivel de precios.

¿Qué versiones de .NET admite IronBarcode ?

IronBarcode es compatible con .NET Framework 4.6.2+, .NET Core 3.1 y .NET 5, 6, 7, 8 y 9 en un único paquete NuGet. Las plataformas de destino incluyen Windows x64/x86, Linux x64 y macOS x64/ARM.

¿Cómo instalo IronBarcode en un proyecto .NET?

Instale IronBarcode a través de NuGet: ejecute 'Install-Package IronBarCode' en la consola del gestor de paquetes, o 'dotnet add package IronBarCode' en la CLI. No se necesitan instaladores SDK ni archivos de ejecución adicionales.

¿Puedo evaluar IronBarcode antes de comprarlo, a diferencia de BarcodeScanning.MAUI?

Sí. El modo de prueba de IronBarcode devuelve los valores completos de los códigos de barras descodificados; sólo las imágenes de salida generadas reciben una marca de agua. Puede comprobar la precisión de la lectura en sus propios documentos antes de comprometerse con la compra.

¿Cuál es la diferencia de precio entre BarcodeScanning.MAUI e IronBarcode?

IronBarcode cuesta a partir de 749 dólares por una licencia perpetua de desarrollador único que cubre el desarrollo y la producción. Los detalles de precios y opciones de volumen están disponibles en la página de licencias de IronBarcode. No se requiere una licencia de ejecución por separado.

¿Es fácil migrar de BarcodeScanning.MAUI a IronBarcode?

La migración de BarcodeScanning.MAUI a IronBarcode implica principalmente la sustitución de las llamadas a la API basadas en instancias por los métodos estáticos de IronBarcode, la eliminación de la repetición de licencias y la actualización de los nombres de las propiedades de los resultados. La mayoría de las migraciones implican reducir código en lugar de añadirlo.

¿IronBarcode genera códigos QR con logotipos?

Sí. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") incrusta una imagen de marca en un código QR de forma nativa con corrección de errores configurable. Los códigos QR coloreados también son compatibles con ChangeBarCodeColor().

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame