IRONSOFTWAREHOME
VIDÉOS

Migrer de ZXing.Net.MAUI vers IronBarcode

Curtis Chau
Curtis Chau
Updated: 19 mai 2026

Ce guide fournit un chemin de migration complet de ZXing .NET.MAUI vers Code-barres IronBarcode pour les développeurs .NET MAUI . Il aborde les raisons pour lesquelles les équipes entreprennent cette migration, une comparaison des fonctionnalités pour cadrer la décision, les étapes mécaniques pour remplacer le package et mettre à jour les fichiers de projet, des exemples de code avant et après pour chaque cas d'utilisation majeur, une référence de traduction d'API, une section de dépannage pour les problèmes qui surviennent pendant la transition, une liste de contrôle de migration pour suivre les progrès et un résumé des résultats que la migration apporte.

Pourquoi migrer depuis ZXing .NET.MAUI

La décision de migrer depuis ZXing .NET.MAUI est généralement déclenchée par une ou plusieurs conditions concrètes du projet. Il ne s'agit pas de préférences stylistiques, mais de cas où l'architecture ou l'état de maintenance de la bibliothèque empêche de satisfaire une exigence.

MAUI sous Windows non pris en charge : ZXing .NET.MAUI ne dispose d'aucune implémentation de la caméra Windows et aucun projet public n'est prévu pour en développer une. La bibliothèque est conçue autour des API caméra des plateformes iOS et Android. Si un projet MAUI ajoute une cible Windows après la compilation initiale (une pratique courante dans les équipes qui privilégient le mobile), ZXing .NET.MAUI ne pourra pas du tout prendre en charge cette cible. Il n'y a pas de solution de repli, pas de solution de contournement.

Problème de mise au point automatique de l'iPhone 15 Pro : Le suivi des problèmes GitHub pour Redth/ZXing.Net.Maui documente que les appareils iPhone 15 Pro et Pro Max (iPhone16,1 et iPhone16,2) échouent à obtenir une mise au point fiable pour la détection de codes-barres lorsqu'ils utilisent CameraBarcodeReaderView. Le code-barres est visible dans le cadre de la caméra, mais le système de mise au point automatique ne parvient pas à une netteté suffisante pour que le décodeur puisse extraire un résultat. La seule solution documentée consiste à demander à l'utilisateur d'ajuster manuellement la distance entre l'appareil et le code-barres — une instruction qui nécessite une interface utilisateur visible et de la patience de l'utilisateur, et qui ne constitue pas un résultat de production acceptable pour un flux de travail principal.

Fuite de ressources de la caméra : CameraBarcodeReaderView n'implémente pas IDisposable. Lorsque l'utilisateur quitte une page de numérisation, les ressources de la caméra ne sont pas libérées selon un modèle de libération standard. La solution de contournement documentée consiste à définir IsDetecting = false dans OnDisappearing(), ce qui réduit l'impact mais ne libère pas formellement la caméra. Les applications qui naviguent fréquemment entre les pages de numérisation et les autres consomment des ressources qui peuvent se traduire par une augmentation de la mémoire, une décharge de la batterie et des échecs intermittents d'initialisation de l'appareil photo lors du retour à la page de numérisation.

Échec silencieux de la spécification de format : ZXing .NET.MAUI hérite de l'exigence de ZXing.Net de déclarer chaque format de code-barres à scanner avant le début de la numérisation. Les formats omis de BarcodeReaderOptions.Formats sont silencieusement ignorés même lorsqu'ils sont clairement visibles dans le cadre de la caméra. Un utilisateur qui pointe l'appareil vers un format de code-barres que le développeur n'avait pas prévu ne voit aucune erreur : l'application ne détecte tout simplement rien. Dans les environnements où les formats de codes-barres sont contrôlés par des fournisseurs externes, des clients ou des systèmes tiers, cette lacune silencieuse devient un problème de support persistant.

Stabilité avant 1.0 : ZXing.Net.MAUI est publié à v0.7.4 — une version stable sur NuGet mais toujours pré-1.0 sous versionnement sémantique. Les changements de l'API de version mineure restent possibles avant 1.0, la cadence des corrections de bugs dépend de la disponibilité des mainteneurs communautaires, et il n'y a pas de SLA de support commercial. Pour les applications d'entreprise soumises à des audits de dépendance ou des analyses de composition logicielle, une bibliothèque communautaire pré-1.0 sans support commercial pourrait ne pas passer le processus d'approbation.

Le problème fondamental

Le problème structurel est que CameraBarcodeReaderView enferme le développeur dans une boucle d'événements centrée sur la caméra avec une gestion manuelle du cycle de vie et une liste de formats fixes. Pour toute utilisation au-delà de la numérisation de base de la caméra sur iOS et Android avec des formats de code-barres connus, l'architecture atteint sa limite :

// ZXing.Net.MAUI: event loop, format list, lifecycle boilerplate on every scan page
public partial class ScannerPage : ContentPage
{
    public BarcodeReaderOptions ReaderOptions { get; }

    public ScannerPage()
    {
        InitializeComponent();
        ReaderOptions = new BarcodeReaderOptions
        {
            Formats = BarcodeFormats.QRCode |
                      BarcodeFormats.Code128 |
                      BarcodeFormats.Ean13 |
                      BarcodeFormats.UpcA,
            TryHarder = true,
            AutoRotate = true
        };
        BindingContext = this;
    }

    private void OnBarcodesDetected(object sender, BarcodeDetectionEventArgs e)
    {
        MainThread.BeginInvokeOnMainThread(() =>
        {
            foreach (var barcode in e.Results)
                ResultLabel.Text = $"{barcode.Format}: {barcode.Value}";
        });
        CameraView.IsDetecting = false;
    }

    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        CameraView.IsDetecting = false;  // Required — no Dispose() available
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        CameraView.IsDetecting = true;
    }
}

IronBarcode remplace la boucle d'événements par un simple appel asynchrone lors d'un clic sur un bouton, supprime entièrement la configuration du format et élimine la gestion du cycle de vie de la page :

// NuGet: dotnet add package IronBarcode
// IronBarcode: stateless, all platforms, auto-detection, no lifecycle boilerplate
using IronBarCode;

public partial class ScannerPage : ContentPage
{
    public ScannerPage() => InitializeComponent();

    private async void ScanButton_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());
        ResultLabel.Text = results.FirstOrDefault()?.Value ?? "No barcode found";
    }
    // Non OnAppearing / OnDisappearing needed
}
C#

Comparaison des fonctionnalités Code-barres IronBarcode et de ZXing .NET.MAUI

FonctionZXing.Net.MAUICode-barres IronBarcode
État de la publicationStable, pré-1.0 (v0.7.4)Version stable et commerciale
iOS MAUIOui (la mise au point de l'iPhone 15 Pro est défectueuse)Oui
Android MAUIOui (Problèmes de version de l'appareil photo 1.5.0)Oui
Windows MAUINon pris en chargeOui
macOS MAUINon pris en chargeOui
Côté serveur / ASP.NET CoreNonOui
viseur de caméra en directOuiNon (interface utilisateur du système MediaPicker)
Spécification de format requiseOuiNon (détection automatique, plus de 50 formats)
Gestion du cycle de vie des camérasManuel (IsDetecting)Sans objet
implémentation de Dispose()NonNon applicable — apatride
Mise au point automatique de l'iPhone 15 ProCassé (documenté)Sans objet
extraction de codes-barres PDFNonOui
Saisie du chemin de fichierNon (appareil photo uniquement)Oui
Récupération de codes-barres endommagésTryHarder uniquementOui (basé sur l'apprentissage automatique)
génération de codes-barresOui (via ZXing .NET)Oui
Soutien commercialNoneOui
LicenceMIT (gratuit)Commercial

Démarrage rapide

Étape 1 : Supprimer ZXing .NET.Maui.Controls et nettoyer MauiProgram.cs

Supprimez le package NuGet ZXing .NET .MAUI :

dotnet remove package ZXing.Net.Maui.Controls
SHELL

ZXing.Net.MAUI nécessite un appel d'enregistrement unique dans MauiProgram.cs. Supprimez cette ligne si elle est présente :

// Retirer this line from MauiProgram.cs
builder.UseBarcodeReader();
C#

L'importation de using ZXing.Net.Maui; qui supporte cet appel peut également être supprimée de MauiProgram.cs.

Étape 2 : Installer IronBarcode

dotnet add package IronBarcode
SHELL

Le tutoriel sur le lecteur de codes-barres .NET MAUI couvre la configuration complète du projet, y compris les entrées d'autorisation de caméra Info.plist pour iOS et les déclarations d'autorisation AndroidManifest.xml pour Android.

Étape 3 : Mise à jour des espaces de noms et initialisation de la licence

Supprimez les importations d'espace de noms ZXing .NET.MAUI de tous les fichiers :

// Retirer these from every .cs file that imported them
using ZXing.Net.Maui;
using ZXing.Net.Maui.Controls;
C#

Ajoutez l'espace de noms Code-barres IronBarcode et initialisez la clé de licence au démarrage de l'application. L'emplacement approprié est MauiProgram.cs ou App.xaml.cs, avant que toute opération de code-barres ne soit effectuée :

using IronBarCode;

// In MauiProgram.cs CreateMauiApp() or App.xaml.cs constructor
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Exemples de migration de code

Remplacement du contrôle de caméra XAML et du code-behind

Le contrôle XAML CameraBarcodeReaderView et son code-behind de support sont les cibles principales de la migration. Ce remplacement supprime la vue caméra de la mise en page et remplace le modèle de balayage événementiel par une capture asynchrone déclenchée par un bouton.

Approche ZXing .NET.MAUI :

XAML :

<ContentPage xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;assembly=ZXing.Net.MAUI.Controls">
    <StackLayout>
        <zxing:CameraBarcodeReaderView
            x:Name="CameraView"
            Options="{Binding ReaderOptions}"
            BarcodesDetected="OnBarcodesDetected"
            VerticalOptions="FillAndExpand" />
        <Label x:Name="ResultLabel" Text="Scanning..." />
    </StackLayout>
</ContentPage>
XML

Code-behind :

using ZXing.Net.Maui;
using ZXing.Net.Maui.Controls;

public partial class ScannerPage : ContentPage
{
    public BarcodeReaderOptions ReaderOptions { get; }

    public ScannerPage()
    {
        InitializeComponent();
        ReaderOptions = new BarcodeReaderOptions
        {
            Formats = BarcodeFormats.QRCode | BarcodeFormats.Code128 | BarcodeFormats.Ean13,
            TryHarder = true,
            AutoRotate = true
        };
        BindingContext = this;
    }

    private void OnBarcodesDetected(object sender, BarcodeDetectionEventArgs e)
    {
        MainThread.BeginInvokeOnMainThread(() =>
        {
            foreach (var barcode in e.Results)
                ResultLabel.Text = $"{barcode.Format}: {barcode.Value}";
        });
        CameraView.IsDetecting = false;
    }

    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        CameraView.IsDetecting = false;
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        CameraView.IsDetecting = true;
    }
}

Approche IronBarcode :

XAML :

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui">
    <StackLayout>
        <Button Text="Scan Barcode" Clicked="ScanButton_Clicked" />
        <Label x:Name="ResultLabel" Text="Tap to scan..." />
    </StackLayout>
</ContentPage>
XML

Code-behind :

// NuGet: dotnet add package IronBarcode
using IronBarCode;

public partial class ScannerPage : ContentPage
{
    public ScannerPage() => InitializeComponent();

    private async void ScanButton_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());
        var first = results.FirstOrDefault();
        ResultLabel.Text = first != null
            ? $"{first.Format}: {first.Value}"
            : "No barcode found";
    }

    // Non OnAppearing or OnDisappearing required — no camera state exists between scans
}
C#

L'espace de noms XAML zxing:, la liste de formats BarcodeReaderOptions, le wrapper MainThread.BeginInvokeOnMainThread(), et les deux surcharges du cycle de vie sont complètement éliminés. La continuation de la méthode async s'exécute dans le contexte de l'appelant – qui est le thread principal pour un gestionnaire d'événements UI – donc aucun régime explicite de threads n'est nécessaire.

Suppression des spécifications de format

Tous les blocs de configuration BarcodeReaderOptions dispersés sur plusieurs pages ou scénarios de numérisation dans la base de code sont supprimés. Code-barres IronBarcode effectue une détection automatique du format parmi plus de 50 formats pris en charge, sans préconfiguration.

Approche ZXing .NET.MAUI :

// ZXing.Net.MAUI: every anticipated format must be listed explicitly
// Formats not listed here will silently fail to detect
var readerOptions = new BarcodeReaderOptions
{
    Formats = BarcodeFormats.QRCode |
              BarcodeFormats.DataMatrix |
              BarcodeFormats.Aztec |
              BarcodeFormats.Pdf417 |
              BarcodeFormats.Code128 |
              BarcodeFormats.Code39 |
              BarcodeFormats.Ean13 |
              BarcodeFormats.UpcA |
              BarcodeFormats.Codabar,
    TryHarder = true
};

Approche IronBarcode :

// IronBarcode: no format configuration needed
// All formats are detected automatically on every read call
var results = BarcodeReader.Read(imageBytes);

// Optional: restrict to specific formats for performance tuning (not required for correctness)
var options = new BarcodeReaderOptions
{
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};
var tunedResults = BarcodeReader.Read(imageBytes, options);

Des indications de format sont disponibles dans Code-barres IronBarcode pour les scénarios sensibles aux performances, mais elles sont facultatives. Un code-barres dont le format ne figure pas dans un objet d'options sera tout de même détecté et renvoyé.

Suppression de la gestion du cycle de vie IsDetecting

Toutes les surcharges OnAppearing et OnDisappearing qui existent pour basculer CameraView.IsDetecting sont supprimées. Si ces surcharges de méthodes contiennent d'autres logiques de cycle de vie des pages, conservez cette logique et supprimez uniquement les lignes IsDetecting.

Approche ZXing .NET.MAUI :

// Required boilerplate on every page — omitting this causes camera resource leaks
protected override void OnDisappearing()
{
    base.OnDisappearing();
    if (CameraView != null)
        CameraView.IsDetecting = false;
}

protected override void OnAppearing()
{
    base.OnAppearing();
    if (CameraView != null)
        CameraView.IsDetecting = true;
}

Approche IronBarcode :

// Delete both methods if they contain only IsDetecting management.
// If they contain other logic, remove only the IsDetecting lines and keep the rest.
// Code-barres IronBarcode is stateless — there is no camera view running between button taps.
C#

Windows MAUI : Même code, aucune compilation conditionnelle

Avec ZXing .NET.MAUI, l'ajout d'une cible Windows à un projet échouait soit à la compilation, soit nécessitait des stubs spécifiques à la plateforme, car l'implémentation Windows n'avait jamais été écrite. Avec IronBarcode, le même code qui fonctionne sur iOS et Android se compile et s'exécute sur Windows sans modification.

Approche ZXing .NET.MAUI :

// Windows MAUI: either fails to compile or requires a platform-specific stub
// There is no documented path to Windows support
#if ANDROID || IOS
    // ZXing.Net.MAUI scanning — Windows has no implementation
#endif

Approche IronBarcode :

// NuGet: dotnet add package IronBarcode
// Non platform conditionals — same code runs on iOS, Android, Windows, and macOS
private async void ScanButton_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());
    ResultLabel.Text = results.FirstOrDefault()?.Value ?? "No barcode found";
}
C#

Sur Windows, MediaPicker.CapturePhotoAsync() se mappe au sélecteur de fichiers de Windows, permettant à l'utilisateur de sélectionner un fichier image — un comportement approprié pour un environnement de bureau. Le guide des codes-barres MAUI pour ordinateur de bureau couvre en détail la configuration de MAUI sous Windows et macOS.

Lecture des codes-barres PDF (Nouvelle fonctionnalité)

ZXing .NET.MAUI ne dispose pas d'API pour la lecture des codes-barres dans les documents PDF. S'il s'agit d'une nouvelle exigence permise par la migration, le modèle suivant s'applique :

Approche ZXing .NET.MAUI :

// ZXing.Net.MAUI: no API for PDF or file-based barcode reading
// Cannot fulfill this requirement — a separate library is required

Approche IronBarcode :

// NuGet: dotnet add package IronBarcode
using IronBarCode;

// Read all barcodes from all pages of a PDF
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in pdfResults)
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format}{barcode.Value}");

// Read from a user-selected file using MAUI FilePicker
private async void ReadFileButton_Clicked(object sender, EventArgs e)
{
    var file = await FilePicker.PickAsync(new PickOptions
    {
        PickerTitle = "Select image or PDF"
    });
    if (file == null) return;

    var fileResults = BarcodeReader.Read(file.FullPath);
    foreach (var result in fileResults)
        ResultLabel.Text += $"\n{result.Format}: {result.Value}";
}

Le flux de travail complet de lecture des codes-barres PDF — y compris les documents multipages, les métadonnées de numéro de page et les documents de format mixte — est documenté dans le guide de lecture des codes-barres PDF .

Référence de mappage de l'API ZXing .NET.MAUI vers IronBarcode

ZXing.Net.MAUICode-barres IronBarcodeNotes
builder.UseBarcodeReader()Non requisSupprimez de MauiProgram.cs
using ZXing.Net.Maui;using IronBarCode;remplacement d'espace de noms
using ZXing.Net.Maui.Controls;Non requisRetirer
xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;..."Non requisSupprimer du XAML
<zxing:CameraBarcodeReaderView><Button> + MediaPicker.CapturePhotoAsync()Remplacement architectural
Options="{Binding ReaderOptions}"Non requisRetirer la reliure
BarcodesDetected="OnBarcodesDetected"Valeur de retour de BarcodeReader.Read()Événement → retour asynchrone
new BarcodeReaderOptions { Formats = BarcodeFormats.X | ... }Non requisLa détection automatique remplace les listes de format.
BarcodeDetectionEventArgs eIEnumerable<BarcodeResult>Résultats différents
e.ResultsValeur de retour de BarcodeReader.Read()
barcode.Valueresult.ValueMême nom de propriété
barcode.Formatresult.FormatMême nom de propriété
BarcodeFormats.QRCodeBarcodeEncoding.QRCoderenommer l'énumération
BarcodeFormats.Code128BarcodeEncoding.Code128renommer l'énumération
BarcodeFormats.Ean13BarcodeEncoding.EAN13renommer l'énumération
BarcodeFormats.UpcABarcodeEncoding.UPCArenommer l'énumération
CameraView.IsDetecting = falseNon requisSupprimez de OnDisappearing
CameraView.IsDetecting = trueNon requisSupprimez de OnAppearing
API sans fichierBarcodeReader.Read("path/to/image.png")Nouvelle capacité
API d'entrée PDF indisponibleBarcodeReader.Read("document.pdf")Nouvelle capacité
iOS et Android uniquementiOS, Android, Windows, macOS, serveurExtension de la plateforme

Problèmes de migration courants et solutions

Problème n° 1 : Absence d'équivalent en mode viseur électronique

ZXing.Net.MAUI : La CameraBarcodeReaderView affiche un flux continu de la caméra dans la mise en page de la page, montrant à l'utilisateur un aperçu en direct avec un retour de numérisation superposé.

Solution : Code-barres IronBarcode ne propose pas de commande de visée en direct. Le modèle de remplacement utilise MediaPicker.CapturePhotoAsync(), qui ouvre l'interface utilisateur de l'appareil photo système de la plateforme. La caméra système offre sa propre prévisualisation en direct et un indicateur de mise au point. Après que l'utilisateur a capturé l'image et confirmé, le résultat est transmis à BarcodeReader.Read(). Si un viseur intégré persistant dans l'application est un élément UX requis qui ne peut pas être remplacé par l'interface utilisateur de l'appareil photo système, la couche d'intégration de la caméra doit être construite séparément en utilisant Microsoft.Maui.Media ou les API de caméra de la plateforme, avec Code-barres IronBarcode gérant l'étape de décodage.

Problème n° 2 : Déclarations d'autorisation de prise de vue

ZXing .NET.MAUI : Les autorisations d'accès à la caméra ont peut-être été déclarées dans le projet dans le cadre des instructions d'installation de ZXing .NET.MAUI.

Solution : Les autorisations de caméra restent nécessaires pour l'appel MediaPicker.CapturePhotoAsync() que le modèle MAUI d'IronBarcode utilise. Vérifiez que NSCameraUsageDescription est présent dans Info.plist pour iOS et que <uses-permission android:name="android.permission.CAMERA" /> est présent dans AndroidManifest.xml pour Android. Code-barres IronBarcode lui-même n'accède pas directement à la caméra — il traite les images — mais l'appel MediaPicker qui lui fournit des images nécessite une autorisation de la caméra. La configuration des autorisations est abordée dans le tutoriel sur le lecteur de codes-barres .NET MAUI .

Problème n° 3 : La compilation Windows réussit désormais là où elle échouait auparavant.

ZXing .NET.MAUI : Les projets qui tentaient d'inclure une cible Windows avec ZXing .NET.MAUI rencontraient généralement des erreurs de compilation ou nécessitaient que la bibliothèque soit exclue de la compilation Windows via une logique MSBuild conditionnelle.

Solution : Après avoir supprimé ZXing .NET.MAUI et installé IronBarcode, la compilation de MAUI pour Windows réussit sans aucune condition de plateforme. Supprimez tout #if ANDROID || Les gardes d'iOS qui entouraient les appels ZXing .NET.MAUI étaient destinés à les exclure de la compilation Windows. L'appel BarcodeReader.Read() d'IronBarcode se compile et s'exécute sur tous les frameworks cibles. Si MediaPicker.CapturePhotoAsync() a été exclu des builds Windows, cette exclusion peut également être supprimée — la méthode est prise en charge sur Windows MAUIet se mappe au sélecteur de fichiers. Vérifiez que la solution complète se compile correctement pour tous les frameworks cibles après la suppression des conditions.

Problème 4 : Références à l'énumération BarcodeFormats

ZXing.Net.MAUI : L'énumération BarcodeFormats de ZXing.Net.Maui est largement utilisée dans les configurations BarcodeReaderOptions. Une fois le paquet supprimé, toute référence restante provoque des erreurs de compilation.

Solution : Supprimez tous les blocs d'initialisation BarcodeReaderOptions qui étaient utilisés pour configurer les listes de formats. Code-barres IronBarcode ne nécessite pas de spécification de format pour fonctionner correctement. Si un code restant fait référence à des valeurs BarcodeFormats pour les besoins de journalisation, d'affichage ou de comparaison, remplacez-les par des valeurs BarcodeEncoding de l'espace de noms IronBarCode. Exécutez grep -rn "BarcodeFormats\." --include="*.cs" . pour trouver toutes les références restantes après la suppression du package.

Liste de contrôle de migration ZXing .NET.MAUI

Tâches préalables à la migration

Avant d'apporter des modifications, vérifiez l'ensemble des utilisations de ZXing .NET.MAUI dans le code source :

grep -rn "ZXing.Net.Maui" --include="*.cs" --include="*.xaml" .
grep -rn "CameraBarcodeReaderView" --include="*.cs" --include="*.xaml" .
grep -rn "BarcodeDetectionEventArgs" --include="*.cs" .
grep -rn "BarcodeReaderOptions" --include="*.cs" .
grep -rn "BarcodeFormats\." --include="*.cs" .
grep -rn "IsDetecting" --include="*.cs" .
grep -rn "UseBarcodeReader" --include="*.cs" .
grep -rn "zxing:" --include="*.xaml" .
grep -rn "e\.Results" --include="*.cs" .
SHELL

Documentez toutes les pages numérisées identifiées par l'audit. Notez quelles surcharges OnAppearing et OnDisappearing contiennent uniquement une gestion IsDetecting (à supprimer) par rapport à celles qui contiennent d'autres logiques (à modifier partiellement). Notez toutes les instances BarcodeReaderOptions qui peuvent contenir des listes de formats utilisées au-delà de la configuration de détection.

Tâches de mise à jour du code

  1. Supprimez le package NuGet ZXing.Net.Maui.Controls du fichier de projet
  2. Supprimez builder.UseBarcodeReader() de MauiProgram.cs
  3. Supprimez les importations d'espaces de noms using ZXing.Net.Maui; et using ZXing.Net.Maui.Controls; de tous les fichiers
  4. Installez le package NuGet IronBarcode
  5. Ajoutez using IronBarCode; à tous les fichiers qui utiliseront la lecture des codes-barres
  6. Ajoutez IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; au démarrage de l'application
  7. Supprimez la déclaration d'espace de noms xmlns:zxing de tous les fichiers XAML
  8. Supprimez tous les éléments <zxing:CameraBarcodeReaderView> des fichiers XAML
  9. Remplacez la vue de l'appareil photo supprimée par un contrôle <Button> dans chaque fichier XAML
  10. Ajoutez Clicked="ScanButton_Clicked" à chaque bouton de numérisation
  11. Supprimez les méthodes de gestion d'événements OnBarcodesDetected de tous les fichiers de code-behind
  12. Ajoutez des méthodes async void ScanButton_Clicked implémentant MediaPicker.CapturePhotoAsync() + BarcodeReader.Read() à chaque page
  13. Supprimez tous les blocs d'initialisation BarcodeReaderOptions
  14. Supprimez toutes les surcharges OnDisappearing et OnAppearing qui existent uniquement pour la gestion de IsDetecting
  15. Supprimez les lignes IsDetecting de toute surcharge OnDisappearing et OnAppearing qui contiennent d'autres logiques
  16. Supprimez toute directive #if ANDROID || Les mécanismes de compilation conditionnelle d'iOS qui isolaient ZXing .NET.MAUI des compilations Windows
  17. Remplacez toutes les références d'énumération BarcodeFormats.X restantes par leurs équivalents BarcodeEncoding.X

Test de post-migration

Une fois la migration compilée sans problème, vérifiez les points suivants :

  • Android MAUI : le bouton de scan ouvre l'appareil photo du système, prend une photo et affiche un code-barres correct ; veuillez vérifier avec le guide de scan Android.
  • iOS MAUI : le même processus fonctionne sur iOS, y compris sur l'iPhone 15 Pro où le problème de mise au point automatique s'était produit auparavant.
  • Windows MAUI : la version Windows se compile sans erreur et le bouton de numérisation ouvre le sélecteur de fichiers et renvoie un résultat correct à partir d'une image sélectionnée.
  • Formats : testez la numérisation de codes-barres dans des formats qui n'étaient pas inclus dans l'ancienne liste BarcodeFormats pour confirmer la détection automatique
  • Navigation entre les pages : naviguez plusieurs fois entre la page de numérisation et la page précédente et vérifiez qu'aucun problème de mémoire ou d'initialisation de l'appareil photo ne survient.
  • Lecture de PDF : si la migration ajoute la lecture des codes-barres PDF comme nouvelle fonctionnalité, vérifiez que les PDF multipages renvoient des résultats avec des métadonnées de numéro de page correctes.

Principaux avantages de la migration vers IronBarcode

Couverture étendue des plateformes : après la migration, l'application prend en charge les cibles MAUI Windows et macOS en plus d'iOS et d'Android, le tout à partir du même package et du même modèle d'analyse. Les projets qui nécessitaient auparavant des modules spécifiques à chaque plateforme ou qui excluaient Windows des fonctionnalités de codes-barres bénéficient désormais d'une couverture complète sans code supplémentaire.

Fiabilité du matériel de dernière génération : L'approche de capture d'image par MediaPicker et BarcodeReader.Read() n'est pas affectée par le modèle de mise au point automatique CameraBarcodeReaderView qui échoue sur le matériel iPhone 15 Pro et Pro Max. La caméra du système gère la mise au point indépendamment, et Code-barres IronBarcode traite l'image capturée après que l'utilisateur a confirmé la prise de vue.

Élimination de la gestion des ressources de la caméra : Supprimer CameraBarcodeReaderView supprime toute catégorie de bugs de fuite des ressources de la caméra. Il n'y a pas d'état IsDetecting à suivre, ni de modèle standard OnAppearing et OnDisappearing à maintenir sur chaque page de numérisation, et aucune accumulation de ressources de la caméra à travers les cycles de navigation. L'API sans état rend les pages analysées indiscernables de n'importe quelle autre page en termes de cycle de vie des ressources.

Couverture des formats sans configuration : tout format de code-barres rencontré sur le terrain est détecté automatiquement. Les échecs de numérisation causés par des entrées manquantes dans une liste BarcodeFormats sont éliminés. Les demandes d'assistance des utilisateurs dont les codes-barres ont été ignorés sans explication parce qu'un fournisseur a modifié le format de ses étiquettes cessent.

Traitement des fichiers et des documents : La migration permet de lire les codes-barres des documents PDF, des fichiers image et des flux d'octets sans bibliothèque supplémentaire. Les flux de travail qui étaient auparavant hors du cadre de ZXing.Net.MAUI — lire les codes-barres à partir de factures téléchargées, traiter des billets numériques, numériser par lots des répertoires d'images — deviennent disponibles via le même appel BarcodeReader.Read() utilisé pour les captures par caméra.

Stabilité de niveau production : Code-barres IronBarcode est livré en tant que version commerciale stable avec un rythme de développement actif, un support commercial et des mises à jour régulières suivant les versions de .NET . Les audits de dépendances, l'analyse de la composition logicielle et les processus d'approbation Enterprise utilisent une bibliothèque prise en charge avec un engagement de maintenance documenté plutôt qu'un package de pré-version communautaire.

Veuillez noter: ZXing.NET est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié à, approuvé par ou parrainé par ZXing.NET. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.
Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.

...
Lire la suite

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise