IRONSOFTWAREHOME
VIDEOLAR

ZXing.Net.MAUI'den IronBarcode'ye Geçiş

Curtis Chau
Curtis Chau
Updated: 19 Mayıs 2026

Bu kılavuz, ZXing.Net.MAUI'den IronBarcode için .NET MAUI geliştiricilerine tam bir geçiş yolunu sağlar. Takımların bu göçü üstlenme nedenlerini, kararı çerçevelemek için bir özellik karşılaştırmasını, paketi değiştirme ve proje dosyalarını güncellemek için mekanik adımları, her ana kullanım deseni için önce-sonra kod örneklerini, bir API çeviri referansını, geçiş sırasında ortaya çıkan sorunlar için bir sorun giderme bölümünü, ilerlemenin izlenmesi için bir göç kontrol listesini ve göçün sağladığı sonuçların bir özetini içerir.

Neden ZXing.Net.MAUI'den Göç Edilmeli

ZXing.Net.MAUI'den uzaklaşmaya karar verme genellikle bir veya daha fazla somut proje koşulu ile tetiklenir. Bunlar stilistik tercihler değildir - bunlar, kütüphanenin mimarisi veya bakım durumu nedeniyle bir gereksinimin karşılanmasını engelleyen durumlardır.

Windows MAUI Desteklenmiyor: ZXing.Net.MAUI, Windows kamera uygulaması uygulaması ve bir tane oluşturma için açık bir plan sunmaz. Kütüphane, iOS ve Android platform kamera API'leri etrafında yapılandırılmıştır. Eğer bir MAUI projesi, ilk inşaattan sonra bir Windows hedefi eklerse - mobil öncelikli başlayan takımlarda yaygın bir desen - ZXing.Net.MAUI bu hedefe hiç hizmet edemez. Yedek bir çözüm, geri dönüş veya geçici çözüm yoktur.

iPhone 15 Pro Otomatik Odaklanma Sorunu: Redth/ZXing.Net.Maui için GitHub hata takipçisi, iPhone16,1 ve iPhone16,2 cihazlarının, CameraBarcodeReaderView kullanırken barkod algılama için güvenilir odaklanmayı başaramadığını belgeliyor. Barkod kamera çerçevesinde görünür, ancak otomatik odaklanma sistemi kod çözücü sonuç çıkaracak kadar keskin bir şekilde kilitlenmez. Belgelenen tek hafifletme, kullanıcının cihazla barkod arasındaki mesafeyi elle ayarlamasını istemektir - bu talep, bir görünür UX uzantısı ve kullanıcı sabrı gerektiren bir talimattır ve birincil iş akışı için kabul edilebilir bir üretim sonucu değildir.

Kamera Kaynak Sızıntısı: CameraBarcodeReaderView, IDisposable uygulamıyor. Kullanıcı bir tarama sayfasından uzaklaştığında, kamera kaynakları standart bir atma deseni ile serbest bırakılmaz. Belgelenmiş geçici çözüm, kamerayı resmi olarak serbest bırakmasa da etkisini azaltan IsDetecting = false 'i OnDisappearing() 'de ayarlamaktır. Sıkça tarama sayfalarına gidip gelen uygulamalar, kaynak tüketimi biriktirir ve bu, bellek büyümesi, pil tüketimi ve tarama sayfasına dönüşte aralıklı kamera başlatma hataları olarak kendini gösterebilir.

Format Spesifikasyonu Sessiz Başarısızlık: ZXing.Net.MAUI, tarama başlamadan önce taranacak her barkod formatını beyan etme gereksinimini ZXing.Net'ten devralır. BarcodeReaderOptions.Formats 'den çıkarılan formatlar, kamera çerçevesinde açıkça görülebilir olsa da sessizce göz ardı edilir. Geliştiricinin öngörmediği bir barkod formatına cihazı doğrultan kullanıcı, hiç hata görmez - uygulama basitçe hiçbir şey tespit etmez. Barkod formatlarının dış tedarikçiler, müşteriler veya üçüncü taraf sistemler tarafından kontrol edildiği ortamlarda, bu sessiz eksik kalış, kalıcı bir destek sorununa dönüşür.

1.0 Öncesi Kararlılık: ZXing.Net.MAUI, v0.7.4'te yayınlanmıştır — NuGet üzerinde kararlı bir sürüm, ancak hala semantik versiyonlama altında 1.0 öncesi. 1.0 öncesinde küçük versiyon API değişiklikleri olasıdır, hata düzeltme hızı, topluluk bakıcısının kullanılabilirliğine bağlıdır ve ticari destek SLA'sı yoktur. Bağımlılık denetimlerine veya yazılım kompozisyon analizine tabi kurumsal uygulamalar için, ticari destek olmadan topluluk 1.0 öncesi bir kütüphane, onay sürecini geçemeyebilir.

Temel Sorun

Yapısal sorun, geliştiriciyi manuel yaşam döngüsü yönetimi ve sabit bir format listesi ile kamera merkezli bir olay döngüsüne kilitleyen CameraBarcodeReaderView 'dir. Tanınmış barkod formatları ile iOS ve Android üzerinde temel kamera taramasının ötesine geçen her şey için mimari, sınırına ulaşır:

// 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, olay döngüsünü bir düğme dokunuşunda tek bir eşzamanlı çağrı ile değiştirir, format yapılandırmasını tamamen kaldırır ve sayfadan yaşam döngüsü yönetimini ortadan kaldırır:

// 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";
    }
    //HayırOnAppearing / OnDisappearing needed
}
C#

##IronBarcode ile ZXing.Net.MAUI: Özellik Karşılaştırması

ÖzellikZXing.Net.MAUIIronBarcode
Sürüm durumuKararlı, 1.0 öncesi (v0.7.4)Kararlı, ticari sürüm
iOS MAUIEvet (iPhone 15 Pro odaklanma bozukluğu)Evet
Android MAUIEvet (Kamera 1.5.0 derleme sorunları)Evet
Windows MAUIDesteklenmiyorEvet
macOS MAUIDesteklenmiyorEvet
Sunucu tarafı / ASP.NET CoreHayırEvet
Canlı kamera vizörüEvetHayır (MediaPicker sistem UI)
Format spesifikasyonu gerekliEvetHayır (otomatik algılama, 50'den fazla format)
Kamera yaşam döngüsü yönetimiEl ile (IsDetecting)Uygulanamaz
Dispose() uygulamasıHayırUygulanamaz — durumsuz
iPhone 15 Pro otomatik odaklanmaBozuk (belgelendi)Uygulanamaz
PDF barkod çıkarımıHayırEvet
Dosya yolu girişiHayır (sadece kamera)Evet
Hasarlı barkod kurtarmaYalnızca TryHarderEvet (ML destekli)
Barkod oluşturmaEvet (ZXing.Net üzerinden)Evet
Ticari destekNoneEvet
LisansMIT (ücretsiz)Ticari

Hızlı Başlangıç

Adım 1: ZXing.Net.Maui.Controls'u Kaldırın ve MauiProgram.cs'i Temizleyin

ZXing.Net.MAUI NuGet paketini kaldırın:

dotnet remove package ZXing.Net.Maui.Controls
SHELL

ZXing.Net.MAUI, MauiProgram.cs 'de bir defaya mahsus olmak üzere kayıt çağrısı gerektirir. Bu satırı mevcutsa kaldırın.

//Kaldırthis line from MauiProgram.cs
builder.UseBarcodeReader();
C#

Bu çağrıyı destekleyen using ZXing.Net.Maui; 'nin içe aktarımı, MauiProgram.cs 'den de kaldırılabilir.

2. Adım: IronBarcode'u Kurun

dotnet add package IronBarcode
SHELL

.NET MAUI barkod tarayıcı öğreticisi, iOS için Info.plist kamera izin girişleri ve Android için AndroidManifest.xml izin bildirimleri de dahil olmak üzere tam proje yapılandırmasını kapsar.

Adım 3: İsim Alanlarını Güncelleme ve Lisansı Başlatma

Tüm dosyalardan ZXing.Net.MAUI ad alanı ithalatlarını kaldırın:

//Kaldırthese from every .cs file that imported them
using ZXing.Net.Maui;
using ZXing.Net.Maui.Controls;
C#

Uygulama başlangıcında IronBarcode ad alanını ekleyin ve lisans anahtarını başlatın. Uygun yer MauiProgram.cs veya App.xaml.cs 'dir; barkod işlemleri yapılmadan önce:

using IronBarCode;

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

Kod Göç Örnekleri

XAML Kamera Kontrolünü ve Kod-Kapalısını Değiştirme

CameraBarcodeReaderView XAML kontrolü ve destek kodu geçişin ana hedefidir. Değişiklik, sayfa düzeninden kameranın görünümünü kaldırır ve olaya dayalı tarama desenini, bir düğme tetkiklemeli asenkron yakalama ile değiştirir.

ZXing.Net.MAUI Yaklaşımı:

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

Kod-kapalısı:

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;
    }
}

IronBarcode Yaklaşımı:

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

Kod-kapalısı:

// 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";
    }

    //HayırOnAppearing or OnDisappearing required — no camera state exists between scans
}
C#

zxing: XAML ad alanı, BarcodeReaderOptions format listesi, MainThread.BeginInvokeOnMainThread() sarmalayıcı ve her iki yaşam döngüsü geçersiz kılmaları tamamen kaldırılır. async metodunun devamı, çağıran bağlamda — bir UI olay işleyicisi için ana iş parçacığı — çalışır, bu nedenle açık iş parçacığı geçişi gerekli değildir.

Format Belirlemesini Kaldırma

Kod tabanındaki birden fazla sayfada veya tarama senaryosunda dağılmış durumdaki herhangi bir BarcodeReaderOptions yapılandırma bloğu silinir. IronBarcode, tüm 50+ desteklenen formata karşı otomatik format tespiti gerçekleştirir, ön yapılandırma gerekmeden.

ZXing.Net.MAUI Yaklaşımı:

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

IronBarcode Yaklaşımı:

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

Performans-sensitif senaryolar için IronBarcode'da format ipuçları mevcuttur, ancak bunlar isteğe bağlıdır. Bir seçenek nesnesinde listelenmeyen bir formattaki barkod, yine de tespit edilir ve geri döndürülür.

IsDetecting Yaşam Döngüsü Yönetimini Kaldırma

OnAppearing ve OnDisappearing 'yı geçersiz kılan ve CameraView.IsDetecting 'yi değiştirmek için var olan her bir çağrı kaldırılır. Bu metod geçersiz kılmalarında başka sayfa yaşam döngüsü mantığı varsa, sadece IsDetecting satırlarını kaldırın ve diğer mantığı koruyun.

ZXing.Net.MAUI Yaklaşımı:

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

IronBarcode Yaklaşımı:

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

Windows MAUI: Aynı Kod, Koşullu Derleme Yok

ZXing.Net.MAUI ile, projeye bir Windows hedefi eklemek ya derlenirken başarısız oldu ya da platforma özgü parçalara ihtiyaç duydu çünkü Windows uygulaması hiç yazılmamıştı.IronBarcode ile, iOS ve Android'de çalışan aynı kod, Windows'ta herhangi bir değişiklik yapmadan derlenir ve çalışır.

ZXing.Net.MAUI Yaklaşımı:

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

IronBarcode Yaklaşımı:

// NuGet: dotnet add package IronBarcode
//Hayırplatform 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#

Windows'ta, MediaPicker.CapturePhotoAsync(), kullanıcıya bir resim dosyası seçme imkanı sağlayan Windows dosya seçici ile eşleştirilir — masaüstü ortamı için uygun bir davranış. MAUI masaüstü barkod kılavuzu, Windows vemacOS MAUIyapılandırmasını detaylı bir şekilde kapsar.

PDF Barkod Okuma (Yeni Yetenek)

ZXing.Net.MAUI, PDF dökümanlarından barkod okumak için bir API'ye sahip değildir. Bu, geçişin sağladığı yeni bir gereksinimse, aşağıdaki desen uygulanır:

ZXing.Net.MAUI Yaklaşımı:

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

IronBarcode Yaklaşımı:

// 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}";
}

Tam PDF barkod okuma iş akışı — çok sayfalı belgeler, sayfa numarası meta verileri ve karma format belgeler içerir — PDF'den barkod okuyun kılavuzunda belgelenmiştir.

ZXing.Net.MAUI API'sinden IronBarcode'ye Geçiş Haritası

ZXing.Net.MAUIIronBarcodeNotlar
builder.UseBarcodeReader()Gerekli değilMauiProgram.cs 'den çıkarın
using ZXing.Net.Maui;using IronBarCode;Ad alanı değişikliği
using ZXing.Net.Maui.Controls;Gerekli değilKaldır
xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;..."Gerekli değilXAML'den Kaldır
<zxing:CameraBarcodeReaderView><Button> + MediaPicker.CapturePhotoAsync()Mimari değişim
Options="{Binding ReaderOptions}"Gerekli değilBağlamayı kaldır
BarcodesDetected="OnBarcodesDetected"BarcodeReader.Read() dönüş değeriOlay → async dönüş
new BarcodeReaderOptions { Formats = BarcodeFormats.X | ... }Gerekli değilOtomatik tespit, format listesini değiştirir
BarcodeDetectionEventArgs eIEnumerable<BarcodeResult>Farklı sonuç teslimi
e.ResultsBarcodeReader.Read() 'in dönüş değeri
barcode.Valueresult.ValueAynı özellik adı
barcode.Formatresult.FormatAynı özellik adı
BarcodeFormats.QRCodeBarcodeEncoding.QRCodeEnum yeniden adlandırma
BarcodeFormats.Code128BarcodeEncoding.Code128Enum yeniden adlandırma
BarcodeFormats.Ean13BarcodeEncoding.EAN13Enum yeniden adlandırma
BarcodeFormats.UpcABarcodeEncoding.UPCAEnum yeniden adlandırma
CameraView.IsDetecting = falseGerekli değilOnDisappearing 'dan çıkarın
CameraView.IsDetecting = trueGerekli değilOnAppearing 'dan çıkarın
Dosya girişi API'si yokBarcodeReader.Read("path/to/image.png")Yeni özellik
PDF giriş API'si yokBarcodeReader.Read("document.pdf")Yeni özellik
Sadece iOS ve AndroidiOS, Android, Windows, macOS, sunucuPlatform genişletme

Yaygın Göç Sorunları ve Çözümleri

Sorun 1: Canlı Vizör Eşdeğeri Yok

ZXing.Net.MAUI: CameraBarcodeReaderView, sayfa düzeninde sürekli bir kamera yayını gösterir ve kullanıcıya tarama geri bildirimleri ile canlı bir önizleme sunar.

**Çözüm:**IronBarcode bir canlı vizör kontrolü sağlamaz. Yerine kullanılan desen, platform sistem kamera UI'sını açan MediaPicker.CapturePhotoAsync() 'yi kullanır. Sistem kamera kendi canlı önizlemesini ve odak göstergesini sağlar. Kullanıcı resmi çekip onayladıktan sonra sonuç BarcodeReader.Read() 'ye gönderilir. Sürekli bir uygulama içi bakış açısı elemanı, sistem kamera UI'sı ile değiştirilemeyen zorunlu bir UX elemanı ise, kamera entegrasyon katmanı ayrı olarak Microsoft.Maui.Media ya da platform kamera API'ları ile inşa edilmelidir;IronBarcode ise kod çözme adımını yönetir.

Sorun 2: Kamera İzin Bildirimleri

ZXing.Net.MAUI: Kamera izinleri, ZXing.Net.MAUI kurulum talimatlarının bir parçası olarak projede bildirilmiş olabilir.

Çözüm: IronBarcode'ın MAUI deseni kullandığı MediaPicker.CapturePhotoAsync() çağrısı için kamera izinleri gereklidir. iOS için NSCameraUsageDescription 'nun Info.plist 'de bulunduğunu ve Android için <uses-permission android:name="android.permission.CAMERA" /> 'nun AndroidManifest.xml 'de bulunduğunu doğrulayın. IronBarcode'ın kendisi kameraya doğrudan erişmez — görüntüleri işler — ancak ona görüntü sağlayan MediaPicker çağrısı kamera izni gerektirir. İzin kurulumu .NET MAUI barkod tarayıcı öğreticisine kapsanmıştır.

Sorun 3: Windows Build Şimdi Başarısız Olmadığı Yerlerde Başarılı Oluyor

ZXing.Net.MAUI: ZXing.Net.MAUI ile bir Windows hedefi eklemeye çalışan projeler genellikle derleme hataları ile karşılaştı veya kütüphanenin Windows derlemesinden koşullu MSBuild mantığıyla hariç tutulmasını gerektirdi.

Çözüm: ZXing.Net.MAUI kaldırıldıktan ve IronBarcode yüklendikten sonra,Windows MAUIderlemesi herhangi bir platform koşullu olmadan başarılı olur. Herhangi bir #if ANDROID|| IOS korumasını, Windows derlemesinden ZXing.Net.MAUI çağrılarını dışlamak için yerleştirilmiş herhangi IronBarcodeBarcodeReader.Read() çağrısı tüm hedef çerçevelerde derlenir ve çalıştırılır. Windows yapılarından MediaPicker.CapturePhotoAsync() hariç tutulduysa, bu dışlama da kaldırılabilir — metotWindows MAUIüzerinde desteklenir ve dosya seçici ile eşleştirilir. Koşulları kaldırdıktan sonra, tüm hedef çerçeveler için tam çözümün temiz derlenmesini doğrulayın.

Sorun 4: BarcodeFormats Enum Referansları

ZXing.Net.MAUI: ZXing.Net.Maui 'den BarcodeFormats enum'u, BarcodeReaderOptions yapılandırmalarında yaygın olarak kullanılır. Paket kaldırıldıktan sonra, kalan referanslar derleme hataları üretir.

Çözüm: Format listelerini yapılandırmak için kullanılan tüm BarcodeReaderOptions başlatma bloklarını silin. IronBarcode, doğru çalışması için format belirtimine ihtiyaç duymaz. Herhangi bir kalan kod, günlük, görüntüleme veya karşılaştırma amaçları için BarcodeFormats değerlerine referans veriyorsa, bunları IronBarCode ad alanından BarcodeEncoding değerleri ile değiştirin. Paket kaldırıldıktan sonra kalan tüm referansları bulmak için grep -rn "BarcodeFormats\." --include="*.cs" . çalıştırın.

ZXing.Net.MAUI Geçiş Kontrol Listesi

Geçiş Öncesi Görevler

Kod tabanındaki tüm ZXing.Net.MAUI kullanımını değişiklik yapmadan önce denetleyin:

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

Denetimle belirlenen tüm tarama sayfalarını belgeleyin. Hangi OnAppearing ve OnDisappearing geçersiz kılmalarının sadece silinecek IsDetecting yönetimi içerdiğini ve hangilerinin diğer mantık içerdiğini (kısmen değiştirilecek) not edin. Yalnızca tespit yapılandırması dışında yollarla kullanılan format listelerini içeren BarcodeReaderOptions örneklerini not edin.

Kod Güncelleme Görevleri

  1. ZXing.Net.Maui.Controls NuGet paketini proje dosyasından kaldırın
  2. MauiProgram.cs 'den builder.UseBarcodeReader() kaldırın
  3. Tüm dosyalardan using ZXing.Net.Maui; ve using ZXing.Net.Maui.Controls; ad alanı içe aktarımlarını kaldırın
  4. IronBarcode NuGet paketini yükleyin
  5. Barkod okuma kullanacak olan tüm dosyalara using IronBarCode; ekleyin
  6. Uygulama başlangıcına IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; ekleyin
  7. Tüm XAML dosyalarından xmlns:zxing ad alanı bildirimini kaldırın
  8. XAML dosyalarındaki tüm <zxing:CameraBarcodeReaderView> öğelerini kaldırın
  9. Her bir XAML dosyasında kaldırılan kamera görünümünün yerine bir <Button> kontrolü ekleyin
  10. Her tarama düğmesine Clicked="ScanButton_Clicked" ekleyin
  11. Tüm arka plan dosyalarından OnBarcodesDetected olay işleyici metodlarını silin
  12. Her sayfaya MediaPicker.CapturePhotoAsync() + BarcodeReader.Read() uygulayan async void ScanButton_Clicked metodlarını ekleyin
  13. Tüm BarcodeReaderOptions başlatma bloklarını silin
  14. Yalnızca IsDetecting yönetimi için var olan tüm OnDisappearing ve OnAppearing geçersiz kılmaları silin
  15. Diğer mantığı içeren herhangi bir OnDisappearing ve OnAppearing geçersiz kılmalarından IsDetecting satırlarını kaldırın
  16. ZXing.Net.MAUI'yi Windows derlemesinden izole eden hiçbir #if ANDROID|| IOS koşullu derleme kontrolü kalmasın
  17. Kalan tüm BarcodeFormats.X enum referanslarını BarcodeEncoding.X eşdeğerleri ile değiştirin

Geçiş Sonrası Testler

Geçiş temiz bir şekilde derlendikten sonra, aşağıdakileri doğrulayın:

  • Android MAUI: tarama düğmesi sistem kamerayı açar, bir fotoğraf çeker ve doğru bir barkod sonucu döndürür — Android tarama kılavuzuyla teyit edin
  • iOS MAUI: Aynı akış, iPhone 15 Pro donanımındaki otomatik odaklanma sorununu içeren iOS üzerinde çalışır
  • Windows MAUI: Windows derleme hatasız derlenir ve tarama düğmesi dosya seçiciyi açar ve seçilen bir resimden doğru bir sonuç döndürür
  • Formatlar: otomatik algılamayı doğrulamak için eski BarcodeFormats listesine dahil edilmeyen formatlarda barkod taramayı test edin
  • Sayfa gezinmesi: Tarama sayfasına birden çok kez gidip dönün ve bellek artışı veya kamera başlatma hatası oluşmadığını doğrulayın
  • PDF okuma: geçişin yeni bir yetenek olarak PDF barkod okuması eklemesi durumunda, çok sayfalı PDF'lerin doğru sayfa numarası meta verileriyle sonuçlar döndürdüğünü doğrulayın

IronBarcode'a Geçmenin Temel Faydaları

Genişletilmiş Platform Kapsamı: Geçişten sonra, uygulama, iOS ve Android'e ek olarak Windows vemacOS MAUIhedeflerini destekler — hepsi aynı paketten ve aynı tarama deseniyle. Daha önce platforma özgü parçalar gerektiren veya Windows'u barkod işlevselliğinden dışlayan projeler, ek kod olmaksızın tam kapsama alanı sağlar.

Mevcut Nesil Donanım Güvenilirliği: MediaPicker ve BarcodeReader.Read() yoluyla görüntü yakalama yaklaşımı, iPhone 15 Pro ve Pro Max donanımında başarısız olan CameraBarcodeReaderView otomatik odak modeli tarafından etkilenmez. Sistem kamera, odağı bağımsız olarak yönetir ve IronBarcode, kullanıcı çekimi onayladıktan sonra yakalanan görüntüyü işler.

Kamera Kaynağı Yönetiminin Ortadan Kaldırılması: CameraBarcodeReaderView 'nin kaldırılması, kamera kaynak sızıntı hataları kategorisini tamamen ortadan kaldırır. Takip edilecek herhangi bir IsDetecting durumu yoktur, her tarama sayfasında korunacak OnAppearing ve OnDisappearing şablonu yoktur ve gezinme döngüleri boyunca kamera kaynaklarının birikimi yoktur. Durumsuz API, tarama sayfalarını, kaynak yaşam döngüsü açısından diğer herhangi bir sayfadan ayırt edilemez hale getirir.

Konfigürasyon Olmadan Format Kapsamı: Saha karşılaşılan herhangi bir barkod formatı otomatik olarak tespit edilir. BarcodeFormats listesinde eksik girişlerden kaynaklanan tarama hataları ortadan kaldırılır. Etiket formatını değiştiren bir tedarikçiden dolayı barkodları sessizce göz ardı edilen kullanıcıların destek talepleri son bulur.

Dosya ve Belge İşleme: Geçiş, ek bir kütüphaneye gerek kalmadan PDF belgelerinden, resim dosyalarından ve bayt akışlarından barkod okuma yeteneğini açar. Daha önce ZXing.Net.MAUI kapsamı dışında kalan iş akışları — yüklenmiş faturalar üzerinden barkod okuma, dijital biletleri işleme, görüntü dizinlerini toplu tarama — aynı BarcodeReader.Read() çağrısı kullanılarak kamera yakalamaları için kullanılabilir hale gelir.

Üretim Düzeyinde Kararlılık: IronBarcode, aktif bir geliştirme süresi, ticari destek ve .NET sürüm güncellemelerini izleyen düzenli güncellemelerle, istikrarlı bir ticari sürüm olarak sunulur. Bağımlılık denetimleri, yazılım bileşimi analizi ve kurumsal onay süreçleri, belgelenmiş bir bakım taahhüdü ile bir desteklenen kütüphane ile karşılaşır, bir topluluk ön sürümü paketiyle değil.

Lütfen dikkate alın: ZXing.NET, ilgili sahibinin tescilli ticaret markasıdır. Bu site, ZXing.NET ile bağlı, onaylanmış veya sponsorlu değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.
Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez