Passer au contenu du pied de page
COMPARER à D'AUTRES COMPOSANTS

BarcodeScanning.MAUI vs IronBarcode : Comparaison de la bibliothèque BarCode C#

BarcodeScanning.Native.Maui est un plugin pour appareil photo, et non une bibliothèque de codes-barres. Si votre application fonctionne sous Windows, traite des fichiers téléchargés ou lit des codes-barres à partir de fichiers PDF, ce n'est pas l'outil approprié — et le fichier README ne le précise pas d'emblée. La page du paquetage le décrit comme une "bibliothèque de lecture de codes-barres pour .NET MAUI", ce qui est techniquement exact mais omet la contrainte critique : il s'agit d'un contrôle CameraView qui déclenche un événement lorsqu'un code-barres entre dans le cadre d'une caméra en direct. Voici l'ensemble complet des fonctionnalités. Cette comparaison examine les différences architecturales entre une bibliothèque de contrôle de caméra et un kit de développement logiciel (SDK) de codes-barres complet, aidant ainsi les équipes à comprendre les points forts et les limites de chaque outil.

Comprendre la lecture des codes-barres.MAUI

BarcodeScanning.Native.Maui enveloppe les API de détection de codes-barres de la caméra native sur iOS (Apple's Vision framework) et Android (ML Kit) dans un contrôle MAUI CameraView. Un développeur intègre le contrôle dans une page XAML, configure un gestionnaire d'événements, et la bibliothèque déclenche cet événement chaque fois qu'un code-barres est détecté dans le flux vidéo en direct de la caméra. Le modèle d'interaction est entièrement basé sur le principe caméra entrante, événement sortant — il n'y a pas d'autre voie possible.

La bibliothèque est open-source et gratuite sous licence MIT. Son objectif de conception est précis et explicite : fournir une détection de codes-barres en direct par caméra pour les applications MAUI iOS et Android avec une surface d'API minimale. Elle atteint cet objectif en déléguant certaines tâches aux API natives de la plateforme plutôt qu'en implémentant son propre moteur de décodage de codes-barres.

Principales caractéristiques architecturales de BarcodeScanning.Native.Maui :

  • Entrée uniquement via la caméra : la bibliothèque n'accepte que les images de la caméra en direct. Il n'y a pas de méthode ReadFromFile(), de ReadFromBytes(), de ReadFromStream(), ni de ReadFromPdf() dans l'API publique.
  • iOS et Android uniquement : cette bibliothèque encapsule les API natives spécifiques à iOS (framework Vision) et à Android (ML Kit). La version Windows de MAUI n'est pas implémentée et aucune ne l'est actuellement.
  • Aucune capacité de génération : BarcodeScanning.Native.Maui lit les codes-barres à partir des images de la caméra. Il ne peut générer de codes-barres dans aucun format.
  • Inexactitude des codes UPC-A sous iOS : le framework Vision d'Apple renvoie 13 chiffres pour les codes-barres UPC-A (en ajoutant un zéro initial pour correspondre à l'encodage EAN-13). La bibliothèque transmet cette valeur brute sans correction, ce qui nécessite une intervention manuelle dans le code de l'application.
  • Problème connu de fiabilité du PDF417 : le système de suivi des problèmes GitHub de la bibliothèque indique que la numérisation du PDF417 est " très problématique — la plupart des numérisations n'ont jamais lieu ", ce qui constitue un obstacle direct pour les étiquettes d'expédition, les permis de conduire et les cartes d'embarquement.
  • Surface publique minimale: L'API publique se compose de CameraView, OnDetectionFinished, OnDetectionFinishedEventArgs, et BarcodeResult avec DisplayValue et BarcodeFormat. Voilà l'intégralité des éléments avec lesquels le code de l'application interagit.
  • Licence MIT, gratuite : la bibliothèque est gratuite d'utilisation, sans frais de licence.

Modèle de balayage de la caméra en direct

L'API BarcodeScanning.Native.Maui complète est un contrôle XAML associé à un gestionnaire d'événements 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

Cette commande offre aux utilisateurs un viseur en temps réel intégré à la page MAUI. La détection des codes-barres est continue tant que le flux vidéo de la caméra est actif. L'expérience utilisateur est vraiment réussie pour les applications grand public où le " pointer et scanner " est l'interaction principale. La limitation est que c'est la seule interaction prise en charge par la bibliothèque ; dès que les exigences dépassent la détection en direct par caméra sur iOS ou Android, BarcodeScanning.Native.Maui n'a plus rien à offrir.

Comprendre IronBarcode

IronBarcode est une bibliothèque commerciale de lecture et de génération de codes-barres pour .NET qui fonctionne avec des entrées de données plutôt qu'avec des flux de caméra. Il lit les codes-barres à partir de fichiers image, de tableaux d'octets, de flux et de documents PDF. Sur MAUI, il s'intègre à l'appareil photo du système via MediaPicker - la même API MAUI standard que les applications utilisent pour la sélection de photos - en capturant une photo et en traitant l'image résultante en tant qu'entrée statique.

IronBarcode met en œuvre son propre moteur de décodage de codes-barres plutôt que de déléguer à des API natives spécifiques à la plateforme. Cela signifie que le même appel BarcodeReader.Read() se comporte de manière cohérente sur iOS, Android, Windows, macOS, ASP.NET et les processus de serveur d'arrière-plan. La bibliothèque fournit également une API complète de génération de codes-barres via BarcodeWriter et QRCodeWriter.

Caractéristiques principales d' IronBarcode:

  • L'API basée sur les fichiers statiques: BarcodeReader.Read() accepte un chemin de fichier, un tableau d'octets, un flux ou un PDF - n'importe quelle source de données statiques.
  • Couverture complète des plateformes : les cibles MAUI iOS, Android, Windows et macOS sont toutes prises en charge. Le même code s'exécute sur les quatre plateformes sans branchement spécifique à chaque plateforme.
  • Génération de BarCodes: BarcodeWriter.CreateBarcode() et QRCodeWriter.CreateQrCode() génèrent le Code128, QR, DataMatrix, et d'autres formats sous forme de fichiers images ou de tableaux d'octets.
  • Prise en charge des fichiers PDF : les codes-barres intégrés aux documents PDF sont lus directement, sans étape intermédiaire d'extraction d'image.
  • Décodage précis du code UPC-A : renvoie la valeur UPC-A correcte à 12 chiffres sans nécessiter de solutions de contournement de normalisation manuelle.
  • Licences commerciales : Lite 749 $, Plus 1 499 $, Professional 2 999 $, Illimité 5 999 $ — licences perpétuelles avec un an d'assistance.
  • Déploiement côté serveur : fonctionne sous ASP.NET, Azure Functions, conteneurs Docker et AWS Lambda sans dépendance à une caméra physique.

Comparaison des fonctionnalités

Le tableau suivant met en évidence les différences fondamentales entre BarcodeScanning.Native.Maui et IronBarcode:

Fonction BarcodeScanning.MAUI Code-barres IronBarcode
Objectif principal Détection de codes-barres par caméra en direct Lecture et génération de codes-barres à partir de n'importe quelle source de données
Sources d'entrée Images de la caméra en direct uniquement Fichiers, tableaux d'octets, flux, PDF
Support de la plateforme iOS et Android MAUIuniquement iOS, Android, Windows, macOS MAUI+ côté serveur
Génération de codes-barres Non Oui — BarcodeWriter + QRCodeWriter
Modèle de licence MIT (gratuit, open source) Commercial — Lite à 749 $ ou formule Illimitée à 5 999 $
Côté serveur / ASP.NET Non Oui

Comparaison détaillée des fonctionnalités

Fonction BarcodeScanning.MAUI Code-barres IronBarcode
En lisant
lecture d'images de la caméra en direct Oui — Contrôle CameraView Non (utilisez MediaPicker pour capturer, puis lire)
Viseur de caméra intégré à l'application Oui — en continu en temps réel Non — utilise l'interface utilisateur de la caméra système via MediaPicker
Lire à partir d'un fichier image Non Oui - BarcodeReader.Read(path)
Lecture à partir d'un tableau d'octets Non Oui - BarcodeReader.Read(bytes)
Lecture à partir du flux Non Oui - BarcodeReader.Read(stream)
Lire le PDF Non Oui - BarcodeReader.Read(pdf)
Détection de plusieurs codes-barres Oui (plusieurs par image via e.BarcodeResults) Oui (option ExpectMultipleBarcodes)
Contrôle de la vitesse de lecture Aucun ReadingSpeed.Balanced / Faster / Slower
Précision du code UPC-A sur iOS Renvoie 13 chiffres (bug), nécessite une normalisation manuelle. Renvoie le code UPC-A à 12 chiffres correct
Fiabilité du PDF417 " La plupart des analyses n'ont jamais lieu " (Problèmes GitHub ) Prise en charge
Génération
génération de codes-barres Non Oui - BarcodeWriter.CreateBarcode()
génération de code QR Non Oui - QRCodeWriter.CreateQrCode()
Sortie au format PNG / tableau d'octets Non Oui
Plateforme
iOS MAUI Oui Oui
Android MAUI Oui Oui
Windows MAUI Non Oui
macOS MAUI Non documenté Oui
ASP.NET / côté serveur Non Oui
Docker / Azure / AWS Lambda Non Oui
Prise en charge du .NET Framework Non (MAUI uniquement) Oui — .NET Framework 4.6.2 et versions ultérieures
Licence
Type de licence MIT (logiciel libre) perpétuelle commerciale
Coût Gratuit Lite 749 $, Plus 1 499 $, Professional 2 999 $, Illimité 5 999 $
Mode d'évaluation N/A Essai gratuit disponible

Architecture : API de contrôle de la caméra vs API de traitement des fichiers

La différence la plus fondamentale entre ces deux bibliothèques réside dans le modèle d'entrée. BarcodeScanning.Native.Maui est conçu autour d'un flux vidéo continu provenant d'une caméra ; Code-barres IronBarcode est conçu autour de saisies de données discrètes. Il ne s'agit pas de mises en œuvre concurrentes d'une même idée, mais de choix architecturaux différents pour des cas d'utilisation différents.

Approche de lecture de codes-barres MAUI

BarcodeScanning.Native.Maui encapsule le pipeline de détection de caméra natif sur chaque plateforme. Sur Android, ML Kit traite les trames. Sur iOS, le framework Vision d'Apple traite les images. La bibliothèque se présente sous la forme d'un contrôle MAUI CameraView avec un événement OnDetectionFinished. Le code de l'application ne traite jamais directement les octets de l'image ; il ne traite que les valeurs de code-barres détectées qui émergent de l'événement.

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

Cette conception a pour conséquence qu'il n'existe aucun autre point d'entrée. La caméra n'est pas optionnelle — c'est la seule entrée que la bibliothèque connaît. Un serveur, un fichier, un PDF, un ordinateur Windows — aucun de ces éléments ne possède de caméra au sens où cette bibliothèque l'entend.

Approche IronBarcode

IronBarcode reçoit des données d'image par le biais de sa méthode statique BarcodeReader.Read(). L'appelant fournit les données — provenant de n'importe quelle source — et la bibliothèque les décode. Sur MAUI, les données proviennent de MediaPicker ; Sur un serveur, cela provient du téléchargement d'un formulaire ; Dans une application de bureau, cela provient d'une boîte de dialogue de fichier.

// Code-barres 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;
}
// Code-barres 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

' Code-barres 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
$vbLabelText   $csharpLabel

Ce code fonctionne de manière identique sur iOS, Android et Windows MAUI. Pour une utilisation côté serveur, la même méthode BarcodeReader.Read()@ accepte le tableau d'octets d'un fichier téléchargé ou un chemin d'accès à un PDF. La documentation IronBarcode couvre tous les types d'entrée pris en charge.

Couverture de la plateforme et prise en charge de Windows

C'est au niveau de la couverture de la plateforme que la limitation structurelle de BarcodeScanning.Native.Maui devient concrète pour les équipes développant des applications MAUI.

Approche de lecture de codes-barres MAUI

BarcodeScanning.Native.Maui ne prend pas en charge la cible Windows dans MAUI. Il ne s'agit pas d'un problème temporaire, mais d'une conséquence structurelle de l'architecture de la bibliothèque. Cette bibliothèque encapsule les API natives spécifiques à iOS (framework Vision) et à Android (ML Kit). Windows ne dispose d'aucune des deux. Les équipes développant une application MAUI ciblant iOS, Android et Windows — un scénario multi-cible standard — ne peuvent pas utiliser BarcodeScanning.Native.Maui comme solution de code-barres pour les trois cibles. Ils doivent soit implémenter séparément un code spécifique à la plateforme Windows, soit remplacer entièrement la bibliothèque.

Approche IronBarcode

L'appel BarcodeReader.Read() d'IronBarcode fonctionne sur les cibles Windows, iOS, Android et macOS MAUIsans aucun code spécifique à la plateforme. Il n'y a pas de blocs #if WINDOWS, pas de chargement conditionnel de dépendances et pas d'implémentation de stub nécessaire. Pour les fichiers et les PDF, le modèle est également cohérent :

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

Le guide d'intégration Code-barres IronBarcode MAUI fournit des instructions de configuration complètes pour toutes les cibles MAUI. Code-barres IronBarcode prend également en charge le déploiement côté serveur dans les environnements ASP.NET, Docker, Azure Functions et AWS Lambda où BarcodeScanning.Native.Maui n'a aucun chemin d'accès.

Précision de lecture des codes-barres : UPC-A et PDF417

Deux problèmes spécifiques de précision de format dans BarcodeScanning.Native.Maui ont des conséquences directes sur les applications de production.

Approche de lecture de codes-barres MAUI

Sur iOS, la détection sous-jacente de BarcodeScanning.Native.Maui (Apple Vision) renvoie 13 chiffres pour les codes-barres UPC-A. Le code UPC-A est un format à 12 chiffres ; Le zéro supplémentaire en tête correspond à l'encodage EAN-13. La bibliothèque transmet cette valeur brute sans correction. Les applications qui stockent des valeurs UPC-A dans une base de données peuvent accumuler des enregistrements comportant un zéro initial qui n'a pas sa place.

La solution de contournement documentée consiste à vérifier le format et à supprimer les valeurs superflues :

// 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

Cette solution de contournement rend les codes-barres EAN-13 commençant par 0 inopérants si la vérification du format est omise. Le PDF417 est documenté séparément dans les problèmes GitHub comme étant " très problématique — la plupart des scans n'ont jamais lieu ", affectant les étiquettes d'expédition, les permis de conduire et les cartes d'embarquement.

Approche IronBarcode

IronBarcode renvoie la valeur UPC-A à 12 chiffres correcte sans normalisation manuelle. Le format PDF417 est pris en charge et sa lecture est fiable. La partie génération est également disponible via l'API d'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

Pour les applications où la précision des données de codes-barres affecte directement les recherches d'inventaire, les transactions aux points de vente ou les intégrations de la chaîne d'approvisionnement, la gestion correcte du format d'IronBarcode élimine une catégorie de bugs de production que BarcodeScanning.Native.Maui laisse dans le code de l'application. La documentation de lecture des codes-barres IronBarcode décrit en détail le comportement spécifique à chaque format.

Référence de mappage d'API

BarcodeScanning.Native.Maui Code-barres IronBarcode
CameraView Contrôle XAML Pas de contrôle de la caméra - utilisez MediaPicker.CapturePhotoAsync() pour capturer
OnDetectionFinished événement BarcodeReader.Read(imageBytes)
e.BarcodeResults Valeur de retour de BarcodeReader.Read() (IEnumerable)
e.BarcodeResults.FirstOrDefault() results.FirstOrDefault()
barcode.DisplayValue result.Value
barcode.BarcodeFormat result.Format
BarcodeFormats="All" Détection automatique — aucune configuration requise pour les formats multiples
CameraEnabled="True" MediaPicker.CapturePhotoAsync() appel
iOS et Android uniquement iOS, Android, Windows, macOS (MAUI) + ASP.NET, ordinateur de bureau
Images de la caméra uniquement Fichiers, tableaux d'octets, flux, PDF
API fichier/PDF indisponible BarcodeReader.Read(path) - accepte les fichiers images et les PDF
Pas de Windows MAUI Prise en charge complète de Windows MAUI
API sans génération BarcodeWriter.CreateBarcode() + QRCodeWriter.CreateQrCode()

Lorsque les équipes envisagent de passer de BarcodeScanning.MAUI à IronBarcode

Ajout de la cible Windows MAUIà la version

Les applications MAUI ciblent généralement iOS et Android dès leur lancement, puis ajoutent Windows ultérieurement à mesure que l'application mûrit ou que les besoins de distribution en Enterprise s'étendent. Lorsque la cible Windows est ajoutée, BarcodeScanning.Native.Maui devient immédiatement un obstacle : il n'existe aucune implémentation Windows ni aucune solution de contournement au sein de la bibliothèque. Dans ce cas, les équipes doivent soit maintenir une implémentation de code-barres distincte pour Windows utilisant une bibliothèque différente, soit migrer l'ensemble de la couche de code-barres vers une bibliothèque fonctionnant de manière cohérente sur toutes les cibles MAUI. La seconde solution est plus simple sur le plan opérationnel et élimine les coûts de maintenance liés à la gestion de branches spécifiques à chaque plateforme.

Ajout d'exigences relatives au téléchargement de fichiers ou au traitement de PDF

Les applications mobiles commencent souvent par utiliser la numérisation en direct par caméra comme unique méthode de saisie, puis s'étendent pour accepter les images ou documents téléchargés. Lorsqu'un utilisateur a besoin de scanner un code-barres à partir d'une photo de sa galerie, d'une image reçue par e-mail ou d'un PDF contenant des manifestes d'expédition ou des cartes d'embarquement, BarcodeScanning.Native.Maui ne propose aucun chemin de code. Les équipes qui atteignent ce seuil d'exigences doivent faire un choix : ajouter une seconde bibliothèque de codes-barres en plus de BarcodeScanning.Native.Maui pour les entrées de fichiers et de PDF, ou migrer vers une bibliothèque unique prenant en charge tous les types d'entrée. La gestion de deux bibliothèques de codes-barres avec des API, des types de résultats et des tables de compatibilité de formats différents engendre une complexité à long terme qu'une solution unique permet d'éviter.

Introduction du traitement des codes-barres côté serveur

Les applications qui scannent les codes-barres sur mobile développent souvent un composant côté serveur : un point de terminaison d'API ASP.NET qui valide les codes-barres, une tâche en arrière-plan qui traite les PDF ou une fonction cloud qui extrait les numéros de suivi des documents téléchargés. BarcodeScanning.Native.Maui est une bibliothèque de contrôle d'interface utilisateur qui dépend d'un contexte matériel de caméra ; Il ne peut pas s'exécuter dans un processus serveur. Une équipe qui a besoin de la même logique de lecture de codes-barres côté mobile et côté serveur doit utiliser une bibliothèque différente pour le serveur. Lorsque les besoins côté serveur se font sentir, les équipes évaluent souvent s'il est préférable de centraliser la gestion des codes-barres dans une bibliothèque unique couvrant à la fois le mobile et le serveur, plutôt que de maintenir deux implémentations distinctes.

L'exactitude des données UPC-A devient un problème de production

Le comportement des codes UPC-A à 13 chiffres d'iOS n'est pas toujours détecté lors du développement. Les codes-barres UPC-A scannés en phase de développement peuvent sembler fonctionner correctement, mais le zéro initial introduit par le framework Vision d'Apple apparaît dans la base de données. Les équipes qui découvrent des valeurs UPC-A à 13 chiffres dans les registres d'inventaire, les systèmes de point de vente ou les intégrations de la chaîne d'approvisionnement sont confrontées à un problème de correction des données en plus d'un problème de code. La solution de contournement documentée dans les problèmes GitHub de BarcodeScanning.Native.Maui corrige les nouvelles analyses, mais pas les données historiques. Lorsque l'ampleur du problème de qualité des données est clairement définie, la migration vers une bibliothèque qui renvoie des valeurs UPC-A correctes sans normalisation au niveau de l'application constitue souvent la solution à long terme la plus propre.

Numérisation de documents PDF417 requise

Le format PDF417 est le format de code-barres utilisé sur les étiquettes d'expédition, les permis de conduire et les cartes d'embarquement en Amérique du Nord. Ce sont des cibles de numérisation courantes pour les applications logistiques, de vérification d'identité et de voyage. Le gestionnaire de problèmes GitHub de BarcodeScanning.Native.Maui signale que le format PDF417 est " très problématique — la plupart des scans n'ont jamais lieu ". Pour toute application où la fiabilité du format PDF417 est une exigence fonctionnelle et non une simple option, ce problème connu constitue un blocage direct qui oblige à évaluer des bibliothèques alternatives.

Considérations courantes en matière de migration

Événement de caméra vers MediaPicker et lecture statique

La principale modification structurelle de la migration consiste à remplacer le modèle d'événement continu de la caméra par une capture MediaPicker suivie d'une BarcodeReader.Read(). Le OnDetectionFinished gestionnaire d'événements, le CameraView contrôle XAML et la scanner: déclaration d'espace de noms XML sont tous supprimés. À leur place, un bouton déclenche MediaPicker.CapturePhotoAsync(), et les octets de la photo résultante sont transmis à BarcodeReader.Read(). Cela modifie l'expérience utilisateur, passant d'un viseur continu en direct à un écran de caméra système — ce qui convient à la plupart des applications professionnelles.

Modifications du marshaling des threads

BarcodeScanning.Native.Maui déclenche OnDetectionFinished sur un thread d'arrière-plan, donc tous les gestionnaires existants qui mettent à jour les éléments de l'interface utilisateur enveloppent leurs mises à jour dans MainThread.BeginInvokeOnMainThread(). Avec le motif MediaPicker + async utilisé par IronBarcode, la suite après await retourne sur le contexte appelant, qui est généralement le thread principal. Dans la plupart des cas, les enveloppes MainThread.BeginInvokeOnMainThread() peuvent être supprimées, ce qui simplifie le code du gestionnaire d'événements.

Suppression de la solution de contournement UPC-A

Toute base de code qui a géré le comportement iOS UPC-A à 13 chiffres de BarcodeScanning.Native.Maui aura un code qui vérifie BarcodeFormat.UPC_A et appelle Substring(1) pour supprimer le zéro initial. Ce code doit être supprimé après la migration — Code-barres IronBarcode renvoie la valeur correcte à 12 chiffres, et le maintien de cette solution de contournement supprimerait incorrectement le premier chiffre des lectures UPC-A valides.

Autorisations MAUI

BarcodeScanning.Native.Maui ajoute automatiquement les permissions de caméra aux manifestes Android et iOS dans le cadre de l'installation de son paquet. Avec Code-barres IronBarcode utilisant MediaPicker, les permissions standard de caméra MAUI dans AndroidManifest.xml et Info.plist sont requises - les mêmes permissions que n'importe quelle application MAUI a besoin pour MediaPicker.CapturePhotoAsync(). Ces autorisations sont généralement déjà présentes dans les projets MAUI qui utilisent la caméra à quelque fin que ce soit.

Fonctionnalités supplémentaires IronBarcode

Au-delà des fonctionnalités présentées dans cette comparaison, Code-barres IronBarcode offre des options que BarcodeScanning.Native.Maui n'aborde à aucun niveau :

  • Génération de codes-barres : Générez des codes Code128, QR, DataMatrix, PDF417 et autres formats au format PNG, SVG ou tableau d'octets — utilisables dans l'interface utilisateur MAUI, les réponses API ou les étiquettes imprimées.
  • Génération de codes QR : Créez des codes QR stylisés avec intégration de logo, personnalisation des couleurs et contrôle du niveau de correction d'erreur.
  • Lecture multi-codes-barres: L'option ExpectMultipleBarcodes lit tous les codes-barres présents dans une seule image en un seul passage.
  • Extraction de codes-barres PDF : Lisez directement les codes-barres intégrés aux documents PDF — aucune conversion d'image intermédiaire n'est requise.
  • Déploiement côté serveur : Déployez la même logique de lecture et de génération de codes-barres dans ASP.NET, Azure Functions, Docker et AWS Lambda sans aucune dépendance à une caméra.
  • Configuration de la vitesse de lecture: ReadingSpeed.Faster, Balanced, et Slower permettent de régler le débit par rapport à la précision en fonction de la qualité de l'image.
  • Prise en charge de macOS MAUI : Prise en charge complète de macOS pour les applications de bureau MAUI, couvrant la quatrième cible MAUI que BarcodeScanning.Native.Maui ne documente pas.

Compatibilité .NET et préparation à l'avenir

IronBarcode prend en charge .NET 6, .NET 7, .NET 8 et .NET 9, ainsi que .NET Framework 4.6.2 et versions ultérieures. Cela signifie qu'il fonctionne sur l'ensemble des cibles MAUI ainsi que sur les environnements serveur hérités qui n'ont pas encore migré vers le .NET moderne. Code-barres IronBarcode bénéficie de mises à jour régulières et est compatible avec .NET 10, dont l'adoption augmentera jusqu'en 2026. BarcodeScanning.Native.Maui est une bibliothèque exclusivement MAUI, sans prise en charge du .NET Framework ni possibilité de déploiement côté serveur. Pour les équipes dont le code source s'étend à la fois à MAUI et aux applications serveur .NET Framework ou .NET Core existantes, Code-barres IronBarcode fournit une API cohérente dans tous les environnements sans nécessiter de package de code-barres distinct pour chaque contexte d'exécution.

Conclusion

BarcodeScanning.Native.Maui et Code-barres IronBarcode traitent des problèmes différents. BarcodeScanning.Native.Maui est une bibliothèque de contrôle de caméra qui fournit un viseur en temps réel avec détection automatique des codes-barres sur iOS et Android. Code-barres IronBarcode est une bibliothèque de lecture et de génération de codes-barres qui traite les données d'images statiques provenant de n'importe quelle source sur toutes les plateformes .NET . La différence architecturale — flux vidéo continu de la caméra contre entrée de données discrète — détermine quelle bibliothèque est appropriée à un ensemble d'exigences donné.

BarcodeScanning.Native.Maui est le choix idéal lorsque l'application est une application mobile grand public ciblant uniquement iOS et Android, lorsque la prévisualisation en direct de la caméra intégrée à l'application avec détection continue des images est le modèle d'expérience utilisateur requis, et lorsque les exigences ne s'étendront pas à Windows, aux téléchargements de fichiers, au traitement PDF ou au traitement des codes-barres côté serveur. Dans ce cadre restreint, il est gratuit, minimal et fonctionnel.

IronBarcode est le choix idéal lorsque la couverture de la plateforme doit inclure Windows MAUI, lorsque l'entrée de code-barres provient de fichiers, de PDF ou de tableaux d'octets en plus ou à la place d'une caméra en direct, lorsque le traitement des codes-barres côté serveur fait partie de l'architecture ou lorsque la génération de codes-barres est requise en plus de la lecture. Cela convient également lorsque la précision UPC-A ou la fiabilité PDF417 sont des exigences de production plutôt que des limitations acceptables. Le coût de la licence commerciale est le prix à payer pour ces fonctionnalités.

Pour les équipes dont les besoins actuels correspondent au périmètre restreint de BarcodeScanning.Native.Maui, cette bibliothèque représente un choix judicieux et économique. En revanche, pour celles dont les besoins ont évolué ou devraient évoluer au-delà de la simple lecture de codes-barres en temps réel sur deux plateformes, l'inadéquation du périmètre avec BarcodeScanning.Native.Maui relève non pas d'un problème de configuration, mais d'un problème d'architecture. L'API cohérente d'IronBarcode, applicable à tous les types d'entrée, plateformes et cibles de déploiement, constitue la solution pratique à cette inadéquation.

Questions Fréquemment Posées

Qu'est-ce que BarcodeScanning.MAUI ?

BarcodeScanning.MAUI est une bibliothèque de codes-barres .NET permettant de générer et de lire des codes-barres dans des applications C#. C'est l'une des nombreuses alternatives que les développeurs évaluent lorsqu'ils choisissent une solution de code-barres pour les projets .NET.

Quelles sont les principales différences entre BarcodeScanning.MAUI et IronBarcode ?

IronBarcode utilise une API statique, sans état, ne nécessitant aucune gestion d'instance, tandis que BarcodeScanning.MAUI nécessite généralement la création et la configuration d'une instance avant utilisation. IronBarcode offre également une prise en charge native du format PDF, une détection automatique du format et une licence à clé unique pour tous les environnements.

IronBarcode est-il plus facile à licencier que BarcodeScanning.MAUI ?

IronBarcode utilise une clé de licence unique couvrant à la fois les déploiements de développement et de production. Cela simplifie les pipelines CI/CD et les configurations Docker par rapport aux systèmes de licence qui séparent les clés SDK des clés d'exécution.

Est-ce qu'IronBarcode supporte tous les formats de codes-barres que BarcodeScanning.MAUI supporte ?

IronBarcode prend en charge plus de 30 symbologies de codes-barres, notamment QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1, et bien d'autres encore. L'auto-détection du format signifie qu'aucune énumération explicite du format n'est nécessaire.

IronBarcode prend-il en charge la lecture de codes-barres PDF en mode natif ?

Oui. IronBarcode lit les codes-barres directement à partir de fichiers PDF en utilisant BarcodeReader.Read("document.pdf") sans nécessiter de bibliothèque de rendu PDF séparée. Les résultats par page comprennent le numéro de page, le format du code-barres, la valeur et le score de confiance.

Comment IronBarcode gère-t-il le traitement par lots par rapport à BarcodeScanning.MAUI ?

Les méthodes statiques d'IronBarcode sont sans état et naturellement à l'abri des threads, ce qui permet d'utiliser directement Parallel.ForEach sans gestion d'instance par thread. Il n'y a pas de plafond de débit, quel que soit le niveau de prix.

Quelles versions de .NET sont prises en charge par IronBarcode ?

IronBarcode prend en charge .NET Framework 4.6.2+, .NET Core 3.1 et .NET 5, 6, 7, 8 et 9 dans un seul package NuGet. Les plates-formes visées sont Windows x64/x86, Linux x64 et macOS x64/ARM.

Comment installer IronBarcode for .NET dans un projet .NET ?

Installez IronBarcode via NuGet : exécutez "Install-Package IronBarCode" dans la console du gestionnaire de paquets, ou "dotnet add package IronBarCode" dans le CLI. Aucun installateur SDK ou fichier d'exécution supplémentaire n'est nécessaire.

Puis-je évaluer IronBarcode avant l'achat, contrairement à BarcodeScanning.MAUI ?

Oui. Le mode d'essai d'IronBarcode renvoie des valeurs de code-barres décodées complètes - seules les images de sortie générées reçoivent un filigrane. Vous pouvez comparer la précision de lecture sur vos propres documents avant de vous engager dans un achat.

Quelle est la différence de prix entre BarcodeScanning.MAUI et IronBarcode ?

IronBarcode est proposé à partir de 749 dollars pour une licence perpétuelle pour un seul développeur couvrant le développement et la production. Les détails des prix et les options de volume sont disponibles sur la page de licence d'IronBarcode. Il n'est pas nécessaire de disposer d'une licence d'exécution distincte.

Est-il simple de migrer de BarcodeScanning.MAUI vers IronBarcode ?

La migration de BarcodeScanning.MAUI vers IronBarcode implique principalement le remplacement des appels d'API basés sur les instances par les méthodes statiques d'IronBarcode, la suppression du boilerplate de licence et la mise à jour des noms des propriétés des résultats. La plupart des migrations impliquent une réduction du code plutôt qu'un ajout.

IronBarcode génère-t-il des codes QR avec des logos ?

Oui. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") incorpore une image de marque dans un code QR de manière native avec une correction d'erreur configurable. Les codes QR colorés sont également pris en charge via ChangeBarCodeColor().

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi