Comparação entre as bibliotecas de código de barras BarcodeScanning.MAUI e IronBarcode em C#
BarcodeScanning.Native.Maui é um plugin de câmera, não uma biblioteca de código de barras. Se seu aplicativo roda no Windows, processa arquivos enviados ou lê códigos de barras de PDFs, ele é a ferramenta errada — e o arquivo README não deixa isso óbvio de imediato. A página do pacote o descreve como uma "biblioteca de leitura de código de barras para .NET MAUI", o que é tecnicamente correto, mas omite a restrição crítica: trata-se de um controle CameraView que dispara um evento quando um código de barras entra no quadro da câmera em tempo real. Esse é o conjunto completo de funcionalidades. Esta comparação examina a diferença arquitetônica entre uma biblioteca de controle de câmera e um SDK de código de barras completo, ajudando as equipes a entender onde cada ferramenta se encaixa e onde cada uma deixa a desejar.
Entendendo a leitura de código de barras.MAUI
BarcodeScanning.Native.Maui encapsula as APIs nativas de detecção de código de barras da câmera no iOS (framework Vision da Apple) e no Android (ML Kit) em um controle MAUI CameraView. Um desenvolvedor insere o controle em uma página XAML, configura um manipulador de eventos e a biblioteca dispara esse evento sempre que um código de barras é detectado na transmissão ao vivo da câmera. Todo o modelo de interação é do tipo "câmera entra, evento sai" — não há outro caminho.
A biblioteca é de código aberto e gratuita sob a licença MIT. Seu objetivo de projeto é específico e explícito: fornecer detecção de código de barras por câmera em tempo real para aplicativos MAUI de iOS e Android com a menor superfície de API possível. Ele atinge esse objetivo delegando recursos às APIs nativas da plataforma, em vez de implementar seu próprio mecanismo de decodificação de código de barras.
Principais características arquitetônicas do BarcodeScanning.Native.Maui:
- Entrada somente por câmera: A biblioteca aceita apenas quadros de câmera ao vivo. Não existe nenhum método
ReadFromFile(), nenhumReadFromBytes(), nenhumReadFromStream()e nenhumReadFromPdf()em nenhum lugar da API pública. - Somente iOS e Android: A biblioteca encapsula APIs nativas específicas do iOS (framework Vision) e do Android (ML Kit). O alvo Windows no MAUI não possui implementação e nenhuma está planejada.
- Sem capacidade de geração: BarcodeScanning.Native.Maui lê códigos de barras a partir de frames da câmera. Não consegue gerar códigos de barras em nenhum formato.
- Inexatidão do UPC-A no iOS: A estrutura Vision da Apple retorna 13 dígitos para códigos de barras UPC-A (adicionando um zero à esquerda para corresponder à codificação EAN-13). A biblioteca repassa esse valor bruto sem correção, exigindo uma solução alternativa manual no código do aplicativo.
- Problema conhecido de confiabilidade do PDF417: O próprio sistema de rastreamento de problemas do GitHub da biblioteca documenta a digitalização do PDF417 como "muito problemática — a maioria das digitalizações nunca ocorre", o que impede diretamente a digitalização de etiquetas de envio, carteiras de motorista e cartões de embarque.
- Superfície Pública Mínima: A API pública consiste em
CameraView,OnDetectionFinished,OnDetectionFinishedEventArgseBarcodeResultcomDisplayValueeBarcodeFormat. Isso representa a totalidade daquilo com que o código da aplicação interage. - Licença MIT, sem custo: A biblioteca é de uso gratuito, sem taxas de licenciamento.
Padrão de varredura da câmera ao vivo
O padrão completo da API BarcodeScanning.Native.Maui consiste em um controle XAML combinado com um manipulador 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" />
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
Este controle oferece aos usuários um visor em tempo real incorporado à página MAUI. A detecção de código de barras é acionada continuamente enquanto a câmera estiver ativa. A experiência do usuário é realmente boa para aplicativos voltados ao consumidor, onde "apontar e escanear" é a principal interação. A limitação é que essa é a única interação que a biblioteca suporta — no momento em que os requisitos se estendem além da detecção de câmera ao vivo no iOS ou Android, o BarcodeScanning.Native.Maui não tem nada a oferecer.
Entendendo o IronBarcode
IronBarcode é uma biblioteca comercial para .NET dedicada à leitura e geração de códigos de barras que opera com entradas de dados em vez de fluxos de vídeo da câmera. Ele lê códigos de barras de arquivos de imagem, matrizes de bytes, fluxos de dados e documentos PDF. Na MAUI, a integração com a câmera do sistema ocorre por meio da API padrão da MAUI que os aplicativos usam para seleção de fotos, capturando uma foto e processando a imagem resultante como uma entrada estática.
OIronBarcodeimplementa seu próprio mecanismo de decodificação de código de barras, em vez de delegar a APIs nativas específicas da plataforma. Isso significa que a mesma chamada BarcodeReader.Read() se comporta de maneira consistente em iOS, Android, Windows, macOS, ASP.NET e processos de servidor em segundo plano. A biblioteca também fornece uma API completa para geração de código de barras através de BarcodeWriter e QRCodeWriter.
Principais características do IronBarcode:
- API estática baseada em arquivos:
BarcodeReader.Read()aceita um caminho de arquivo, matriz de bytes, fluxo ou PDF — qualquer fonte de dados estática. - Cobertura completa da plataforma: iOS, Android, Windows e macOS, com suporte para MAUI. O mesmo código funciona em todas as quatro plataformas sem ramificações específicas para cada uma.
- Geração de código de barras:
BarcodeWriter.CreateBarcode()eQRCodeWriter.CreateQrCode()geram Code128, QR, DataMatrix e outros formatos como arquivos de imagem ou matrizes de bytes. - Suporte a PDF: Os códigos de barras incorporados em documentos PDF são lidos diretamente, sem uma etapa intermediária de extração de imagem.
- Decodificação precisa de UPC-A: Retorna o valor correto de 12 dígitos do código UPC-A sem a necessidade de soluções alternativas de normalização manual.
- Licenciamento comercial: Lite US$ 749, Plus US$ 1.499, Professional $ 2.999, Ilimitado US$ 5.999 — licenças perpétuas com um ano de suporte.
- Implantação no lado do servidor: Funciona em ASP.NET, Azure Functions, contêineres Docker e AWS Lambda, sem dependência de plataforma ou de uma câmera física.
Comparação de recursos
A tabela a seguir destaca as diferenças fundamentais entre BarcodeScanning.Native.Maui e IronBarcode:
| Recurso | BarcodeScanning.MAUI | IronBarcode |
|---|---|---|
| Objetivo principal | detecção de código de barras em tempo real por câmera | Leitura e geração de códigos de barras a partir de qualquer fonte de dados. |
| Fontes de entrada | Somente quadros da câmera ao vivo | Arquivos, matrizes de bytes, fluxos, PDFs |
| Suporte da plataforma | Somente para iOS e Android MAUI | iOS, Android, Windows, macOS MAUI + lado do servidor |
| Geração de código de barras | Não | Sim — BarcodeWriter + QRCodeWriter |
| Modelo de Licença | MIT (gratuito, código aberto) | Comercial — Lite: US$ 749 a Ilimitado: US$ 5.999 |
| Lado do servidor / ASP.NET | Não | Sim |
Comparação Detalhada de Recursos
| Recurso | BarcodeScanning.MAUI | IronBarcode |
|---|---|---|
| Leitura | ||
| Leitura de quadros da câmera ao vivo | Sim — Controle CameraView | Não (use o MediaPicker para capturar e depois ler) |
| visor da câmera no aplicativo | Sim — contínuo em tempo real | Não — utiliza a interface de utilizador da câmara do sistema através do MediaPicker. |
| Ler a partir de um arquivo de imagem | Não | Sim — BarcodeReader.Read(path) |
| Ler de um array de bytes | Não | Sim — BarcodeReader.Read(bytes) |
| Leia a partir do fluxo | Não | Sim — BarcodeReader.Read(stream) |
| Leia a partir do PDF | Não | Sim — BarcodeReader.Read(pdf) |
| Detecção de múltiplos códigos de barras | Sim (múltiplos por quadro via e.BarcodeResults) |
Sim (ExpectMultipleBarcodes opção) |
| Controle de velocidade de leitura | Nenhum | @@--CÓDIGO-63743--@@ / @@--CÓDIGO-63744--@@ / @@--CÓDIGO-63745--@@ |
| Precisão do código UPC-A no iOS | Retorna 13 dígitos (erro), requer normalização manual. | Retorna o código UPC-A correto de 12 dígitos. |
| Confiabilidade do PDF417 | "A maioria das varreduras nunca ocorre" (problemas do GitHub ) | Apoiado |
| Geração | ||
| Geração de código de barras | Não | Sim — BarcodeWriter.CreateBarcode() |
| Geração de código QR | Não | Sim — QRCodeWriter.CreateQrCode() |
| Saída em formato PNG / matriz de bytes | Não | Sim |
| Plataforma | ||
| iOS PRINCIPAL | Sim | Sim |
| Android MAUI | Sim | Sim |
| Windows MAUI | Não | Sim |
| macOS MAUI | Não documentado | Sim |
| ASP.NET / lado do servidor | Não | Sim |
| Docker / Azure / AWS Lambda | Não | Sim |
| Suporte ao .NET Framework | Não (apenas MAUI) | Sim — .NET Framework 4.6.2 ou superior |
| Licenciamento | ||
| Tipo de licença | MIT (código aberto) | Perpétua comercial |
| Custo | Livre | Lite $749, Plus $1.499, Professional $2.999, Unlimited $5.999 |
| Modo de avaliação | N / D | Teste grátis disponível |
Arquitetura: Controle da câmera vs. API de processamento de arquivos
A diferença mais fundamental entre essas duas bibliotecas é o modelo de entrada. O BarcodeScanning.Native.Maui foi projetado em torno de um fluxo contínuo de vídeo da câmera; OIronBarcodefoi projetado para entradas de dados discretos. Essas não são implementações concorrentes da mesma ideia — são escolhas arquitetônicas diferentes para casos de uso distintos.
Abordagem de leitura de código de barras MAUI
BarcodeScanning.Native.Maui encapsula o pipeline nativo de detecção de câmera em cada plataforma. Não Android, o ML Kit processa frames. Não iOS, o framework Vision da Apple processa os frames. A biblioteca apresenta isso como um controle MAUI CameraView com um evento OnDetectionFinished. O código do aplicativo nunca manipula bytes de imagem diretamente — ele manipula apenas os valores de código de barras detectados que emergem do 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
A consequência desse projeto é que não há outro ponto de entrada. A câmera não é opcional — é a única entrada que a biblioteca reconhece. Um servidor, um arquivo, um PDF, uma máquina Windows — nenhum deles possui uma câmera no sentido que esta biblioteca espera.
Abordagem do IronBarcode
IronBarcode recebe dados de imagem através de seu método estático BarcodeReader.Read(). O solicitante fornece os dados — de qualquer fonte — e a biblioteca os decodifica. Não MAUI, os dados vêm de MediaPicker; Em um servidor, ele vem do envio de um formulário; Em um aplicativo de desktop, ele vem de uma caixa de diálogo de arquivo.
//IronBarcodein 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;
}
//IronBarcodein 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
'IronBarcode in MAUI: capture a photo, then read barcodes from it
' NuGet: dotnet add package IronBarcode
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
Este código funciona de forma idêntica no iOS, Android e Windows MAUI. Para uso no lado do servidor, o mesmo método BarcodeReader.Read() aceita um array de bytes de um arquivo carregado ou um caminho de PDF. A documentação do IronBarcode abrange todos os tipos de entrada suportados.
Cobertura da plataforma e suporte para Windows
A cobertura da plataforma é onde a limitação estrutural do BarcodeScanning.Native.Maui se torna concreta para as equipes que desenvolvem aplicativos MAUI.
Abordagem de leitura de código de barras MAUI
O BarcodeScanning.Native.Maui não oferece suporte ao destino Windows no MAUI. Essa lacuna não é temporária — é uma consequência estrutural da arquitetura da biblioteca. A biblioteca encapsula APIs nativas específicas do iOS (framework Vision) e do Android (ML Kit). O Windows não possui nenhuma delas. Equipes que desenvolvem um aplicativo MAUI para iOS, Android e Windows — um cenário padrão de múltiplos alvos — não podem usar o BarcodeScanning.Native.Maui como solução de código de barras para todos os três alvos. Eles devem implementar código específico para a plataforma Windows separadamente ou substituir a biblioteca por completo.
Abordagem do IronBarcode
A chamada BarcodeReader.Read() doIronBarcodefunciona em plataformas Windows, iOS, Android e macOS MAUI sem a necessidade de código específico para cada plataforma. Não há blocos #if WINDOWS, nem carregamento condicional de dependências, e não são necessárias implementações de stub. Para entradas de arquivos e PDFs, o padrão também é 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")
O guia de integraçãoIronBarcodeMAUI fornece instruções completas de configuração para todos os dispositivos MAUI. OIronBarcodetambém oferece suporte à implantação no lado do servidor em ambientes ASP.NET, Docker, Azure Functions e AWS Lambda, onde o caminho BarcodeScanning.Native.Maui não está presente.
Precisão de leitura de código de barras: UPC-A e PDF417
Dois problemas específicos de precisão de formato no BarcodeScanning.Native.Maui têm consequências diretas para aplicações de produção.
Abordagem de leitura de código de barras MAUI
No iOS, a detecção subjacente do BarcodeScanning.Native.Maui (Apple Vision) retorna 13 dígitos para códigos de barras UPC-A. O código UPC-A tem um formato de 12 dígitos; O zero à esquerda adicional corresponde à codificação EAN-13. A biblioteca repassa esse valor bruto sem correção. Aplicações que armazenam valores UPC-A em um banco de dados podem acumular registros com um zero à esquerda que não deveria estar ali.
A solução alternativa documentada exige verificar o formato e remover os espaços em branco do 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
Essa solução alternativa quebra silenciosamente os códigos de barras EAN-13 que começam com 0 se a verificação de formato for omitida. O PDF417 está documentado separadamente nos problemas do GitHub como "muito problemático — a maioria das digitalizações nunca ocorre", afetando etiquetas de envio, carteiras de motorista e cartões de embarque.
Abordagem do IronBarcode
OIronBarcoderetorna o valor UPC-A correto de 12 dígitos sem necessidade de normalização manual. O PDF417 é um formato suportado que permite a leitura de forma confiável. A parte de geração também está disponível através da API do 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")
Para aplicações em que a precisão dos dados de código de barras afeta diretamente as consultas de estoque, as transações em pontos de venda ou as integrações da cadeia de suprimentos, o tratamento correto de formatos doIronBarcodeelimina uma categoria de bug de produção que o BarcodeScanning.Native.Maui deixa no código da aplicação. A documentação de leitura de código de barras IronBarcode aborda detalhadamente o comportamento específico de cada formato.
Referência de Mapeamento de API
| BarcodeScanning.Native.Maui | IronBarcode |
|---|---|
CameraView Controle XAML |
Sem controle da câmera — use MediaPicker.CapturePhotoAsync() para capturar |
| @@--CÓDIGO-63757--@@ evento | @@--CÓDIGO-63758--@@ |
| @@--CÓDIGO-63759--@@ | Valor de retorno de BarcodeReader.Read() (IEnumerable) |
| @@--CÓDIGO-63761--@@ | @@--CÓDIGO-63762--@@ |
| @@--CÓDIGO-63763--@@ | @@--CÓDIGO-63764--@@ |
| @@--CÓDIGO-63765--@@ | @@--CÓDIGO-63766--@@ |
| @@--CÓDIGO-63767--@@ | Detecção automática — nenhuma configuração necessária para vários formatos. |
| @@--CÓDIGO-63768--@@ | @@--CÓDIGO-63769--@@ chamada |
| Somente iOS e Android | iOS, Android, Windows, macOS (MAUI) + ASP.NET, desktop |
| apenas enquadramentos da câmera | Arquivos, matrizes de bytes, fluxos, PDFs |
| Sem API para arquivos/PDF | BarcodeReader.Read(path) — aceita arquivos de imagem e PDFs |
| Sem Windows MAUI | Suporte completo para MAUI do Windows |
| Nenhuma API de geração | @@--CÓDIGO-63771--@@ + @@--CÓDIGO-63772--@@ |
Quando as equipes consideram migrar do BarcodeScanning.MAUI para o IronBarcode
Adicionado o alvo MAUI do Windows à compilação.
Geralmente, as aplicações MAUI começam com versões para iOS e Android como alvo e, posteriormente, adicionam o Windows à medida que a aplicação amadurece ou conforme os requisitos de distribuição Enterprise se expandem. Ao adicionar o alvo Windows, o BarcodeScanning.Native.Maui se torna um bloqueador imediato — não há implementação para Windows nem solução alternativa na biblioteca. Nessa situação, as equipes precisam manter uma implementação de código de barras separada para Windows usando uma biblioteca diferente ou migrar toda a camada de código de barras para uma biblioteca que funcione de forma consistente em todos os destinos MAUI. O segundo caminho é operacionalmente mais simples e elimina a sobrecarga de manutenção associada ao ramificação específica da plataforma.
Requisitos para upload de arquivos ou processamento de PDF adicionados.
Os aplicativos móveis geralmente começam com a digitalização da câmera ao vivo como único método de entrada e, posteriormente, expandem-se para aceitar imagens ou documentos carregados. Quando um usuário precisa escanear um código de barras de uma foto em sua galeria, de uma imagem recebida por e-mail ou de um PDF contendo manifestos de remessa ou cartões de embarque, o BarcodeScanning.Native.Maui não oferece nenhum caminho de código. As equipes que atingem esse limite de requisitos enfrentam uma escolha: adicionar uma segunda biblioteca de código de barras ao lado da BarcodeScanning.Native.Maui para entradas de arquivos e PDFs, ou migrar para uma única biblioteca que lide com todos os tipos de entrada. Gerenciar dois pacotes de código de barras com APIs diferentes, tipos de resultados diferentes e tabelas de suporte a formatos diferentes adiciona complexidade a longo prazo, algo que uma solução com um único pacote evita.
Processamento de código de barras no servidor introduzido
Aplicativos que leem códigos de barras em dispositivos móveis geralmente desenvolvem um componente do lado do servidor — um endpoint de API ASP.NET que valida códigos de barras, uma tarefa em segundo plano que processa PDFs ou uma função na nuvem que extrai números de rastreamento de documentos carregados. BarcodeScanning.Native.Maui é uma biblioteca de controle de interface do usuário que depende do contexto de hardware da câmera; Não pode ser executado em um processo de servidor. Uma equipe que precisa da mesma lógica de leitura de código de barras tanto em dispositivos móveis quanto em servidores deve usar uma biblioteca diferente para o lado do servidor. Quando surge a necessidade de implementar a lógica no servidor, as equipes frequentemente avaliam se consolidar tudo em uma única biblioteca que abranja ambas as versões é preferível a manter duas implementações separadas.
A precisão dos dados UPC-A torna-se um problema de produção.
O comportamento do código UPC-A de 13 dígitos do iOS nem sempre é detectado durante o desenvolvimento. Os códigos de barras UPC-A lidos em desenvolvimento podem parecer funcionar corretamente, mas o zero à esquerda introduzido pela estrutura Vision da Apple aparece no banco de dados. Equipes que descobrem valores UPC-A de 13 dígitos em registros de estoque, sistemas de ponto de venda ou integrações da cadeia de suprimentos enfrentam um problema de correção de dados, além de um problema de código. A solução alternativa documentada nos problemas relatados no GitHub do BarcodeScanning.Native.Maui corrige novas leituras, mas não corrige dados históricos. Quando o escopo do problema de qualidade dos dados fica claro, migrar para uma biblioteca que retorne valores UPC-A corretos sem normalização em nível de aplicativo costuma ser a solução mais adequada a longo prazo.
Obrigatório o uso do PDF417 (digitalização de documentos)
O PDF417 é o formato de código de barras usado em etiquetas de envio, carteiras de motorista e cartões de embarque na América do Norte. Esses são alvos de escaneamento comuns para aplicações de logística, verificação de identidade e viagens. O rastreador de problemas do GitHub do BarcodeScanning.Native.Maui documenta o PDF417 como "muito problemático — a maioria das leituras nunca ocorre". Para qualquer aplicação em que a confiabilidade do PDF417 seja um requisito funcional, e não apenas um diferencial, esse problema conhecido representa um obstáculo direto que força a avaliação de bibliotecas alternativas.
Considerações Comuns de Migração
Evento da câmera para MediaPicker e leitura estática
A principal mudança estrutural na migração é a substituição do padrão de evento contínuo da câmera por uma captura MediaPicker seguida por BarcodeReader.Read(). O manipulador de eventos OnDetectionFinished, o controle XAML CameraView e a declaração de namespace XML scanner: foram todos removidos. Em seu lugar, um botão aciona MediaPicker.CapturePhotoAsync(), e os bytes da foto resultante são passados para BarcodeReader.Read(). Isso altera a experiência do usuário, passando de um visor contínuo ao vivo para uma tela de câmera do sistema — adequada para a maioria das aplicações empresariais.
Alterações na organização de threads
BarcodeScanning.Native.Maui dispara OnDetectionFinished em uma thread em segundo plano, então todos os manipuladores existentes que atualizam elementos da interface do usuário envolvem suas atualizações em MainThread.BeginInvokeOnMainThread(). Com o padrão MediaPicker + async usado pelo IronBarcode, a continuação após await retorna no contexto de chamada, que normalmente é a thread principal. Na maioria dos casos, os wrappers MainThread.BeginInvokeOnMainThread() podem ser removidos, simplificando o código do manipulador de eventos.
Remoção de solução alternativa para o código UPC-A
Qualquer base de código que tenha lidado com o comportamento de 13 dígitos do UPC-A do iOS do BarcodeScanning.Native.Maui terá código que verifica BarcodeFormat.UPC_A e chama Substring(1) para remover o zero à esquerda. Este código deve ser excluído após a migração — oIronBarcoderetorna o valor correto de 12 dígitos, e manter a solução alternativa removeria incorretamente o primeiro dígito das leituras válidas de UPC-A.
Permissões MAUI
O BarcodeScanning.Native.Maui adiciona permissões de câmera aos manifestos do Android e do iOS automaticamente como parte da configuração do pacote. Com oIronBarcodeusando MediaPicker, as permissões de câmera padrão do MAUI em AndroidManifest.xml e Info.plist são necessárias — as mesmas permissões que qualquer aplicativo MAUI precisa para MediaPicker.CapturePhotoAsync(). Essas permissões geralmente já estão presentes em projetos MAUI que utilizam a câmera para qualquer finalidade.
Funcionalidades adicionais do IronBarcode
Além das funcionalidades abordadas nesta comparação, oIronBarcodeoferece recursos que o BarcodeScanning.Native.Maui não oferece em nenhum nível:
- Geração de código de barras : Gere códigos de barras nos formatos Code128, QR, DataMatrix, PDF417 e outros, como PNG, SVG ou matriz de bytes — utilizáveis na interface do usuário do MAUI, em respostas de API ou em etiquetas impressas.
- Geração de código QR : Crie códigos QR estilizados com incorporação de logotipo, personalização de cores e controle do nível de correção de erros.
- Leitura de múltiplos códigos de barras : A opção
ExpectMultipleBarcodeslê todos os códigos de barras presentes em uma única imagem em uma única passagem. - Extração de código de barras em PDF : Leia códigos de barras incorporados em documentos PDF diretamente — sem necessidade de conversão intermediária de imagem.
- Implantação no servidor : Implante a mesma lógica de leitura e geração de código de barras em ASP.NET, Azure Functions, Docker e AWS Lambda sem qualquer dependência de câmera.
- Configuração de velocidade de leitura : as configurações
ReadingSpeed.Faster,BalancedeSlowerpermitem o ajuste da taxa de transferência em relação à precisão, dependendo da qualidade da imagem. - Suporte a macOS MAUI : Suporte completo para macOS em aplicativos de desktop MAUI, abrangendo o quarto alvo MAUI que o BarcodeScanning.Native.Maui não documenta.
Compatibilidade com .NET e Preparação para o Futuro
OIronBarcodeé compatível com .NET 6, .NET 7, .NET 8 e .NET 9, bem como com o .NET Framework 4.6.2 e versões posteriores. Isso significa que ele funciona em todo o conjunto de destinos MAUI, bem como em ambientes de servidor legados que ainda não migraram para o .NET moderno.IronBarcoderecebe atualizações regulares e é compatível com o .NET 10, acompanhando o aumento da sua adoção até 2026. BarcodeScanning.Native.Maui é uma biblioteca exclusiva para MAUI, sem suporte para o .NET Framework e sem opção de implantação no servidor. Para equipes cujo código-fonte abrange tanto o MAUI quanto aplicativos de servidor .NET Framework ou .NET Core existentes, oIronBarcodefornece uma API consistente em todos os ambientes, sem exigir um pacote de código de barras separado para cada contexto de execução.
Conclusão
BarcodeScanning.Native.Maui eIronBarcodeabordam problemas diferentes. BarcodeScanning.Native.Maui é uma biblioteca de controle de câmera que fornece um visor em tempo real com detecção automática de código de barras no iOS e Android.IronBarcodeé uma biblioteca de leitura e geração de códigos de barras que processa dados de imagens estáticas de qualquer fonte em todas as plataformas .NET . A diferença arquitetônica — fluxo contínuo de câmera versus entrada de dados discreta — determina qual biblioteca é apropriada para um determinado conjunto de requisitos.
BarcodeScanning.Native.Maui é a escolha certa quando o aplicativo é um app móvel para o consumidor final, direcionado apenas para iOS e Android, quando a visualização ao vivo da câmera no aplicativo com detecção contínua de quadros é o padrão de UX necessário e quando os requisitos não se expandirão para incluir Windows, uploads de arquivos, processamento de PDF ou trabalho com código de barras no servidor. Dentro desse escopo restrito, ele é gratuito, minimalista e funcional.
OIronBarcodeé a escolha certa quando a cobertura da plataforma deve incluir a interface MAUI do Windows, quando a entrada de código de barras vem de arquivos, PDFs ou matrizes de bytes, além de ou em vez de uma câmera ao vivo, quando o processamento de código de barras no servidor faz parte da arquitetura ou quando a geração de código de barras é necessária juntamente com a leitura. Também é apropriado quando a precisão do UPC-A ou a confiabilidade do PDF417 são requisitos de produção, em vez de limitações aceitáveis. O custo da licença comercial é a contrapartida para essas funcionalidades.
Para equipes cujos requisitos atuais se enquadram no escopo restrito do BarcodeScanning.Native.Maui, a biblioteca é uma escolha razoável e econômica. Para equipes cujos requisitos cresceram ou devem crescer além da leitura de câmeras ao vivo em duas plataformas, a incompatibilidade de escopo com o BarcodeScanning.Native.Maui não é um problema de configuração, mas sim de arquitetura. A API consistente daIronBarcodeem todos os tipos de entrada, plataformas e destinos de implantação é a solução prática para essa incompatibilidade.
Perguntas frequentes
O que é BarcodeScanning.MAUI?
BarcodeScanning.MAUI é uma biblioteca .NET para geração e leitura de códigos de barras em aplicações C#. É uma das diversas alternativas que os desenvolvedores avaliam ao selecionar uma solução de código de barras para projetos .NET.
Quais são as principais diferenças entre BarcodeScanning.MAUI e IronBarcode?
O IronBarcode utiliza uma API estática e sem estado, que não requer gerenciamento de instâncias, enquanto o BarcodeScanning.MAUI normalmente exige a criação e configuração de uma instância antes do uso. O IronBarcode também oferece suporte nativo a PDF, detecção automática de formato e licenciamento com chave única em todos os ambientes.
O IronBarcode é mais fácil de licenciar do que o BarcodeScanning.MAUI?
O IronBarcode utiliza uma única chave de licença que abrange tanto o ambiente de desenvolvimento quanto o de produção. Isso simplifica os pipelines de CI/CD e as configurações do Docker em comparação com sistemas de licenciamento que separam as chaves do SDK das chaves de tempo de execução.
O IronBarcode é compatível com todos os formatos de código de barras suportados pelo BarcodeScanning.MAUI?
O IronBarcode suporta mais de 30 simbologias de código de barras, incluindo QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 e muitas outras. A detecção automática de formato significa que não é necessária a enumeração explícita de formatos.
O IronBarcode suporta leitura nativa de códigos de barras em PDF?
Sim. O IronBarcode lê códigos de barras diretamente de arquivos PDF usando BarcodeReader.Read("document.pdf") sem a necessidade de uma biblioteca de renderização de PDF separada. Os resultados por página incluem número da página, formato do código de barras, valor e nível de confiança.
Como o IronBarcode lida com o processamento em lote em comparação com o BarcodeScanning.MAUI?
Os métodos estáticos do IronBarcode são sem estado e naturalmente seguros para threads, permitindo o uso direto de Parallel.ForEach sem gerenciamento de instâncias por thread. Não há limite de throughput em nenhum plano de preços.
Quais versões do .NET o IronBarcode suporta?
O IronBarcode é compatível com o .NET Framework 4.6.2+, .NET Core 3.1 e .NET 5, 6, 7, 8 e 9 em um único pacote NuGet. As plataformas suportadas incluem Windows x64/x86, Linux x64 e macOS x64/ARM.
Como faço para instalar o IronBarcode em um projeto .NET?
Instale o IronBarcode via NuGet: execute 'Install-Package IronBarCode' no Console do Gerenciador de Pacotes ou 'dotnet add package IronBarCode' na CLI. Não são necessários instaladores de SDK ou arquivos de tempo de execução adicionais.
Posso avaliar o IronBarcode antes de comprar, ao contrário do BarcodeScanning.MAUI?
Sim. O modo de avaliação do IronBarcode retorna os valores completos dos códigos de barras decodificados — apenas as imagens de saída geradas recebem uma marca d'água. Você pode testar a precisão de leitura em seus próprios documentos antes de efetuar a compra.
Qual é a diferença de preço entre BarcodeScanning.MAUI e IronBarcode?
O IronBarcode tem um preço inicial de US$ 749 para uma licença perpétua de desenvolvedor único, que abrange desenvolvimento e produção. Detalhes sobre preços e opções de volume estão disponíveis na página de licenciamento do IronBarcode. Não há necessidade de uma licença de tempo de execução separada.
É simples migrar do BarcodeScanning.MAUI para o IronBarcode?
A migração do BarcodeScanning.MAUI para o IronBarcode envolve principalmente a substituição de chamadas de API baseadas em instâncias por métodos estáticos do IronBarcode, a remoção de código repetitivo de licenciamento e a atualização dos nomes das propriedades de resultado. A maioria das migrações consiste em reduzir o código em vez de adicioná-lo.
O IronBarcode gera códigos QR com logotipos?
Sim. O método `QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` incorpora uma imagem da marca em um código QR nativamente, com correção de erros configurável. Códigos QR coloridos também são suportados através do método `ChangeBarCodeColor()`.

