ZXing.Net.MAUI vs IronBarcode: C# MAUI Barkod Karşılaştırması 2026
ZXing.Net.Maui.Controls v0.7.4. NuGet'te kararlı ancak hala öncesi 1.0.Windows MAUItaraması desteklenmez (sadece üretim). iPhone 15 Pro otomatik odaklama, etkilenmiş olarak belgelenmiştir (sorun #260). Dispose() olmadan kamera kaynak sızıntısı (sorun #164). Bu, çoğu .NET MAUI geliştiricisinin ilk başvurduğu kütüphanedir — ve proje gönderilmeden önce üretim sorunlarını en sık ortaya çıkaran kütüphanedir.
ZXing.Net.MAUI Anlaşılması
ZXing.Net.MAUI, Jon Dick (GitHub: Redth) tarafından MIT lisansı altında geliştirilen ve yayınlanan, ZXing.Net barkod kütüphanesinin bir topluluk tarafından işletilen .NET MAUI portudur. XAML kamera kontrolü sağlar, CameraBarcodeReaderView, MAUI sayfalarına canlı bir barkod tarama vizörü yerleştirir. Geliştiriciler, kamera kareleri yakaladıkça tarama sonuçlarını almak için bir BarcodesDetected olayı bağlar. Kütüphane, ZXing.Net'ten tam barkod formatı motorunu devralır, BarcodeFormats enum'u ve BarcodeReaderOptions yapılandırma modelini içerir.
Paket ZXing.Net.Maui.Controls MauiProgram.cs içinde builder.UseBarcodeReader() aracılığıyla kayıtlıdır ve iOS ve Android için mobil kamera iş hattı etrafında tasarlanmıştır. Kütüphane, ticari bir kuruluş tarafından desteklenmez, SLA'a sahip değildir ve ücretli bir destek katmanı yoktur. v0.7.4 sürümü, kararlı bir NuGet sürümü ancak semantik sürümleme altında hala öncesi 1.0'dır.
ZXing.Net.MAUI'nin önemli mimari özellikleri:
- Öncesi 1.0 Durum: NuGet paketi v0.7.4'tedir — kararlı, ancak halen öncesi 1.0. 1.0 öncesinde küçük sürüm API değişiklikleri olası, hata düzeltme hızı topluluk bakıcısına bağlı ve bir ticari destek sözleşmesi yok.
- iOS ve Android Tarama: Kütüphane, iOS ve Android için platform kamera API'lerine dayanmaktadır.Windows MAUIyalnızca üretimi destekler — kamera taraması uygulanmamıştır. Mac Catalyst, hedef çerçeve listesine dahil edilmiştir, ancak tarama resmi olarak belgelenmemiştir.
- Sürekli Kamera Vizörü:
CameraBarcodeReaderViewsayfa görünürken sürekli çalışan bir canlı kamera kontrolüdür. Ekran alanı kaplar ve sayfa yaşam döngüsü yönetimi gerektirir. - Dispose() Uygulaması Yok: Kontrol,
IDisposableuygulamaz. Kamera kaynakları sayfa gezintisinde resmi olarak serbest bırakılmaz,IsDetecting = falseçözüm yolu gerektirirOnDisappearing()(GitHub sorunu #164). - iPhone 15 Pro Otomatik Odaklama Sorunu: GitHub sorunu #260, iPhone 15 Pro ve Pro Max cihazlarının (donanım tanıtıcıları
iPhone16,1veiPhone16,2) barkod algılaması için güvenilir odaklama sağlamadığını belgeler. Şu anda programatik bir düzeltme mevcut değil. - Android Kamera Uyumluluk Sorunu: GitHub sorunu #275, AndroidX Camera 1.5.0 ile uyumluluk çakışmalarından kaynaklanan derleme hatalarını takip eder, kamera paketlerini 1.4.x ile sabitleme veya projeyi
minSdkVersionyükseltme çözüm yolu ile. - ZXing.Net Format Özelliğini Devralır: Her tarama oturumu, hangi
BarcodeFormatsdeğerlerinin taranacağını açıkça belirlemeyi gerektirir.BarcodeReaderOptions.Formatsiçinde listelenmeyen formatlar, kamera çerçevesinde görünür olsa bile sessizce yok sayılır. - Sadece Kamera Mimarisi: Kütüphane bir dosya girişi API'sine, bir akış okuma API'sine ve bir PDF barkod çıkarımına sahip değildir. Tüm taramalar canlı kamera vizörü aracılığıyla gerçekleşmelidir.
CameraBarcodeReaderView Mimarisi
CameraBarcodeReaderView kontrolü, ZXing.Net.MAUI'nin merkez bileşenidir. XAML'de beyan edilir ve BarcodeReaderOptions bağı ile yapılandırılır. Kullanan her sayfa, OnAppearing ve OnDisappearing geçersiz kılmalarını, IsDetecting durumunu yönetmek için uygulamalıdır:
<!-- 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>
// Toggling IsDetecting in lifecycle overrides is the documented pattern
protected override void OnDisappearing()
{
base.OnDisappearing();
if (CameraView != null)
CameraView.IsDetecting = false; //HayırIDisposable on the control
}
protected override void OnAppearing()
{
base.OnAppearing();
if (CameraView != null)
CameraView.IsDetecting = true;
}
Bir ZXing.Net.MAUI uygulamasındaki her tarama sayfası bu yaşam döngüsü şablonunu taşır. IDisposable yokluğu, kamera durumunun standart Dispose modelinden ziyade IsDetecting bayrağı aracılığıyla manuel olarak yönetilmesi gerektiği anlamına gelir.
IronBarcode Anlama
IronBarcode, Iron Software tarafından geliştirilen ticari olarak desteklenen bir .NET barkod kütüphanesidir. Sabit bir API olan BarcodeReader.Read() aracılığıyla hem barkod okuma hem de oluşturma sağlar, bu API görüntü baytlarını, dosya yollarını, akışları ve PDF belgelerini kabul eder. MAUI context'inde,IronBarcode MAUI'nin yerleşik MediaPicker ile eşleşir, böylece sistem kamerası aracılığıyla görüntüler yakalanır, ardından bir sürekli kamera akışını işlemlemek yerine, yakalamadan sonra ortaya çıkan görüntü işlenir.
Kütüphane tüm MAUI platformlarını — iOS, Android, Windows ve macOS — aynı paket ve aynı kod yolları üzerinden hedefler. MauiProgram.cs içinde platforma özgü hizmet kaydı gerekli değildir, XAML'de yerleştirilmiş kamera görünümü kontrolü yoktur ve IronBarcode çalıştıran kamera durumunu sürdürmediği için yaşam döngüsü yönetimi gerekmez.
IronBarcode'un ana özellikleri:
- Stabil Ticari Yayın: Ticari destek, SLA ve düzenli bir sürüm ritmiyle üretime hazır bir NuGet paketi olarak yayınlanır.
- Tüm MAUI Platformları: iOS, Android, Windows vemacOS MAUIhedeflerini tek bir paketten ve tek bir kod paterninden destekler.
- Durumsuz API:
BarcodeReader.Read()statik bir yöntem çağrısıdır. Tarama arasında arka plan süreçleri çalışmaz, yaşam döngüsü kancaları gerekmez ve sayfa gezintileri arasında kamera kaynakları birikmez. - Tüm Formatların Otomatik Algılaması: Format belirtim listesi olmadan otomatik olarak 50'den fazla barkod formatını algılar. Bilinmeyen bir formatı taramak için yapılandırma gerekmiyor.
- Dosya ve PDF Okuma: Dosya yolları, bayt dizileri, akışlar ve PDF belgelerinden yerel olarak barkod okur, canlı kamera kütüphanelerinin ele alamayacağı senaryoları kapsamaktadır.
- ML Destekli Hasarlı Barkod Kurtarma: Makine öğrenimi modellerini, sınır algoritmalarının başaramayacağını hasarlı, kısmen gizlenmiş veya düşük kaliteli görüntülerden barkod kurtarmak için uygular.
- Barkod Üretimi: Tüm ana 1D ve 2D barkod formatlarını, boyutlandırma, renk ve kenar boşluğu yapılandırmaları ile görüntüler olarak üretir.
- Çapraz Dağıtım: Aynı paket, ASP.NET Core, WPF, WinForms, konsol uygulamaları, Azure Fonksiyonları ve Docker konteynerlerinde MAUI ile birlikte çalışır.
Özellik Karşılaştırması
Aşağıdaki tablo, ZXing.Net.MAUI ve IronBarcode arasındaki ana farkları vurgular:
| Özellik | ZXing.Net.MAUI | IronBarcode |
|---|---|---|
| Sürüm Durumu | Kararlı ancak öncesi-1.0 (v0.7.4) | Kararlı, ticari sürüm |
| Platform Desteği | iOS, Android tarama (yalnızca Windows üretim) | iOS, Android, Windows, macOS, sunucu |
| Format Belirtimi Gerekli | Evet | Hayır (otomatik algılama) |
| Kamera Kaynak Yönetimi | Manuel (IsDetecting) | Uygulanamaz — durumsuz |
| PDF Barkod Çıkartma | Mevcut değil | Evet |
| Lisans | MIT (ücretsiz, topluluk) | Ticari |
| Ticari Destek | None | Evet |
Ayrıntılı Özellik Karşılaştırması
| Özellik | ZXing.Net.MAUI | IronBarcode |
|---|---|---|
| Platform | ||
| iOS MAUI | Evet (iPhone 15 Pro odak sorunu #260) | Evet |
| Android MAUI | Evet (Kamera 1.5.0 yapı sorunu #275) | Evet |
| Windows MAUI | Yalnızca üretim — tarama uygulanmamış | Evet |
| macOS MAUI | Mac Catalyst hedeflenmiştir; tarama resmi olarak belgelenmemiştir | Evet |
| ASP.NET Core / Sunucu | Hayır | Evet |
| WPF / WinForms | Hayır | Evet |
| Azure Fonksiyonları / Docker | Hayır | Evet |
| .NET Framework 4.6.2+ | Hayır | Evet |
| Okuma | ||
| Format otomatik algılama | Hayır — formatları belirtmeniz gerekiyor | Evet (50+ format) |
| Dosya yolu girişi | Sadece ZXing.Net çekirdek üzerinden | Evet |
| Akış girişi | Sadece ZXing.Net çekirdek üzerinden | Evet |
| PDF barkod çıkarımı | Hayır | Evet |
| Hasarlı barkod kurtarma | Yalnızca TryHarder | Evet (ML destekli) |
| Kamera Entegrasyonu | ||
| Canlı vizör kontrolü | Evet | Hayır (MediaPicker sistem UI) |
| Yaşam döngüsü yönetimi gerekiyor | Evet (IsDetecting) | Hayır |
| Dispose() uygulaması | Hayır | Uygulanamaz |
| iPhone 15 Pro otomatik odaklanma | Etkilenen (GitHub sorunu #260) | Uygulanamaz |
| Üretim | ||
| Barkod oluşturma | Evet (ZXing.Net üzerinden) | Evet |
| Bakım | ||
| Sürüm durumu | Kararlı ancak öncesi-1.0 (v0.7.4) | Üretime hazır |
| Ticari destek | None | Evet |
| API stabilite garantisi | Öncesi-1.0 — küçük sürüm değişiklikleri olası | Evet |
| Lisans | MIT (ücretsiz) | Ticari |
Platform Desteği
Platform kapsamı, ZXing.Net.MAUI ve IronBarcode arasındaki yapısal bir farktır çünkü iki kütüphane, .NET MAUI uygulamalarının nerede çalıştığına dair temelde farklı varsayımlar üzerine inşa edilmiştir.
ZXing.Net.MAUI Yaklaşımı
ZXing.Net.MAUI, iOS ve Android için platform kamera API'lerine dayalı olarak tasarlanmıştır. Windows MAUI, yalnızca barkod üretimini destekler — kamera taraması uygulanmadı ve kamuya açık bir yol haritasında değil. Bu, kütüphaneyi yalnızca mobil işletim sistemleri için yazılmış platform uygulamaları ile canlı bir kamera görüntüleyici kontrolü etrafında inşa etme mimari tercihine yansıtılır.
net8.0-windows10.0.19041.0 hedefleyen bir MAUI projesi, ZXing.Net.MAUI'den barkod tarama işlevi elde edemez. Mac Catalyst hedef çerçeve listesinde mevcuttur, ancak o hedefte tarama resmi olarak belgelenmemiştir. Yalnızca mobil hedeflerle başlayan ve daha sonra Windows veya macOS gerekliliği ekleyen takımlar, ZXing.Net.MAUI'nin bu hedeflerde tarama yapamayacağını görecektir. iOS desteği kendisi bir uyarı taşır: GitHub sorunu #260, iPhone 15 Pro ve Pro Max cihazlarının güvenilir algılamayı önleyen bir otomatik odaklama sorunundan etkilendiğini belgeler.
IronBarcode Yaklaşımı
IronBarcode, aynı paketten ve aynı kod deseninden — iOS, Android, Windows ve macOS — tüm MAUI hedef çerçevelerini destekler. MediaPicker + BarcodeReader.Read() yaklaşımı her platforma doğal olarak haritalanır: mobilde, MediaPicker.CapturePhotoAsync() cihaz kamerasını çağırır; Windows'ta, bu bir masaüstü ortamı için uygun davranış olan dosya seçicisine eşlenir. Platforma özgü kod yok, koşullu derleme yok ve platform hizmeti kaydı yok.
Windows ve macOS için MAUI masaüstü barkod deseni, mobil taramayı ele alan aynı paket tarafından karşılanır. Android cihazda çalışan aynı BarcodeReader.Read() çağrısı, ASP.NET Core son noktasında, bir WinForms masaüstü uygulamasında veya bir Azure İşlevinde de çalışır — dağıtım hedefi API'yi etkilemez.
Kamera Entegrasyonu ve Yaşam Döngüsü
İki kütüphane, MAUI uygulamasında kamera erişiminin nasıl çalıştığı konusunda zıt mimari pozisyonlar alır.
ZXing.Net.MAUI Yaklaşımı
CameraBarcodeReaderView XAML sayfasına yerleştirilmiş kalıcı bir kamera kontrolüdür. IsDetecting true olarak ayarlandığında kamera karelerini işlemeye başlar ve false olarak ayarlandığında durur. Dispose() bir uygulamanın yokluğu, kullanıcı uzaklaştığında, standart IDisposable modeli aracılığıyla kamera kaynaklarının serbest bırakılmadığı anlamına gelir. Belgelenen azaltma, IsDetecting = false OnDisappearing() içinde ayarlayıp OnAppearing() içinde geri yüklemektir:
// 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;
}' ZXing.Net.MAUI: toggle IsDetecting in page lifecycle overrides
Protected Overrides Sub OnDisappearing()
MyBase.OnDisappearing()
CameraView.IsDetecting = False
End Sub
Protected Overrides Sub OnAppearing()
MyBase.OnAppearing()
CameraView.IsDetecting = True
End SubBu desen, bir tarayıcı barındıran her sayfada tekrarlanmalıdır. Sıkça tarama sayfalarına gidip gelen ve geri dönen uygulamalar, tamamıyla serbest bırakılmamış kamera kaynakları biriktirebilir; bu, bellek büyümesi raporları ve dönüşte aralıklı kamera başlatılması ile GitHub sorunu #164 altında izlenir. iPhone 15 Pro otomatik odaklama sorunu (GitHub issue #260), kamera entegrasyon katmanı içinde ayrı bir endişedir: kamera görünümü barkodu net bir şekilde render eder, ancak otomatik odaklama sistemi, iPhone16,1 ve iPhone16,2 donanımda algılama için yeterince keskin bir şekilde kilitlenmez. Belgelendirilmiş çözüm, kullanıcıya cihaz ile barkod arasında elle mesafe ayarlaması yapmasını talimat vermektir.
IronBarcode Yaklaşımı
IronBarcode, XAML düzenine bir kamera kontrolü yerleştirmez. Bunun yerine, MediaPicker.CapturePhotoAsync() çağrısı, kullanıcı bir düğmeye dokunduğunda sistem kamera UI'ını açar. Sistem kamerası, odak, pozlama ve otomatik odaklamayı bağımsız olarak kontrol eder. Kullanıcı yakalamayı onayladığında, elde edilen görüntü BarcodeReader.Read()'a bayt dizisi olarak geçirilir:
// 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}");
}
//HayırOnAppearing or OnDisappearing needed — no camera state to manage
.NET MAUI barkod tarayıcı dersinde bu desen için tam proje kurulumu, hem iOS hem de Android için izin yapılandırmasının dahil olması ele alınmıştır. Kalıcı bir kamera görünümü olmadığı için, serbest bırakılacak kaynak, değiştirilmesi gereken durum veya sayfalar boyunca korunması gereken bir yaşam döngüsü şablonu yoktur.
Format Belirtimi
Bir kütüphanenin barkod format algılamasını nasıl ele aldığı, gerçek dünya dağıtımlarında tarama güvenilirliği için doğrudan sonuçlar doğurur.
ZXing.Net.MAUI Yaklaşımı
ZXing.Net.MAUI, ZXing.Net format belirtimi gereksinimini devralır. Tarama başlamadan önce, geliştirici, BarcodeReaderOptions.Formats'a algılanması gereken BarcodeFormats enum değerlerinin bir maskeasını doldurmalıdır. Bu listede yer almayan formatlar tespit edilmeyecek — sessizce, hata veya uyarı olmaksızın:
// 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
};' ZXing.Net.MAUI: formats must be declared explicitly
' Formats not listed here are not detected
ReaderOptions = New BarcodeReaderOptions With {
.Formats = BarcodeFormats.QRCode Or
BarcodeFormats.Code128 Or
BarcodeFormats.Ean13 Or
BarcodeFormats.UpcA,
.TryHarder = True,
.AutoRotate = True
}Kullanıcı bir GS1 DataBar, Aztek kodu, MaxiCode veya seçeneklerde ilan edilmeyen herhangi bir formatı kameraya doğrultursa, tarama, hata bildirimi yapılmaksızın sonuç vermez. Kamera, barkodu gösterir ve uygulamaya sonuç gönderilmez. Kontrollü bir ortamda — her öğenin Code128 etiketi taşıdığı bir depoda — bu yönetilebilir. Barkod formatlarının dış tedarikçiler, müşteriler veya üçüncü taraf sistemler tarafından belirlendiği dağıtımlarda, bir geri dönüş yolunun olmaması, tekrarlayan bir destek sorunu haline gelir.
IronBarcode Yaklaşımı
IronBarcode, önceden yapılandırma olmaksızın desteklenen tüm formatlar arasında otomatik format algılaması gerçekleştirir. BarcodeReader.Read() görüntüyü analiz eder ve format ne olursa olsun tanımladığı her barkod için sonuçlar döndürür. BarcodeReaderOptions listesine gerek yoktur:
// 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}");Imports IronBarcode
' IronBarcode: no format specification needed
' All 50+ formats detected automatically
Dim results = BarcodeReader.Read(imageBytes)
For Each barcode In results
Console.WriteLine($"{barcode.Format}: {barcode.Value}")
NextSadece bir formatın beklenildiği kontrollü bir senaryo için performans ayarlaması gerekiyorsa, format ipuçları isteğe bağlı olarak iletilebilir — ancak doğru algılama için asla gerekli değildir. Geliştirici tarafından beklenmeyen bir formattaki bir barkod yine de algılanacak ve döndürülecektir.
Dosya ve PDF İşleme
Canlı kamera taramanın ötesinde, birçok üretim barkod iş akışı, saklanan belgelerden okuma işlemini içerir — sevk irsaliyeleri, dijital biletler, yüklenen görüntüler ve PDF ekleri.
ZXing.Net.MAUI Yaklaşımı
ZXing.Net.MAUI, bir kamera kontrol kütüphanesidir. Dosya yollarından, doğrudan depolamadan iletilen bayt dizilerinden veya PDF belgelerinden barkod okuma için bir API'ye sahip değildir. CameraBarcodeReaderView kontrolü, canlı bir kamera beslemesi gerektirir; bir dosya yolunu kabul eden ve barkod sonuçlarını döndüren statik bir yöntem yoktur. Yüklenen PDF'lerden, belge yönetim sistemlerinden veya toplu görüntü işleme kuyruklarından barkod okumaları gereken ekipler, bu senaryolar için ZXing.Net.MAUI kullanamaz ve ayrı bir kütüphane eklemeleri gerekir.
IronBarcode Yaklaşımı
IronBarcode, aynı BarcodeReader.Read() yöntemiyle herhangi bir kaynaktan barkod okur. Dosya yollarını, bayt dizilerini, akışları ve PDF belgelerini kabul eder. PDF işleme özgüdür — IronBarcode, PDF sayfalarını doğrudan ara rasterleştirme adımı olmadan işler:
// 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}";
}Imports IronBarCode
Imports Microsoft.Maui.Storage
' Read barcodes from a PDF file
Dim results = BarcodeReader.Read("invoice.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}")
Next
' Read from a user-selected file using MAUI FilePicker
Dim file = Await FilePicker.PickAsync()
If file IsNot Nothing Then
Dim fileResults = BarcodeReader.Read(file.FullPath)
For Each result In fileResults
ResultLabel.Text &= $"\n{result.Format}: {result.Value}"
Next
End IfÇok sayfalı belgeler ve sayfalar arasında karışık barkod formatlarını içeren tam PDF barkod okuma iş akışı, PDF'den barkod okuma kılavuzunda belgelenmiştir. Bu, ZXing.Net.MAUI'nin yalnızca kamera tabanlı mimarisiyle ele alamayacağı sevk irsaliyeleri, dijital biletler, belge yönetim iş akışları ve toplu işleme senaryolarını kapsar.
API Eşleme Başvurusu
| ZXing.Net.MAUI | IronBarcode | Notlar |
|---|---|---|
builder.UseBarcodeReader() | Gerekli değil | MauiProgram.cs'dan Kaldır |
xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;..." | Gerekli değil | XAML ad alanı bildirimini kaldırın |
<zxing:CameraBarcodeReaderView> | <Button> + MediaPicker ile Değiştir | Mimari değişiklik |
Options="{Binding ReaderOptions}" | Gerekli değil | Seçenekler nesnesi gerekli değil |
BarcodesDetected="OnBarcodesDetected" | BarcodeReader.Read() dönüş değeri | Olay → yöntem dönüşü |
new BarcodeReaderOptions { Formats = BarcodeFormats.X | ... } | Gerekli değil | Otomatik algılama bunu değiştiriyor |
BarcodeDetectionEventArgs e | IEnumerable<BarcodeResult> | Farklı sonuç sunum modeli |
e.Results | BarcodeReader.Read() dönüş değeri | |
barcode.Value | result.Value | Aynı özellik adı |
barcode.Format | result.Format | Aynı özellik adı |
BarcodeFormats.QRCode | BarcodeEncoding.QRCode | Enum yeniden adlandırma |
BarcodeFormats.Code128 | BarcodeEncoding.Code128 | Enum yeniden adlandırma |
BarcodeFormats.Ean13 | BarcodeEncoding.EAN13 | Enum yeniden adlandırma |
CameraView.IsDetecting = false (OnDisappearing) | Gerekli değil — yöntemi kaldırın | IronBarcode durumsuzdur |
CameraView.IsDetecting = true (OnAppearing) | Gerekli değil — yöntemi kaldırın | IronBarcode durumsuzdur |
| Dosya girişi API'si yok | BarcodeReader.Read("path/to/file.png") | Yeni özellik |
| PDF API'si yok | BarcodeReader.Read("document.pdf") | Yeni özellik |
Takımlar ZXing.Net.MAUI'den IronBarcode'a Geçmeyi Düşündüğünde
Birden fazla somut senaryo, ZXing.Net.MAUI için bir yedek olarak IronBarcode'u değerlendirme kararını yönlendirir. Bunlar proje düzeyi ve ürün düzeyi koşullardır, uygulama tercihleri değildir.
Windows MAUIGereksinimleri
Yeniden değerlendirme için en yaygın tetikleyici, yalnızca iOS ve Android olarak başlayan bir projeyeWindows MAUIhedefinin eklenmesidir. MAUI ekipleri sıklıkla mobil öncelikli yapılarla başlar ve gereksinimler geliştikçe masaüstü hedeflerine genişler. Bu genişleme olduğunda, ZXing.Net.MAUI ilerlemek için bir yol sunmaz — Windows platformu uygulanmamış ve kamuya açık bir yol haritasında yer almıyor. Takım, barkod taramanın Windows'ta mevcut olmayacağını kabul etmeli veya kütüphaneyi değiştirmeli. Değişiklikle tarama deseni ne olursa olsun yapısal bir değişiklik gerektirdiği için, ekipler genellikle değişikliği aynı anda tüm platformlar için yapar.
Mevcut Nesil Donanım Uyumluluğu
iPhone 15 Pro otomatik odaklama sorunu (GitHub sorunu #260), bir üretim barkod tarayıcısı iOS kullanıcılarına sunan her takım için ciddi bir değerlendirme konusudur. iPhone 15 Pro ve Pro Max, cilalı bir uygulama deneyimi bekleyen tüketici segmentinde yaygındır ve kullanıcıların bir barkoda olan mesafelerini ayarlamalarını isteyen bir çözüm, eski iPhone donanımına kıyasla belirgin bir kullanıcı deneyimi gerilemesidir. QA'daki bu konuyu iş yüzeye çıkaran veya iPhone 15 Pro kullanıcılarından destek raporları alan takımlar, şu anda bir çözümün mevcut olmadığı bir kütüphanede kalmak ile kamera görüş odak modeli tarafından etkilenmeyen bir yaklaşıma geçmek arasında bir seçimle karşı karşıyadır.
Dosya ve Belge İşleme
Barkod tarama gereksinimleri nadiren sadece canlı kamera yakalama ile sınırlı kalır. Envanter tarayıcıları olarak başlayan uygulamalar, sıklıkla yüklenen PDF'lerden barkod okumaları, sevk irsaliyelerini işleme ve e-posta eklerinden dijital biletleri işleme eklemelerde genişler. ZXing.Net.MAUI, bu senaryolar için bir API'ye sahip değildir. Bir dosya veya belgeden barkod okuma gerektiren bir ürün gereksinimi kaydedildiğinde, ZXing.Net.MAUI kullanan ekipler, bunu ele almak için ayrı bir kütüphane eklemelidir. Takım bu dosya tabanlı senaryoların herhangi biri için zaten IronBarcode kullanıyorsa, MAUI kamera taramasını aynı kütüphaneye konsolide etmek doğal bir sonraki adım olur.
Üretim Kararlılık Gereksinimleri
v0.7.4'teki öncesi-1.0 tanımlaması — paketin kendisi kararlı bir NuGet sürümü iken — yazılım bileşimi analizi, bağımlılık denetimleri veya iç onay süreçlerine tabi olan ekipler için sonuçlar taşır. Bazı kurumsal ortamlar, üretim bağımlılıklarının bir 1.0+ kararlı sürüm taşımasını, ticari bir destek sözleşmesi veya her ikisini birden gerektirir. ZXing.Net.MAUI, topluluk tarafından bakımı yapılmakta ve öncesi-1.0'dir, bu da dahili araçlar ve prototipler için uyumludur, ancak barkod tarayıcılarının temel bir iş akışı olduğu müşteri odaklı uygulamalarda inceleme adımları ekler. Ücretli bir destek katmanının olmaması, kritik bir hatanın topluluk bakıcısının bulunabilirliğine bağlı olduğu anlamına gelir.
Genel Geçiş Dikkat Edilmesi Gereken Hususlar
ZXing.Net.MAUI'den IronBarcode'a geçiş üç belirli teknik değişikliği içerir ve barkod taramaya katılan kod tabanındaki her dosyayı etkiler.
CameraBarcodeReaderView'dan MediaPicker Desenine
CameraBarcodeReaderView XAML kontrolü ve xmlns:zxing ad alanı bildirimi tamamen kaldırıldı. Taranan bir görüntü görünümü içeren her XAML dosyasındaki değişim, MediaPicker.CapturePhotoAsync() işlemini Clicked işlemcisinde çağıran bir Button kontrolüdür. BarcodesDetected aracılığıyla sonuçların geldiği olaya dayalı model, doğrudan async işlemcisinde BarcodeReader.Read() dönüş değerini okuyarak değiştirilir.
IsDetecting Yaşam Döngüsü Kaldırılması
CameraView.IsDetecting devre dışı bırakmak için var olan her OnAppearing ve OnDisappearing geçersiz kılması silinebilir. Bu geçersiz kılmalar diğer sayfa yaşam döngüsü mantığını içeriyorsa, IsDetecting satırları kaldırılır ve kalan mantık korunur. IronBarcode'un IsDetecting'na eşdeğer bir şey yoktur çünkü sayfa gezintileri arasında yönetilmesi gereken kalıcı bir kamera durumu yoktur.
UseBarcodeReader() Kaydı Kaldırılması
ZXing.Net.MAUI, platform kamera hizmetlerini kaydetmek için MauiProgram.cs içinde tek seferlik builder.UseBarcodeReader() çağrısı gerektirir.IronBarcode herhangi bir MauiProgram.cs kaydı gerektirmez. UseBarcodeReader() satırı kaldırılır ve onu destekleyen using ZXing.Net.Maui; ad alanı ithalatı paket kaldırılması ile birlikte kaldırılır.
Ek IronBarcode Yetenekleri
Bu karşılaştırmada ele alınan senaryoların ötesinde, IronBarcode, bir kamera tabanlı MAUI kontrolünün sunduğunun çok daha ötesine geçen barkod işlevselliği sunar:
- iOS Barkod Tarama: Aynı
MediaPicker+BarcodeReader.Read()modelini kullanarak tamiOS MAUIdesteği — platforma özgü kamera yönetimi, format listeleri ve yaşam döngüsü gereksizleri yok. - Android Barkod Tarama: ZXing.Net.MAUI'de bulunan Kamer 1.5.0 bağımlılık sabitleme sorunları olmaksızın, aynı birleşik API üzerindenAndroid MAUItaraması.
- Barkod Üretimi: Konfigüre edilebilir boyutlandırma, renk, sessiz bölge ve hata düzeltme seviyesiyle resimler olarak QR kodları, Code128, EAN-13, PDF417, Data Matrix ve tüm büyük formatları üretir.
- Toplu İşleme: Tek bir çağrıda çok sayfalı bir PDF'nin tüm sayfalarındaki veya bir resim dizinindeki tüm barkodları okur, her sonuçla sayfa numarası meta verilerini döndürür.
- Sunucu Tarafı Dağıtım: Aynı NuGet paketi ve aynı
BarcodeReader.Read()çağrısı ASP.NET Core uç noktalarında, Azure İşlevlerinde ve Docker konteynerlerinde çalışır — bir paket hem mobil istemciyi hem de sunucu arka planını kapsar. - Hasarlı Barkod Kurtarma: Standart eşik temelli dönüştürücülerin işleyemediği fiziksel hasarlı etiketlerden, düşük kontrastlı baskılardan ve optimal olmayan açılarda yakalanan görüntülerden barkodları kurtaran makine öğrenme modelleri.
- Stilize Barkod Üretimi: ZXing.Net üzerinden sunulan tek renkli çıktının ötesinde özel renkler, gömülü logolar, yuvarlatılmış köşeler ve açıklama metni ile barkodlar üretir.
.NET Uyumluluğu ve Geleceğe Hazırlık
IronBarcode, düzenli güncellemelerle güncel .NET sürümlerine hitap eden aktif bir geliştirmeyi sürdürüyor. Kütüphane .NET 8, .NET 9'u destekler ve sonraki .NET sürümlerinin peşinden gider. Ayrıca, eski uygulama ortamları için .NET Framework 4.6.2 ve sonrası destekler. Topluluk tarafından bakımı yapılan, öncesi-1.0 paket olarak ZXing.Net.MAUI, .NET sürüm destek zaman çizelgeleri üzerinde resmi taahhütler taşımaz. MAUI projeleri için — .NET sürüm ritmine bağlı olanlar — her .NET sürümünü takip eden aktif bir şekilde sürdürülen, ticari olarak desteklenen bir kütüphanenin varlığı, uzun vadeli planlama için önemlidir.
Sonuç
ZXing.Net.MAUI ve IronBarcode, bir .NET MAUI uygulamasında barkod okuma konusundaki aynı soruna farklı cevaplar sunar — ancak farklı mimari öncüllerden başlarlar. ZXing.Net.MAUI, XAML sayfasına doğrudan yerleştirilmiş canlı bir kamera vizörü yerleştirir, analiz edilen kareler sırasında olayları tetikleyen kalıcı bir kamera kontrolü olarak çalışır. IronBarcode, kamerayı sistem MediaPicker yoluyla erişilen bir yakalama cihazı olarak ele alır, yakalamadan sonra statik bir görüntüyü işleyerek sürekli bir akışı yerine getirir. Yaklaşım farkı neredeyse her şeyi belirler: platform kapsamı, yaşam döngüsü karmaşıklığı, format işleme ve dağıtım kapsamı.
ZXing.Net.MAUI, belirli proje profilleri için gerçekten uygundur: iOS ve Android uygulamaları, prototipler ve dahili araçlar, barkod formatlarını önceden bilen ekipler,Windows MAUItarama gereksinimi olmayan projeler ve sıfır maliyetli MIT lisansının karar verici faktör olduğu durumlar. Sabit bir Android cihaz grubunda Code128 etiketlerini tarayan bir depo envanter tarayıcısı için, ZXing.Net.MAUI doğru çalışacaktır. Pre-1.0 durumu, iPhone 15 Pro sorunu ve yaşam döngüsü şablonları, doğru bağlamda kabul etmeye değer gerçek değiş tokuşlardır.
Proje kapsamı daha geniş olduğunda IronBarcode uygundur: Windows veyamacOS MAUIhedefleri, harici sistemlerden bilinmeyen veya değişken barkod formatları, PDF'lerden veya yüklenen dosyalardan barkod okuma gereksinimleri, üretim kalitesinde stabilite ihtiyaçları veya mobil taramanın ötesinde sunucu tarafı barkod işleme. Ticari lisans, destek, bakım ve .NET sürümleri genelinde uyumluluk güncellemelerini kapsayan bir yatırımdır. Durumsuz API, ZXing.Net.MAUI'nin geliştiricilerin manuel olarak önlem almasını gerektirdiği bir hata kategorisini — kamera kaynak sızıntıları, yaşam döngüsü durumu hataları — ortadan kaldırır.
Dürüst bir değerlendirme, hiç bir kütüphanenin evrensel olarak doğru olmadığıdır. ZXing.Net.MAUI, ilk kütüphane olarak birçok MAUI geliştiricisinin denediği haklıdır çünkü ücretsizdir, tanıdıktır ve entegrasyon hızlıdır. Taşıdığı problemlerin gerçek olduğu, ancak yalnızca belirli proje koşullarında önemli olduğu gerçeği. Bu koşullar mevcut olduğunda — bir Windows gereksinimi, mevcut nesil iPhone donanımı, dosya tabanlı tarama veya üretim kararlılık standartları — IronBarcode'un hepsini ele aldığı bir durum söz konusudur. Seçim, ZXing.Net.MAUI'nin bilinen sınırlamalarının engelleyici hale geldiği senaryoların içinde veya dışında projenin özel kısıtlamalarının olarak bulunup bulunmadığına bağlıdır.

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.