IRONSOFTWAREHOME
MIT ANDEREN KOMPONENTEN VERGLEICHEN

ZXing.Net.MAUI vs IronBarcode: C# MAUI Barcode Comparison 2026

Curtis Chau
Curtis Chau
Updated: 1. August 2026

ZXing.Net.Maui.Controls v0.7.4. Stabil auf NuGet, aber immer noch vor 1.0. Windows MAUI-Scannen nicht unterstützt (nur Generierung). Auto-Fokus des iPhone 15 Pro dokumentiert als betroffen (Issue #260). Kameraressourcenverlust ohne Dispose() (Issue #164). Dies ist die Bibliothek, zu der die meisten .NET MAUI Entwickler zuerst greifen – und die am häufigsten Produktionsprobleme aufdeckt, bevor ein Projekt überhaupt ausgeliefert wird.

ZXing .NET.MAUI verstehen

ZXing .NET.MAUI ist eine von der Community gepflegte .NET MAUI Portierung der ZXing .NET Barcode-Bibliothek, entwickelt und veröffentlicht von Jon Dick (GitHub: Redth) unter der MIT-Lizenz. Es bietet ein XAML-Kamerasteuerelement, CameraBarcodeReaderView, das einen Live-Barcode-Scannen-Sucher in MAUI-Seiten einbettet. Entwickler verknüpfen ein BarcodesDetected-Ereignis, um Scanergebnisse zu erhalten, während die Kamera Frames erfasst. Die Bibliothek erbt die vollständige Barcode-Format-Engine von ZXing.Net, einschließlich seines BarcodeFormats-Enums und BarcodeReaderOptions-Konfigurationsmodells.

Das Paket ZXing.Net.Maui.Controls wird in MauiProgram.cs über builder.UseBarcodeReader() registriert und ist auf die mobile Kameraleitung für iOS und Android ausgelegt. Die Bibliothek wird von keiner kommerziellen Organisation unterstützt, verfügt über keine Service-Level-Vereinbarung (SLA) und bietet keine kostenpflichtige Supportstufe an. Seine Version 0.7.4 ist eine stabile NuGet-Version, bleibt jedoch unter pre-1.0 unter semantischer Versionierung.

Wichtigste architektonische Merkmale von ZXing .NET.MAUI:

  • Pre-1.0 Status: Das NuGet-Paket ist bei v0.7.4 — stabil, aber immer noch vor 1.0. API-Änderungen in der Minder-Version sind vor 1.0 möglich, die Bug-Fix-Frequenz hängt vom Community-Maintainer ab, und es gibt keinen kommerziellen Support-Vertrag.
  • iOS- und Android-Scannen: Die Bibliothek ist auf Plattform-Kamera-APIs für iOS und Android aufgebaut. Windows MAUIunterstützt nur die Generierung — Kamera-Scannen ist nicht implementiert. Mac Catalyst ist in der Ziellistenrahmen enthalten, aber Scannen ist nicht offiziell dokumentiert.
  • Kontinuierlicher Kamerasucher: CameraBarcodeReaderView ist ein Live-Kamerasteuerelement, das kontinuierlich läuft, solange die Seite sichtbar ist. Es beansprucht Bildschirmfläche und erfordert ein Seitenlebenszyklusmanagement.
  • Keine Dispose()-Implementierung: Das Steuerelement implementiert IDisposable nicht. Kameraresourcen werden bei der Seitennavigation nicht formal freigegeben, was einen manuellen IsDetecting = false-Workaround in OnDisappearing() erfordert (GitHub-Issue #164).
  • iPhone 15 Pro Autofokusproblem: GitHub-Issue #260 dokumentiert, dass iPhone 15 Pro und Pro Max-Geräte (Hardware-Identifier iPhone16,1 und iPhone16,2) keinen zuverlässigen Fokus für die Barcode-Erkennung erreichen. Derzeit ist kein programmatische Korrektur verfügbar.
  • Android-Kamera-Kompatibilitätsproblem: GitHub-Issue #275 verfolgt Build-Fehler durch Kompatibilitätskonflikte mit AndroidX Camera 1.5.0, mit einem Workaround, die Kamerapakete auf 1.4.x festzulegen oder das Projekt minSdkVersion zu erhöhen.
  • Erbt ZXing.Net Formatspezifikation: Jede Scansitzung erfordert eine explizite Deklaration, welche BarcodeFormats-Werte gescannt werden sollen. Formate, die nicht in BarcodeReaderOptions.Formats aufgeführt sind, werden stumm ignoriert, auch wenn sie im Kameraframe sichtbar sind.
  • Architektur nur für Kameras: Die Bibliothek verfügt über keine Dateieingabe-API, keine Stream-Lese-API und keine PDF-Barcode-Extraktionsfunktion. Alle Scans müssen über den Live-Kamerasucher erfolgen.

Die CameraBarcodeReaderView-Architektur

Das CameraBarcodeReaderView-Steuerelement ist die zentrale Komponente von ZXing.Net.MAUI. Es wird in XAML deklariert und über eine BarcodeReaderOptions-Verbindung konfiguriert. Jede Seite, die es verwendet, muss OnAppearing- und OnDisappearing-Überschreibungen implementieren, um den IsDetecting-Zustand zu verwalten:

<!-- ZXing.Net.Maui XAML: requires xmlns declaration and lifecycle wiring -->
<ContentPage xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;assembly=ZXing.Net.MAUI.Controls">
    <zxing:CameraBarcodeReaderView
        x:Name="CameraView"
        Options="{Binding ReaderOptions}"
        BarcodesDetected="OnBarcodesDetected" />
</ContentPage>
XML
// Toggling IsDetecting in lifecycle overrides is the documented pattern
protected override void OnDisappearing()
{
    base.OnDisappearing();
    if (CameraView != null)
        CameraView.IsDetecting = false;  //NeinIDisposable on the control
}

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

Jede Scanseite in einer ZXing .NET.MAUI-Anwendung enthält diesen Lebenszyklus-Boilerplate-Code. Das Fehlen von IDisposable bedeutet, dass der Kamerazustand manuell über das IsDetecting-Flag anstelle des standardmäßigen Dispose-Musters verwaltet werden muss.

IronBarcode verstehen

IronBarcode ist eine kommerziell unterstützte .NET Barcode-Bibliothek, die von Iron Software entwickelt wurde. Es bietet sowohl Barcode-Lesen als auch -Erzeugung über eine statische API, BarcodeReader.Read(), die Bildbytes, Dateipfade, Streams und PDF-Dokumente akzeptiert. In einem MAUI-Kontext kombiniert IronBarcode sich mit MAUI's eingebautem MediaPicker, um Bilder durch die Systemkamera zu erfassen, dann das resultierende Bild nach der Aufnahme zu verarbeiten, anstatt einen kontinuierlichen Kamerastream zu verarbeiten.

Die Bibliothek zielt über dasselbe Paket und dieselben Codepfade auf alle MAUI-Plattformen ab – iOS, Android, Windows und macOS. Keine plattformbezogene Dienstregistrierung ist in MauiProgram.cs erforderlich, es wird kein Kamerasichtsteuerung in XAML eingebettet und keine Lebenszyklusverwaltung benötigt, da IronBarcode keinen laufenden Kamerazustand aufrechterhält.

Hauptmerkmale von IronBarcode:

  • Stabile kommerzielle Version: Veröffentlicht als produktionsreifes NuGet Paket mit kommerziellem Support, SLA und regelmäßigem Release-Zyklus.
  • Alle MAUI-Plattformen: Unterstützt iOS-, Android-, Windows- und macOS-MAUI-Ziele mit einem einzigen Paket und einem einzigen Codemuster.
  • Zustandslose API: BarcodeReader.Read() ist ein statischer Methodenaufruf. Zwischen den Scans laufen keine Hintergrundprozesse, es werden keine Lebenszyklus-Hooks benötigt und es sammeln sich keine Kameraressourcen über die Seitennavigation hinweg an. Automatische Erkennung aller Formate: Erkennt automatisch über 50 Barcode-Formate ohne Formatliste. Zum Scannen unbekannter Formate ist keine Konfiguration erforderlich.
  • Datei- und PDF-Lesen: Liest Barcodes nativ aus Dateipfaden, Byte-Arrays, Datenströmen und PDF-Dokumenten und deckt damit Szenarien ab, die Live-Kamera-Bibliotheken nicht abdecken können.
  • ML-gestützte Wiederherstellung beschädigter Barcodes: Wendet Modelle des maschinellen Lernens an, um Barcodes aus beschädigten, teilweise verdeckten oder qualitativ minderwertigen Bildern wiederherzustellen, was mit Schwellenwertalgorithmen nicht möglich ist.
  • Barcode-Generierung: Erzeugt alle gängigen 1D- und 2D-Barcode-Formate als Bilder mit konfigurierbarer Größe, Farbe und Rändern.
  • Plattformübergreifende Bereitstellung: Das gleiche Paket läuft in ASP.NET Core, WPF, WinForms, Konsolenanwendungen, Azure Functions und Docker-Containern parallel zu MAUI.

Funktionsvergleich

Die folgende Tabelle hebt die wichtigsten Unterschiede zwischen ZXing .NET.MAUI und IronBarcode hervor:

FeatureZXing.Net.MAUIIronBarcode
VeröffentlichungsstatusStabil, aber vor 1.0 (v0.7.4)Stabile, kommerzielle Version
Windows, Linux, macOS, Docker, Azure, AWS.iOS, Android-Scannen (Windows nur Generierung)iOS, Android, Windows, macOS, Server
Formatvorgabe erforderlichJaNein (automatische Erkennung)
Kamera-RessourcenmanagementManuell (IsDetecting)Nicht zutreffend – staatenlos
PDF-Barcode-ExtraktionNicht verfügbarJa
LizenzMIT (kostenlos, Community)Kommerziell
Kommerzielle UnterstützungNoneJa

Detaillierter Funktionsvergleich

FeatureZXing.Net.MAUIIronBarcode
Plattform
iOS MAUIJa (iPhone 15 Pro Fokus-Issue #260)Ja
Android MAUIJa (Kamera 1.5.0 Build-Issue #275)Ja
Windows MAUINur Generierung — Scannen nicht implementiertJa
macOS MAUIMac Catalyst angezielt; Scannen nicht offiziell dokumentiertJa
ASP.NET Core / ServerNeinJa
WPF/WinFormsNeinJa
Azure Functions / DockerNeinJa
.NET Framework 4.6.2+NeinJa
Lektüre
automatische FormaterkennungNein – Formate müssen angegeben werden.Ja (über 50 Formate)
Dateipfad-EingabeNur über ZXing .NET CoreJa
Stream-EingabeNur über ZXing .NET CoreJa
PDF-Barcode-ExtraktionNeinJa
Wiederherstellung beschädigter BarcodesNur für TryHarderJa (ML-gestützt)
Kameraintegration
Live-SuchersteuerungJaNein (MediaPicker-Systembenutzeroberfläche)
Lebenszyklusmanagement erforderlichJa (Erkennung)Nein
Dispose()-ImplementierungNeinNicht zutreffend
iPhone 15 Pro AutofokusBetroffen (GitHub-Issue #260)Nicht zutreffend
Generation
Barcode-GenerierungJa (über ZXing .NET)Ja
Wartung
VeröffentlichungsstatusStabil, aber vor 1.0 (v0.7.4)Produktionsbereit
Kommerzielle UnterstützungNoneJa
API-StabilitätsgarantiePre-1.0 — Minder-Version-Änderungen möglichJa
LizenzMIT (kostenlos)Kommerziell

Plattformunterstützung

Die Plattformabdeckung ist ein struktureller Unterschied zwischen ZXing .NET.MAUI und IronBarcode , da die beiden Bibliotheken auf grundlegend verschiedenen Annahmen darüber basieren, wo .NET MAUI Anwendungen ausgeführt werden.

ZXing .NET.MAUI-Ansatz

ZXing.Net.MAUI ist auf Plattform-Kamera-APIs für iOS und Android aufgebaut. Windows MAUIunterstützt nur Barcode-Generierung — Kamera-Scannen ist nicht implementiert und steht nicht auf einer öffentlichen Roadmap. Dies spiegelt die architektonische Entscheidung wider, die Bibliothek um ein Live-Kamera-Sucher-Steuerelement zu bauen, dessen Plattformimplementierungen nur für mobile Betriebssysteme geschrieben wurden.

Ein MAUI-Projekt, das auf net8.0-windows10.0.19041.0 abzielt, erhält keine Barcode-Scannen-Funktionalität von ZXing.Net.MAUI. Mac Catalyst ist in der Ziellistenrahmen enthalten, jedoch ist das Scannen auf diesem Ziel nicht offiziell dokumentiert. Teams, die ein Projekt mit nur mobilen Zielen starten und später eine Windows- oder macOS-Anforderung hinzufügen, werden feststellen, dass ZXing.Net.MAUI auf diesen Zielen nicht scannen kann. Der iOS-Support selbst trägt eine Einschränkung: GitHub Issue #260 dokumentiert, dass iPhone 15 Pro und Pro Max-Geräte von einem Auto-Fokus-Issue betroffen sind, das eine zuverlässige Erkennung verhindert.

IronBarcode Ansatz

IronBarcode unterstützt alle MAUI-Zielframeworks – iOS, Android, Windows und macOS – mit demselben Paket und demselben Codemuster. Der MediaPicker + BarcodeReader.Read()-Ansatz passt sich natürlich jeder Plattform an: auf Mobilgeräten ruft MediaPicker.CapturePhotoAsync() die Gerätekamera auf; Unter Windows wird es dem Dateiauswahldialog zugeordnet, was für eine Desktop-Umgebung ein angemessenes Verhalten darstellt. Es ist kein plattformspezifischer Code, keine bedingte Kompilierung und keine Registrierung von Plattformdiensten erforderlich.

Das MAUI-Desktop-Barcode-Muster für Windows und macOS wird vom selben Paket abgedeckt, das auch das Scannen auf Mobilgeräten übernimmt. Der gleiche BarcodeReader.Read()-Aufruf, der auf einem Android-Gerät läuft, läuft auch in einem ASP.NET Core-Endpunkt, einer WinForms-Desktopanwendung oder einer Azure-Funktion — das Bereitstellungsziel beeinflusst die API nicht.

Kameraintegration und Lebenszyklus

Die beiden Bibliotheken vertreten gegensätzliche architektonische Positionen hinsichtlich der Funktionsweise des Kamerazugriffs in einer MAUI-Anwendung.

ZXing .NET.MAUI-Ansatz

CameraBarcodeReaderView ist ein persistentes Kamerasteuerelement, das in der XAML-Seite eingebettet ist. Es beginnt mit der Verarbeitung von Kameraframes, wenn IsDetecting auf true gesetzt ist, und stoppt, wenn es auf false gesetzt ist. Das Fehlen einer Dispose()-Implementierung bedeutet, dass Kameraresourcen nicht durch das standardmäßige IDisposable-Muster freigegeben werden, wenn der Benutzer wegnavigiert. Die dokumentierte Abschwächung besteht darin, IsDetecting = false in OnDisappearing() zu setzen und es in OnAppearing() wiederherzustellen:

// ZXing.Net.MAUI: toggle IsDetecting in page lifecycle overrides
protected override void OnDisappearing()
{
    base.OnDisappearing();
    CameraView.IsDetecting = false;
}

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

Dieses Muster muss auf jeder Seite wiederholt werden, die einen Scanner enthält. Anwendungen, die häufig zu und von Scan-Seiten navigieren, können Kameraressourcen ansammeln, die nicht vollständig freigegeben wurden, was in GitHub Issue #164 verfolgt wird, zusammen mit Berichten über Speicherwachstum und sporadische Kamerainitialisierung bei Rückkehr. Das Autofokusproblem beim iPhone 15 Pro (GitHub-Issue #260) ist ein separates Anliegen in der Kamera-Integrationsschicht: Die Kameraansicht rendert den Barcode klar, aber das Autofokussystem arretiert nicht scharf genug für die Erkennung auf iPhone16,1- und iPhone16,2-Hardware. Das dokumentierte Workaround ist, dem Benutzer zu sagen, er solle den Abstand zwischen dem Gerät und dem Barcode manuell anpassen.

IronBarcode Ansatz

IronBarcode bettet keine Kamerasteuerung in das XAML-Layout ein. Stattdessen öffnet der MediaPicker.CapturePhotoAsync()-Aufruf die System-Kamera-UI, wenn der Benutzer einen Button drückt. Die Systemkamera übernimmt Fokus, Belichtung und Autofokus unabhängig. Wenn der Benutzer die Aufnahme bestätigt, wird das resultierende Bild als Byte-Array an BarcodeReader.Read() übergeben:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

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());
    foreach (var barcode in results)
        Console.WriteLine($"{barcode.Format}: {barcode.Value}");
}

//NeinOnAppearing or OnDisappearing needed — no camera state to manage
C#

Das .NET MAUI Barcode-Scanner-Tutorial behandelt die vollständige Projekteinrichtung für dieses Muster, einschließlich der Berechtigungskonfiguration für iOS und Android. Da es keine persistente Kameraansicht gibt, gibt es keine Ressource freizugeben, keinen Zustand umzuschalten und keinen Lebenszyklus-Boilerplate-Code, der seitenübergreifend gepflegt werden muss.

Formatspezifikation

Die Art und Weise, wie eine Bibliothek die Barcode-Formaterkennung handhabt, hat direkte Auswirkungen auf die Zuverlässigkeit des Scannens im realen Einsatz.

ZXing .NET.MAUI-Ansatz

ZXing .NET.MAUI erbt die ZXing .NET -Formatspezifikationsanforderung. Bevor das Scannen beginnt, muss der Entwickler BarcodeReaderOptions.Formats mit einem Bitmasken der BarcodeFormats-Enum-Werte, die erkannt werden sollen, befüllen. Formate, die nicht in dieser Liste enthalten sind, werden nicht erkannt – stillschweigend, ohne Fehlermeldung oder Warnung:

// ZXing.Net.MAUI: formats must be declared explicitly
// Formats not listed here are not detected
ReaderOptions = new BarcodeReaderOptions
{
    Formats = BarcodeFormats.QRCode |
              BarcodeFormats.Code128 |
              BarcodeFormats.Ean13 |
              BarcodeFormats.UpcA,
    TryHarder = true,
    AutoRotate = true
};

Wenn ein Benutzer die Kamera auf einen GS1 DataBar, einen Aztec-Code, einen MaxiCode oder ein beliebiges Format richtet, das nicht in den Optionen deklariert ist, gibt der Scan kein Ergebnis zurück, ohne einen Fehler zu erzeugen. Die Kamera rendert den Barcode und es wird kein Resultat an die Anwendung zurückgegeben. In einer kontrollierten Umgebung – einem Lager, in dem jeder Artikel mit einem Code128-Etikett versehen ist – ist dies zu bewältigen. In Bereitstellungen, in denen Barcode-Formate von externen Lieferanten, Kunden oder Drittsystemen bestimmt werden, wird das Fehlen eines Fallback-Pfads zu einem wiederkehrenden Support-Problem.

IronBarcode Ansatz

IronBarcode führt eine automatische Formaterkennung für alle unterstützten Formate ohne jegliche Vorkonfiguration durch. BarcodeReader.Read() analysiert das Bild und gibt Ergebnisse für jeden Barcode zurück, den es identifiziert, unabhängig vom Format. Keine BarcodeReaderOptions-Liste ist erforderlich:

// IronBarcode: no format specification needed
// All 50+ formats detected automatically
var results = BarcodeReader.Read(imageBytes);
foreach (var barcode in results)
    Console.WriteLine($"{barcode.Format}: {barcode.Value}");

Wenn eine Leistungsoptimierung für ein kontrolliertes Szenario erforderlich ist, in dem nur ein Format erwartet wird, können Formathinweise optional übergeben werden – sie sind jedoch niemals für die korrekte Erkennung erforderlich. Ein Barcode in einem vom Entwickler nicht vorhergesehenen Format wird dennoch erkannt und zurückgegeben.

Datei- und PDF-Verarbeitung

Neben dem Scannen mit Live-Kameras beinhalten viele Produktions-Barcode-Workflows das Lesen von gespeicherten Dokumenten – Versandrechnungen, digitalen Tickets, hochgeladenen Bildern und PDF-Anhängen.

ZXing .NET.MAUI-Ansatz

ZXing .NET.MAUI ist eine Kamerasteuerungsbibliothek. Es verfügt über keine API zum Lesen von Barcodes aus Dateipfaden, direkt aus dem Speicher übergebenen Byte-Arrays oder PDF-Dokumenten. Das CameraBarcodeReaderView-Steuerelement erfordert eine Live-Kamerafeed; Es gibt keine statische Methode, die einen Dateipfad akzeptiert und Barcode-Ergebnisse zurückgibt. Teams, die Barcodes aus hochgeladenen PDFs, Dokumentenmanagementsystemen oder Stapelbildverarbeitungswarteschlangen lesen müssen, können ZXing .NET.MAUI für diese Szenarien nicht verwenden und müssen eine separate Bibliothek einführen.

IronBarcode Ansatz

IronBarcode liest Barcodes aus jeder Quelle durch die gleiche BarcodeReader.Read()-Methode. Es akzeptiert Dateipfade, Byte-Arrays, Datenströme und PDF-Dokumente. PDF-Parsing ist nativ – IronBarcode verarbeitet PDF-Seiten direkt ohne einen Zwischenschritt der Rasterisierung:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

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

// Read from a user-selected file using MAUI FilePicker
var file = await FilePicker.PickAsync();
if (file != null)
{
    var fileResults = BarcodeReader.Read(file.FullPath);
    foreach (var result in fileResults)
        ResultLabel.Text += $"\n{result.Format}: {result.Value}";
}

Der vollständige Workflow zum Lesen von PDF-Barcodes, einschließlich mehrseitiger Dokumente und gemischter Barcode-Formate über mehrere Seiten hinweg, ist im Leitfaden "Barcodes aus PDF lesen" dokumentiert. Dies umfasst Versandrechnungen, digitale Tickets, Dokumentenmanagement-Workflows und Stapelverarbeitungsszenarien, die die reine Kameraarchitektur von ZXing .NET.MAUI nicht abdecken kann.

API-Mapping-Referenz

ZXing.Net.MAUIIronBarcodeNotizen
builder.UseBarcodeReader()Nicht erforderlichEntfernen aus MauiProgram.cs
xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;..."Nicht erforderlichXAML-Namespace-Deklaration entfernen
<zxing:CameraBarcodeReaderView>Ersetzen mit <Button> + MediaPickerArchitektonischer Wandel
Options="{Binding ReaderOptions}"Nicht erforderlichKein Optionsobjekt erforderlich
BarcodesDetected="OnBarcodesDetected"BarcodeReader.Read() RückgabewertEreignis → Methodenrückgabe
new BarcodeReaderOptions { Formats = BarcodeFormats.X | ... }Nicht erforderlichDie automatische Erkennung ersetzt dies.
BarcodeDetectionEventArgs eIEnumerable<BarcodeResult>Unterschiedliches Ergebnislieferungsmodell
e.ResultsRückgabewert von BarcodeReader.Read()
barcode.Valueresult.ValueGleicher Eigenschaftsname
barcode.Formatresult.FormatGleicher Eigenschaftsname
BarcodeFormats.QRCodeBarcodeEncoding.QRCodeEnum umbenennen
BarcodeFormats.Code128BarcodeEncoding.Code128Enum umbenennen
BarcodeFormats.Ean13BarcodeEncoding.EAN13Enum umbenennen
CameraView.IsDetecting = false (OnDisappearing)Nicht erforderlich – Methode entfernenIronBarcode ist zustandslos
CameraView.IsDetecting = true (OnAppearing)Nicht erforderlich – Methode entfernenIronBarcode ist zustandslos
API ohne DateieingabeBarcodeReader.Read("path/to/file.png")Neue Fähigkeit
Keine PDF-APIBarcodeReader.Read("document.pdf")Neue Fähigkeit

Wenn Teams den Wechsel von ZXing .NET.MAUI zu IronBarcode erwägen

Mehrere konkrete Szenarien führen zu der Entscheidung, IronBarcode als Ersatz für ZXing .NET.MAUI zu evaluieren. Hierbei handelt es sich um Projekt- und Produktbedingungen, nicht um Implementierungspräferenzen.

Windows MAUI-Anforderungen

Der häufigste Auslöser für eine erneute Bewertung ist das Hinzufügen eines Windows MAUI-Ziels zu einem Projekt, das ursprünglich nur für iOS und Android konzipiert war. Die Teams von MAUI beginnen häufig mit mobilen Versionen und erweitern diese dann auf Desktop-Ziele, wenn sich die Anforderungen ändern. Wenn diese Erweiterung erfolgt, bietet ZXing .NET.MAUI keine Lösung – die Windows-Plattform ist nicht implementiert und auch nicht in der öffentlichen Roadmap vorgesehen. Das Team muss entweder akzeptieren, dass Barcode-Scanning unter Windows nicht verfügbar sein wird, oder die Bibliothek ersetzen. Da der Austausch in jedem Fall eine strukturelle Änderung des Scanmusters mit sich bringt, nehmen die Teams die Änderung in der Regel für alle Plattformen gleichzeitig vor.

Hardwarekompatibilität der aktuellen Generation

Das iPhone 15 Pro Autofokus-Problem (GitHub-Issue #260) ist eine echte Überlegung für jedes Team, das einen Barcode-Scanner an iOS-Benutzer liefert. iPhone 15 Pro und Pro Max sind häufig im Verbrauchersegment, das eine polierte Anwendungs-Erfahrung erwartet, und ein Workaround, der von Benutzern verlangt, den Abstand zu einem Barcode anzupassen, ist im Vergleich zu älterer iPhone-Hardware eine auffällige UX-Regression. Teams, die dieses Problem in der QA aufdecken oder Support-Berichte von iPhone 15 Pro-Nutzern erhalten, stehen vor der Entscheidung, auf einer Bibliothek zu bleiben, für die derzeit keine Lösung verfügbar ist, oder zu einem Ansatz zu wechseln, der nicht vom Kamera-Sucher-Fokusmodell betroffen ist.

Datei- und Dokumentenverarbeitung

Die Anforderungen an das Barcode-Scannen beschränken sich selten auf die Live-Kameraaufnahme. Anwendungen, die als Inventarscanner beginnen, werden häufig erweitert und umfassen dann das Lesen von Barcodes aus hochgeladenen PDFs, die Verarbeitung von Versandrechnungen oder die Bearbeitung digitaler Tickets aus E-Mail-Anhängen. ZXing .NET.MAUI verfügt über keine API für diese Szenarien. Wenn eine Produktanforderung im Backlog landet, die das Lesen eines Barcodes aus einer Datei oder einem Dokument beinhaltet, müssen Teams, die ZXing .NET.MAUI verwenden, eine separate Bibliothek einführen, um dies zu handhaben. Wenn das Team IronBarcode bereits für eines dieser dateibasierten Szenarien verwendet, ist die Konsolidierung des MAUI-Kamera-Scannens in dieselbe Bibliothek der logische nächste Schritt.

Anforderungen an die Produktionsstabilität

Die Bezeichnung pre-1.0 bei v0.7.4 — während das Paket selbst eine stabile NuGet-Version ist — hat Auswirkungen auf Teams, die einer Softwarekompositionsanalyse, Abhängigkeitsaudits oder internen Genehmigungsprozessen unterliegen. Einige Unternehmensumgebungen erfordern, dass Produktionsabhängigkeiten eine stabile Version 1.0+ tragen, einen kommerziellen Support-Vertrag oder beides. ZXing.Net.MAUI wird von der Community gepflegt und ist pre-1.0, was sich für interne Tools und Prototypen eignet, jedoch Überprüfungsschritte in kundenorientierten Anwendungen hinzufügt, bei denen der Barcode-Scanner der primäre Workflow ist. Das Fehlen einer bezahlten Support-Stufe bedeutet, dass sich jedes kritische Fehler auf die Verfügbarkeit des Community-Maintainers stützt.

Gemeinsame Überlegungen zur Migration

Die strukturelle Umstellung von ZXing .NET.MAUI auf IronBarcode beinhaltet drei spezifische technische Ersetzungen, die jede Datei in der Codebasis betreffen, die am Barcode-Scannen beteiligt ist.

CameraBarcodeReaderView zu MediaPicker-Muster

Das CameraBarcodeReaderView-XAML-Steuerelement und seine xmlns:zxing-Namespace-Deklaration werden vollständig entfernt. In jeder XAML-Datei, die eine Scannansicht beinhaltete, wird diese durch ein Button-Steuerelement ersetzt, das MediaPicker.CapturePhotoAsync() in seinem Clicked-Handler aufruft. Das ereignisgesteuerte Modell — bei dem die Ergebnisse über BarcodesDetected eintreffen — wird ersetzt, indem der Rückgabewert von BarcodeReader.Read() direkt im asynchronen Handler gelesen wird.

Erkennt die Entfernung im Lebenszyklus?

Jede OnAppearing- und OnDisappearing-Überschreibung, die ausschließlich dazu dient, CameraView.IsDetecting umzuschalten, kann gelöscht werden. Wenn diese Überschreibungen andere Seitenlebenszykluslogik enthalten, werden die IsDetecting-Zeilen entfernt und die verbleibende Logik beibehalten. Es gibt kein IronBarcode-Äquivalent zu IsDetecting, da kein anhaltender Kamerazustand zwischen Seitennavigationen verwaltet werden muss.

UseBarcodeReader()-Registrierungsentfernung

ZXing.Net.MAUI erfordert einen einmaligen builder.UseBarcodeReader()-Aufruf in MauiProgram.cs, um seine Plattformkameradienste zu registrieren. IronBarcode erfordert keine MauiProgram.cs-Registrierung. Die UseBarcodeReader()-Zeile wird entfernt, und der using ZXing.Net.Maui;-Namespace-Import, der sie unterstützt, wird zusammen mit der Deinstallation des Pakets entfernt.

Zusätzliche IronBarcode Funktionen

Über die in diesem Vergleich behandelten Szenarien hinaus bietet IronBarcode eine Barcode-Funktionalität, die weit über das hinausgeht, was ein kamerabasiertes MAUI-Steuerelement leisten kann:

  • iOS Barcode-Scannen: Vollständige iOS MAUI-Unterstützung mit dem gleichen MediaPicker + BarcodeReader.Read()-Muster — keine plattformspezifische Kameraverwaltung, keine Formatlisten und kein Lebenszyklus-Schema.
  • Android Barcode Scanning : Android MAUIscannt über dieselbe einheitliche API, ohne die Abhängigkeitsprobleme der Kamera 1.5.0, die bei ZXing .NET.MAUI auftreten.
  • Barcode-Generierung: Erzeugt QR-Codes, Code128, EAN-13, PDF417, Data Matrix und alle gängigen Formate als Bilder mit konfigurierbarer Größe, Farbe, Ruhezone und Fehlerkorrekturstufe.
  • Stapelverarbeitung: Liest in einem einzigen Aufruf alle Barcodes von allen Seiten eines mehrseitigen PDFs oder eines Bildverzeichnisses und gibt zu jedem Ergebnis die Metadaten zur Seitenzahl zurück.
  • Serverseitige Bereitstellung: Das gleiche NuGet-Paket und der gleiche BarcodeReader.Read()-Aufruf laufen in ASP.NET Core Endpunkten, Azure Functions und Docker-Containern — ein Paket deckt sowohl den mobilen Client als auch das Server-Backend ab.
  • Wiederherstellung beschädigter Barcodes: Modelle des maschinellen Lernens stellen Barcodes von physisch beschädigten Etiketten, kontrastarmen Ausdrucken und Bildern wieder her, die unter suboptimalen Winkeln aufgenommen wurden und von herkömmlichen schwellenwertbasierten Decodern nicht verarbeitet werden können.
  • Stilisierte Barcode-Generierung: Erzeugt Barcodes mit benutzerdefinierten Farben, eingebetteten Logos, abgerundeten Ecken und Anmerkungstext – über die einfache monochrome Ausgabe von ZXing .NET hinaus.

.NET-Kompatibilität und Zukunftsfähigkeit

IronBarcode wird aktiv weiterentwickelt und regelmäßig mit Updates auf aktuelle .NET Versionen aktualisiert. die Bibliothek unterstützt .NET 8, .NET 9 und verfolgt nachfolgende .NET-Veröffentlichungen. Es unterstützt auch .NET Framework 4.6.2 und später für Legacy-Anwendungsumgebungen. ZXing.Net.MAUI als community-gepflegtes pre-1.0 Paket, enthält keine formalen Verpflichtungen hinsichtlich .NET-Version-Support-Zeitplänen. Für MAUI-Projekte – die an den .NET -Releasezyklus gekoppelt sind – ist die Verfügbarkeit einer aktiv gepflegten, kommerziell unterstützten Bibliothek, die jede .NET Version verfolgt, für die langfristige Planung relevant.

Abschluss

ZXing .NET.MAUI und IronBarcode stellen unterschiedliche Antworten auf dasselbe Problem dar – das Lesen von Barcodes in einer .NET MAUI Anwendung –, gehen aber von unterschiedlichen architektonischen Prämissen aus. ZXing .NET.MAUI bettet einen Live-Kamerasucher direkt in die XAML-Seite ein, der als persistentes Kamerasteuerelement fungiert und Ereignisse auslöst, während Frames analysiert werden. IronBarcode behandelt die Kamera als Erfassungsgerät, das über die System-MediaPicker zugegriffen wird, und verarbeitet ein statisches Bild nach der Aufnahme anstatt eines kontinuierlichen Streams. Dieser Unterschied in der Herangehensweise bestimmt nahezu alles andere: Plattformabdeckung, Komplexität des Lebenszyklus, Formatverarbeitung und Bereitstellungsumfang.

ZXing.Net.MAUI ist für spezifische Projektprofile wirklich geeignet: iOS- und Android-Anwendungen, Prototypen und interne Tools, Teams, die ihre Barcode-Formate im Voraus kennen, Projekte ohne Windows MAUIScan-Anforderung und Situationen, in denen die Null-Kosten MIT-Lizenz der entscheidende Faktor ist. Für einen Lagerbestandsscanner auf einer festen Anzahl von Android-Geräten, der Code128-Etiketten scannt, funktioniert ZXing .NET.MAUI einwandfrei. Der pre-1.0 Status, das iPhone 15 Pro Problem und das Lebenszyklus-Burden sind echte Kompromisse, die im richtigen Kontext akzeptabel sind.

IronBarcode eignet sich, wenn der Projektumfang größer ist: Windows- oder macOS-MAUI-Ziele, unbekannte oder variable Barcode-Formate von externen Systemen, Anforderungen, die das Lesen von Barcodes aus PDFs oder hochgeladenen Dateien umfassen, Anforderungen an die Stabilität in der Produktion oder serverseitige Barcode-Verarbeitung zusätzlich zum mobilen Scannen. Die kommerzielle Lizenz ist eine Investition, die Support, Wartung und Kompatibilitätsupdates für alle .NET Versionen umfasst. Die zustandslose API beseitigt eine Kategorie von Fehlern – Kamera-Ressourcenlecks, Lebenszyklus-Statusfehler –, die Entwickler bei ZXing .NET.MAUI manuell verhindern müssen.

Die ehrliche Einschätzung lautet, dass keine der beiden Bibliotheken uneingeschränkt richtig ist. ZXing .NET.MAUI verdient seinen Status als erste Bibliothek, die die meisten MAUI-Entwickler ausprobieren, weil sie kostenlos, vertraut und schnell zu integrieren ist. Die damit verbundenen Probleme sind real, spielen aber nur unter bestimmten Projektbedingungen eine Rolle. Wenn diese Bedingungen erfüllt sind – sei es eine Windows-Anforderung, Hardware der aktuellen iPhone-Generation, dateibasiertes Scannen oder Produktionsstandards für Stabilität –, erfüllt IronBarcode alle Anforderungen. Die Entscheidung hängt davon ab, ob die spezifischen Einschränkungen des Projekts es innerhalb oder außerhalb der Szenarien platzieren, in denen die bekannten Beschränkungen von ZXing .NET.MAUI zu Blockern werden.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.

...
Weiterlesen

Verwandte Artikel

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
AWS-Logo
Booking Badge

Von Millionen von Ingenieur*innen weltweit vertraut

Azure (WebApps, Funktionen v3)
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Azure (WebApps, Funktionen v3)
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.