Spire.BarCode vs IronBarcode:C#バーコードライブラリの比較
ZXing.Net.MAUI 対 IronBarcode: C# MAUI バーコード比較 2026
ZXing.Net.Maui.Controls v0.7.4。NuGet で安定していますが、未だ1.0 の前。Windows MAUI のスキャンはサポートされていません(生成のみ)。 iPhone 15 Pro オートフォーカスに影響があることが文書化されています(問題 #260)。 Dispose() のないカメラリソースリーク(問題 #164)。 これは、ほとんど for .NET MAUI開発者が最初に手に取るライブラリであり、プロジェクト出荷前に最も頻繁に本番環境での問題点が明らかになるライブラリでもあります。
ZXing .NET.MAUI を理解する
ZXing .NET .MAUI は、Jon Dick ( GitHub : Redth) が MIT ライセンスの下で開発および公開した ZXing .NETバーコードライブラリの、コミュニティによってメンテナンスされている.NET MAUI版です。 XAMLのカメラコントロール、CameraBarcodeReaderView を提供し、MAUIページにライブバーコードスキャンビューファインダーを埋め込みます。 開発者は、カメラがフレームをキャプチャするときにスキャン結果を受け取るためのBarcodesDetectedイベントを接続します。 ライブラリは、BarcodeReaderOptions構成モデルを含むZXing.Netからフルバーコードフォーマットエンジンを継承します。
パッケージMauiProgram.csを介して登録され、iOSとAndroidのモバイルカメラパイプラインを中心に設計されています。 このライブラリは営利組織による支援を受けておらず、サービスレベル契約(SLA)も提供されておらず、有料サポートもありません。 そのバージョン v0.7.4 は安定した NuGet リリースですが、セマンティックバージョニングで未だ1.0 の前です。
ZXing .NET.MAUIの主なアーキテクチャ特性:
- プレ1.0 ステータス: NuGet パッケージは v0.7.4 で、安定していますが、まだ1.0 の前です。1.0 前のマイナーバージョンAPI変更は可能であり、バグ修正の頻度はコミュニティのメンテンナーに依存し、商業的サポート契約はありません。
- iOSおよび Android スキャン: ライブラリはiOS および Android のプラットフォームカメラAPIを中心に構築されています。Windows MAUIは生成のみをサポートしており、カメラスキャンは実装されていません。 Mac Catalyst はターゲットフレームワークリストに含まれていますが、スキャンは公式に文書化されていません。
- 連続カメラビューファインダー:
CameraBarcodeReaderViewは、ページが表示されている間継続して動作するライブカメラコントロールです。 画面上の領域を占有し、ページライフサイクル管理が必要となる。 - Dispose()の実装なし: このコントロールは
IDisposableを実装していません。 カメラリソースはページナビゲーションで正式に解放されず、GitHubの問題#164で記載されたIsDetecting = falseの回避策が必要です。 - iPhone 15 Proのオートフォーカス問題: GitHubの問題#260に記録されているように、iPhone 15 ProおよびPro Maxデバイス(ハードウェア識別子
iPhone16,2)は、バーコード検出のための信頼できるフォーカスを達成できません。 現在プログラミングによる修正は利用できません。 - Androidカメラの互換性問題: GitHubの問題#275は、AndroidX Camera 1.5.0との互換性競合によるビルドの失敗を追跡しており、回避策としてカメラパッケージを1.4.xに固定するか、プロジェクト
minSdkVersionを上げることを提案しています。 - ZXing.Netフォーマット仕様の継承: すべてのスキャンセッションでは、スキャンする
BarcodeFormats値を明示的に宣言する必要があります。BarcodeReaderOptions.Formatsにリストされていないフォーマットは、カメラフレームに表示されていても無音で無視されます。 -カメラ専用アーキテクチャ:このライブラリには、ファイル入力API、ストリーム読み取りAPI、およびPDFバーコード抽出機能はありません。 スキャンはすべてライブカメラのビューファインダーを通して行う必要があります。
CameraBarcodeReaderViewアーキテクチャ
CameraBarcodeReaderViewコントロールはZXing.Net.MAUIの中心的なコンポーネントです。 それはXAMLで宣言され、BarcodeReaderOptionsバインディングを通じて構成されます。 それを使用するすべてのページは、IsDetecting状態を管理する必要があります。
<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>
<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; // なし IDisposable on the control
}
protected override void OnAppearing()
{
base.OnAppearing();
if (CameraView != null)
CameraView.IsDetecting = true;
}
// Toggling IsDetecting in lifecycle overrides is the documented pattern
protected override void OnDisappearing()
{
base.OnDisappearing();
if (CameraView != null)
CameraView.IsDetecting = false; // なし IDisposable on the control
}
protected override void OnAppearing()
{
base.OnAppearing();
if (CameraView != null)
CameraView.IsDetecting = true;
}
' Toggling IsDetecting in lifecycle overrides is the documented pattern
Protected Overrides Sub OnDisappearing()
MyBase.OnDisappearing()
If CameraView IsNot Nothing Then
CameraView.IsDetecting = False ' なし IDisposable on the control
End If
End Sub
Protected Overrides Sub OnAppearing()
MyBase.OnAppearing()
If CameraView IsNot Nothing Then
CameraView.IsDetecting = True
End If
End Sub
ZXing .NET.MAUI アプリケーションのすべてのスキャンページには、このライフサイクル定型文が含まれています。 IsDetectingフラグを通じて手動で管理する必要があることを意味します。
IronBarcodeを理解する
IronBarcodeは、 Iron Software社が開発した、商用サポート付き for .NETバーコードライブラリです。 それは、画像バイト、ファイルパス、ストリーム、およびPDFドキュメントを受け入れる静的API、BarcodeReader.Read()を通じて、バーコードの読み取りと生成の両方を提供します。 MAUIのコンテキストでは、IronBarcodeはMAUIの組み込みのMediaPickerとペアになり、システムカメラを通じて画像をキャプチャし、続いてキャプチャ後の画像を処理します。
このライブラリは、同じパッケージとコードパスを通して、iOS、Android、Windows、macOSといったすべてのMAUIプラットフォームに対応しています。 MauiProgram.csではプラットフォーム固有のサービス登録は必要ありません。XAMLにカメラビューコントロールが埋め込まれておらず、IronBarcodeは動作中のカメラ状態を維持しないため、ライフサイクル管理も必要ありません。
IronBarcodeの主な特徴:
-安定版商用リリース:商用サポート、SLA、および定期的なリリースサイクルを備えた、本番環境に対応したNuGetパッケージとして公開されます。 -すべてのMAUIプラットフォーム:単一のパッケージと単一のコードパターンから、iOS、Android、Windows、macOSのMAUIターゲットをサポートします。
- ステートレスAPI:
BarcodeReader.Read()は静的メソッド呼び出しです。 スキャン間にバックグラウンドプロセスは実行されず、ライフサイクルフックも不要で、ページ遷移を経るごとにカメラのリソースが蓄積されることもありません。 -全フォーマットの自動検出:フォーマット指定リストなしで50種類以上のバーコードフォーマットを自動的に検出します。未知のフォーマットをスキャンする際に設定は不要です。 -ファイルおよびPDFの読み取り:ファイルパス、バイト配列、ストリーム、およびPDFドキュメントからバーコードをネイティブに読み取り、ライブカメラライブラリでは対応できないシナリオをカバーします。 - 機械学習を活用した破損バーコード復元:機械学習モデルを適用して、しきい値アルゴリズムでは実現できない、破損、部分的に隠蔽、または低品質の画像からバーコードを復元します。 -バーコード生成:主要な1次元および2次元バーコード形式すべてを、サイズ、色、余白を設定可能な画像として生成します。 -クロスデプロイメント:同じパッケージが、MAUI と並行して、ASP.NET Core、WPF、WinForms、コンソールアプリケーション、Azure Functions、および Docker コンテナで動作します。
機能比較
以下の表は、ZXing .NET.MAUIとIronBarcodeの主な違いをまとめたものです。
| フィーチャー | ZXing.Net.MAUI | IronBarcode |
|---|---|---|
| リリース状況 | 安定していますが1.0の前(v0.7.4)です。 | 安定した商業リリース |
| プラットフォームサポート | iOS、Android スキャン(Windows のみ生成) | iOS、Android、Windows、macOS、サーバー |
| フォーマット仕様が必要です | はい | いいえ(自動検出) |
| カメラリソース管理 | マニュアル(IsDetecting) |
該当なし — 無国籍 |
| PDFバーコード抽出 | 不可 | はい |
| ライセンス | MIT(無料、コミュニティ) | 商用 |
| 商業サポート | None | はい |
詳細な機能比較
| フィーチャー | ZXing.Net.MAUI | IronBarcode |
|---|---|---|
| プラットフォーム | ||
| iOS MAUI | はい (iPhone 15 Pro フォーカス問題 #260) | はい |
| アンドロイド MAUI | はい (カメラ1.5.0ビルド問題 #275) | はい |
| Windows MAUI | 生成のみ - スキャンは実装されていません | はい |
| macOS MAUI | Mac Catalyst を対象としています; スキャンは公式に文書化されていません | はい |
| ASP.NET Core / サーバー | なし | はい |
| WPF / WinForms | なし | はい |
| Azure Functions / Docker | なし | はい |
| .NET Framework 4.6.2以降 | なし | はい |
| 読む | ||
| フォーマット自動検出 | いいえ、フォーマットを指定する必要があります | はい(50種類以上のフォーマットに対応) |
| ファイルパスの入力 | ZXing経由(.NET Coreのみ) | はい |
| ストリーム入力 | ZXing経由(.NET Coreのみ) | はい |
| PDFバーコード抽出 | なし | はい |
| 破損したバーコードの復旧 | TryHarderのみ | はい(機械学習搭載) |
| カメラ統合 | ||
| ライブビューファインダーコントロール | はい | いいえ(MediaPickerシステムUI) |
| ライフサイクル管理が必要 | はい(検出中) | なし |
| Dispose() の実装 | なし | 該当なし |
| iPhone 15 Proのオートフォーカス | 影響を受けています(GitHub 問題 #260) | 該当なし |
| 世代 | ||
| バーコード生成 | はい(.NET経由) | はい |
| メンテナンス | ||
| リリース状況 | 安定していますが1.0の前(v0.7.4)です。 | 生産準備完了 |
| 商用サポート | None | はい |
| API安定性保証 | プレ1.0 - マイナーバージョンの変更の可能性があります | はい |
| ライセンス | MIT (無料) | 商用 |
プラットフォームサポート
プラットフォームの対応状況は、ZXing .NET.MAUIとIronBarcodeの構造的な違いです。なぜなら、これら2つのライブラリは、.NET MAUIアプリケーションが実行される環境について、根本的に異なる前提に基づいて構築されているからです。
ZXing .NET.MAUI アプローチ
ZXing.Net.MAUI は、iOS および Android のプラットフォームカメラAPIを中心に設計されています。Windows MAUIはバーコード生成のみをサポートしています - カメラスキャンは実装されておらず、公開されたロードマップにはありません。これは、モバイルオペレーティングシステム向けにのみ書かれたプラットフォーム実装のライブカメラビューコントロールを中心にライブラリを構築するというアーキテクチャ選択を反映しています。
net8.0-windows10.0.19041.0をターゲットとしたMAUIプロジェクトは、ZXing.Net.MAUIからバーコードスキャン機能を受け取りません。 Mac Catalyst はターゲットフレームワークリストに存在しますが、そのターゲットでのスキャンは公式には文書化されていません。 モバイル専用ターゲットからプロジェクトを開始し、その後に Windows または macOS の要件を追加するチームは、ZXing.Net.MAUI がそのターゲットでのスキャンをカバーできないことに気づくでしょう。 iOS のサポート自体には注意点があります:GitHub 問題 #260は、iPhone 15 Pro および Pro Max デバイスが、信頼できる検出を妨げるオートフォーカスの問題の影響を受けると文書化しています。
IronBarcodeのアプローチ
IronBarcodeは、同じパッケージとコードパターンで、MAUIのすべてのターゲットフレームワーク(iOS、Android、Windows、macOS)をサポートします。 MediaPicker + MediaPicker.CapturePhotoAsync()はデバイスカメラを呼び出します; Windowsでは、ファイルピッカーにマッピングされます。これはデスクトップ環境において適切な動作です。 プラットフォーム固有のコード、条件付きコンパイル、プラットフォームサービスの登録は一切不要です。
WindowsおよびmacOS向けのMAUIデスクトップバーコードパターンは、モバイルスキャンを処理するパッケージと同じものに含まれています。 Androidデバイスで動作する同じBarcodeReader.Read()呼び出しは、ASP.NET Coreエンドポイント、WinFormsデスクトップアプリケーション、またはAzure Functionでも動作し、APIはデプロイ対象に影響されません。
カメラの統合とライフサイクル
この2つのライブラリは、MAUIアプリケーションにおけるカメラアクセスの仕組みに関して、正反対のアーキテクチャ上の立場を取っている。
ZXing .NET.MAUI アプローチ
CameraBarcodeReaderViewはXAMLページに埋め込まれた持続的なカメラコントロールです。 falseに設定されると停止します。 IDisposableパターンを通じてカメラリソースが解放されないことを意味します。 文書化された緩和策として、OnAppearing()でそれを復元することが提案されています:
// 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 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 Sub
このパターンは、スキャナーが設置されているすべてのページで繰り返す必要があります。 スキャンページへの頻繁なナビゲーションを行うアプリケーションは、完全に解放されていないカメラリソースを蓄積する可能性があり、GitHub 問題 #164 ではメモリの増加と再び初期化されるカメラのレポートが追跡されています。 iPhone 15 Proのオートフォーカス問題(GitHub問題#260)は、カメラ統合レイヤー内の別の懸念事項であり、カメラビューはバーコードを明確にレンダリングしますが、オートフォーカスシステムがiPhone16,2ハードウェアで検出するのに十分にシャープにロックしません。 文書化された回避策は、ユーザーにデバイスとバーコードとの距離を手動で調整するように指示することです。
IronBarcodeのアプローチ
IronBarcodeは、XAMLレイアウトにカメラコントロールを埋め込んでいません。 代わりに、ユーザーがボタンをタップするとMediaPicker.CapturePhotoAsync()呼び出しがシステムカメラUIを開きます。 システムカメラは、フォーカス、露出、オートフォーカスをそれぞれ独立して処理します。 ユーザーがキャプチャを確認すると、結果として得られたイメージがバイト配列としてBarcodeReader.Read()へ渡されます:
// 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}");
}
// なし OnAppearing or OnDisappearing needed — no camera state to manage
// 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}");
}
// なし OnAppearing or OnDisappearing needed — no camera state to manage
Imports IronBarCode
Imports System.IO
Private Async Sub ScanButton_Clicked(sender As Object, e As EventArgs)
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then Return
Using stream = Await photo.OpenReadAsync()
Using ms As New MemoryStream()
Await stream.CopyToAsync(ms)
Dim results = BarcodeReader.Read(ms.ToArray())
For Each barcode In results
Console.WriteLine($"{barcode.Format}: {barcode.Value}")
Next
End Using
End Using
End Sub
' なし OnAppearing or OnDisappearing needed — no camera state to manage
.NET MAUIバーコードスキャナーのチュートリアルでは、 iOSとAndroidの両方の権限設定を含め、このパターンのプロジェクト設定全体を網羅しています。 永続的なカメラビューがないため、解放すべきリソースも、切り替えるべき状態も、ページ間で維持すべきライフサイクルの定型コードもありません。
フォーマット仕様
図書館がバーコード形式の検出をどのように処理するかは、実際の運用環境におけるスキャンの信頼性に直接的な影響を与える。
ZXing .NET.MAUI アプローチ
ZXing .NET.MAUI は、ZXing .NETフォーマット仕様の要件を継承しています。 スキャンが開始される前に、開発者は、検出されるべきBarcodeReaderOptions.Formatsを埋める必要があります。 このリストに含まれていないフォーマットは検出されません。エラーや警告は一切表示されません。
// 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
{
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
}
ユーザーがカメラを GS1 データバー、Aztecコード、MaxiCode、またはオプションで宣言されていない形式に向けると、スキャンはエラーを発生することなく結果を返しません。 カメラはバーコードをレンダリングし、結果はアプリケーションに返されません。 管理された環境、つまりすべての商品にCode128ラベルが貼付されている倉庫であれば、これは管理可能である。 バーコード形式が外部サプライヤー、顧客、またはサードパーティシステムによって決定されるデプロイメントでは、フォールバックパスの欠如が繰り返されるサポート問題になります。
IronBarcodeのアプローチ
IronBarcodeは、事前設定なしで、サポートされているすべてのフォーマットを自動的に検出します。 BarcodeReader.Read()は画像を分析し、フォーマットにかかわらず、それが識別したすべてのバーコードの結果を返します。 BarcodeReaderOptionsリストは必要ありません:
// 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}");
// 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}")
Next
単一のフォーマットのみが想定される制御されたシナリオでパフォーマンス調整が必要な場合は、フォーマットヒントをオプションで渡すことができますが、正しい検出のために必須となることはありません。 開発者が想定していなかった形式のバーコードでも、検出されて結果が返されます。
ファイルおよびPDF処理
ライブカメラによるスキャン以外にも、多くの生産現場におけるバーコードワークフローでは、出荷請求書、デジタルチケット、アップロードされた画像、PDF添付ファイルなど、保存された文書からの読み取りが行われます。
ZXing .NET.MAUI アプローチ
ZXing .NET.MAUIはカメラ制御ライブラリです。 ファイルパス、ストレージから直接渡されるバイト配列、またはPDFドキュメントからバーコードを読み取るためのAPIは提供されていません。 CameraBarcodeReaderViewコントロールはライブカメラフィードを必要とします; ファイルパスを受け取ってバーコードの結果を返す静的メソッドはありません。 アップロードされたPDF、文書管理システム、またはバッチ画像処理キューからバーコードを読み取る必要があるチームは、これらのシナリオでZXing .NET.MAUIを使用することはできず、別のライブラリを導入する必要があります。
IronBarcodeのアプローチ
IronBarcodeは同じBarcodeReader.Read()メソッドを通じて任意のソースからバーコードを読み込みます。 ファイルパス、バイト配列、ストリーム、およびPDFドキュメントを受け付けます。 PDF解析はネイティブ機能です。IronBarcodeは、中間的なラスタライズ処理を経ずにPDFページを直接処理します。
// 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}";
}
// 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
複数ページの文書やページ間で異なるバーコード形式が混在する場合を含む、PDFバーコード読み取りの完全なワークフローについては、 "PDFからバーコードを読み取る"ガイドに記載されています。 これは、ZXing .NET.MAUI のカメラのみのアーキテクチャでは対応できない、出荷請求書、デジタルチケット、文書管理ワークフロー、バッチ処理シナリオを網羅しています。
APIマッピングリファレンス
| ZXing.Net.MAUI | IronBarcode | ノート | |
|---|---|---|---|
builder.UseBarcodeReader() |
不要 | MauiProgram.csから除去 |
|
xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;..." |
不要 | XAML名前空間宣言を削除します | |
<zxing:CameraBarcodeReaderView> |
<Button> + MediaPickerに置き換え |
建築様式の変化 | |
Options="{Binding ReaderOptions}" |
不要 | オプションオブジェクトは不要です | |
BarcodesDetected="OnBarcodesDetected" |
BarcodeReader.Read()返り値 |
イベント → メソッドの戻り値 | |
| 新しい BarcodeReaderOptions { Formats = BarcodeFormats.X . | ... }` | 不要 | 自動検出がこれを置き換えます |
BarcodeDetectionEventArgs e |
IEnumerable<BarcodeResult> |
異なる成果提供モデル | |
e.Results |
BarcodeReader.Read()の返り値 |
||
barcode.Value |
result.Value |
同じプロパティ名 | |
barcode.Format |
result.Format |
同じプロパティ名 | |
BarcodeFormats.QRCode |
BarcodeEncoding.QRCode |
列挙型の名前変更 | |
BarcodeFormats.Code128 |
BarcodeEncoding.Code128 |
列挙型の名前変更 | |
BarcodeFormats.Ean13 |
BarcodeEncoding.EAN13 |
列挙型の名前変更 | |
CameraView.IsDetecting = false (OnDisappearing) |
不要です — メソッドを削除してください | IronBarcodeはステートレスです | |
CameraView.IsDetecting = true (OnAppearing) |
不要です — メソッドを削除してください | IronBarcodeはステートレスです | |
| ファイル入力APIがありません | BarcodeReader.Read("path/to/file.png") |
新機能 | |
| PDF APIなし | BarcodeReader.Read("document.pdf") |
新機能 |
チームがZXing .NET.MAUIからIronBarcodeへの移行を検討する際
IronBarcodeをZXing .NET.MAUIの代替として評価するという決定には、いくつかの具体的なシナリオが影響している。 これらはプロジェクトレベルおよび製品レベルの条件であり、実装上の好みではありません。
Windows MAUIの要件
再評価の最も一般的なきっかけは、当初iOSとAndroidのみを対象としていたプロジェクトに、Windows MAUIターゲットを追加することである。 MAUIチームは、モバイルファーストの構築から始め、要件の変化に応じてデスクトップ向けへと拡張していくことが多い。 その拡張が実現した場合、ZXing .NET.MAUIには先行きが全く見えません。Windowsプラットフォームは実装されておらず、公式ロードマップにも掲載されていないからです。開発チームは、Windows上でバーコードスキャンが利用できなくなることを受け入れるか、ライブラリを置き換えるかのどちらかを選択しなければなりません。 交換作業はスキャンパターンの構造的な変更を伴うため、通常、チームはすべてのプラットフォームで同時に変更を実施します。
現行世代ハードウェアとの互換性
iPhone 15 Pro オートフォーカス問題(GitHub 問題 #260)は、生産バーコードスキャナーをiOSユーザーに提供するチームにとって現実的な考慮事項です。 iPhone 15 Pro および Pro Max は、洗練されたアプリケーション体験を期待する消費者セグメントで一般的であり、ユーザーにバーコードからの距離を調整するように求める回避策は、古い iPhone ハードウェアと比較して顕著な UX の退行です。 QAでこの問題に直面するチームや、iPhone 15 Pro ユーザーからのサポート報告を受けるチームは、現在のライブラリにとどまるか、カメラビューフォーカスモデルに影響を受けないアプローチに移行するかの選択を迫られます。
ファイルおよび文書の処理
バーコードスキャンの要件は、ライブカメラによるキャプチャに限定されることはほとんどありません。 在庫スキャナーとして始まったアプリケーションは、アップロードされたPDFからバーコードを読み取ったり、出荷請求書を処理したり、メール添付ファイルからデジタルチケットを処理したりするなど、機能を拡大していくことがよくあります。 ZXing .NET.MAUIには、これらのシナリオに対応するAPIは存在しません。 ファイルやドキュメントからバーコードを読み取るという製品要件がバックログに登録された場合、ZXing .NET.MAUI を使用するチームは、それを処理するための別のライブラリを導入する必要があります。 チームが既にこれらのファイルベースのシナリオのいずれかでIronBarcodeを使用している場合、MAUIカメラのスキャン結果を同じライブラリに統合することは、自然な次のステップとなります。
生産安定性要件
v0.7.4 のプレ1.0 デザイン — パッケージ自体は安定した NuGet リリースである一方 — は、ソフトウェア構成解析、依存性監査、または社内承認プロセスに従っているチームに影響を与えます。 一部のエンタープライズ環境では、製品依存関係に1.0+安定リリース、商業的サポート契約、またはその両方が含まれる必要があります。 ZXing.Net.MAUI はコミュニティによって維持され、プレ1.0であり、内部ツールやプロトタイプに適合しますが、バーコードスキャナーが主要なワークフローであるカスタマーフェーシングアプリケーションではレビューのステップが追加されます。 有料サポート層がないため、重大なバグはコミュニティメンテナの可用性に依存します。
一般的な移行の考慮事項
ZXing .NET.MAUIからIronBarcodeへの構造的な変更には、バーコードスキャンに関与するコードベース内のすべてのファイルに影響を与える3つの具体的な技術的置き換えが含まれます。
CameraBarcodeReaderView から MediaPicker へのパターン
CameraBarcodeReaderView XAMLコントロールとそのxmlns:zxing名前空間宣言は完全に削除されました。 スキャナービューを含む各XAMLファイルでは、置き換えとしてButtonコントロールが提供されます。 結果がBarcodeReader.Read()の戻り値を直接読み取りに置き換えられました。
ライフサイクル削除を検出しています
CameraView.IsDetectingをトグルするだけの存在意義を持つものはすべて削除できます。 それらのオーバーライドに他のページのライフサイクルロジックが含まれている場合、IsDetecting行が削除され、残りのロジックは維持されます。 IsDetectingに相当するIronBarcodeは存在しないため、ページナビゲーション間で管理する持続的なカメラ状態はありません。
UseBarcodeReader() 登録解除
ZXing.Net.MAUIはbuilder.UseBarcodeReader()呼び出しを必要とします。 IronBarcodeはMauiProgram.cs登録を必要としません。 using ZXing.Net.Maui;名前空間のインポートもパッケージのアンインストールとともに削除されます。
IronBarcodeの追加機能
この比較で取り上げたシナリオ以外にも、 IronBarcodeはカメラベースのMAUIコントロールが提供できる範囲をはるかに超えるバーコード機能を提供します。
- iOSバーコードスキャン: プラットフォーム固有のカメラ管理、形式リスト、およびライフサイクルテンプレートなしで、同じ
MediaPicker+BarcodeReader.Read()パターンを使用してフルiOS MAUIサポート。 - Android バーコード スキャン:アンドロイド MAUIは、ZXing .NET.MAUI に存在する Camera 1.5.0 の依存関係の固定の問題なしに、同じ統一 API を介してスキャンします。 -バーコード生成: QRコード、Code128、EAN-13、PDF417、データマトリックス、および主要なすべてのフォーマットを、サイズ、色、静止領域、エラー訂正レベルを設定可能な画像として生成します。 -バッチ処理:複数ページのPDFファイルまたは画像ディレクトリのすべてのページからすべてのバーコードを1回の呼び出しで読み取り、各結果とともにページ番号のメタデータを返します。
- サーバーサイドデプロイメント: 同じNuGetパッケージと同じ
BarcodeReader.Read()呼び出しは、ASP.NET Coreエンドポイント、Azure Functions、およびDockerコンテナで動作します—1つのパッケージがモバイルクライアントとサーバーバックエンドの両方をカバー。 -破損したバーコードの復元:機械学習モデルは、物理的に破損したラベル、コントラストの低い印刷物、標準的な閾値ベースのデコーダーでは処理できない最適ではない角度で撮影された画像からバーコードを復元します。 -スタイル付きバーコード生成: ZXing .NETで利用可能な単純なモノクロ出力を超えて、カスタムカラー、埋め込みロゴ、角丸、注釈テキストを含むバーコードを生成します。
.NETの互換性と将来の準備
IronBarcodeは、最新 for .NETリリースを対象とした定期的なアップデートを行い、活発な開発を続けています。 このライブラリは .NET 8、.NET 9 をサポートし、後続の .NET リリースを追跡します。 また、遺産のアプリケーション環境のために .NET Framework 4.6.2 以降をサポートします。 ZXing.Net.MAUI はコミュニティによって維持されるプレ1.0のパッケージであって、.NET バージョンサポートタイムラインに関する正式なコミットメントはありません。 MAUIプロジェクトは.NETのリリースサイクルに連動しているため、各.NETバージョンを追跡する、積極的にメンテナンスされ、商用サポートされているライブラリが利用できるかどうかは、長期的な計画において重要となる。
結論
ZXing .NET.MAUIとIronBarcodeは、 .NET MAUIアプリケーションでバーコードを読み取るという同じ問題に対する異なる解決策を表していますが、それぞれ異なるアーキテクチャ上の前提に基づいています。 ZXing .NET.MAUI は、ライブカメラのビューファインダーを XAML ページに直接埋め込み、フレームが分析される際にイベントを発生させる永続的なカメラ コントロールとして動作します。 IronBarcodeはカメラをシステムMediaPickerを通じてアクセスされるキャプチャデバイスと見なしており、静止画像をキャプチャ後に処理します。 このアプローチの違いが、プラットフォームの対応範囲、ライフサイクルの複雑さ、フォーマットの処理、展開範囲など、ほぼすべての事柄を決定づける。
ZXing.Net.MAUI は特定のプロジェクトプロファイルに本当に適しています:iOS と Android のアプリケーション、プロトタイプと内部ツール、事前にバーコード形式を知っているチーム、Windows MAUI スキャン要件がないプロジェクト、および無償のMITライセンスが決定要因である状況。 Code128ラベルをスキャンする固定されたAndroidデバイス群上の倉庫在庫スキャナーの場合、ZXing .NET.MAUIは正しく動作します。 0.7.4 のプレ1.0 ステータス、iPhone 15 Pro 問題、およびライフサイクルボイラープレートは、適切なコンテキストで受け入れる価値がある現実的なトレードオフです。
IronBarcodeは、プロジェクトの範囲が広い場合に適しています。例えば、WindowsまたはmacOSのMAUIをターゲットとする場合、外部システムからの不明または可変のバーコード形式に対応する場合、PDFやアップロードされたファイルからバーコードを読み取る必要がある場合、本番環境レベルの安定性が求められる場合、モバイルスキャンに加えてサーバー側でのバーコード処理が必要な場合などです。 商用ライセンスは、 .NETの各バージョンにわたるサポート、メンテナンス、および互換性アップデートをカバーする投資です。 ステートレスAPIは、ZXing .NET.MAUIでは開発者が手動で防止する必要があった、カメラのリソースリークやライフサイクル状態のエラーといった種類のバグを排除します。
率直に言って、どちらの図書館も完全に正しいとは言えない。 ZXing .NET.MAUIは、無料であること、使い慣れていること、そして統合が迅速であることから、多くのMAUI開発者が最初に試すライブラリとしての地位を確立しています。 それらが抱える問題は確かに存在するが、特定のプロジェクト条件下でのみ重要となる。 Windowsの要件、最新世代のiPhoneハードウェア、ファイルベースのスキャン、または生産安定性基準といった条件が存在する場合、 IronBarcodeはそれらすべてに対応します。 選択は、プロジェクト固有の制約によって、ZXing .NET.MAUI の既知の制限が障害となるシナリオの内側にあるか外側にあるかによって決まります。
よくある質問
ZXing.Net.MAUIとは何ですか?
ZXing.Net.MAUIは、C#アプリケーションでバーコードを生成して読み取るため for .NETバーコードライブラリです。これは、開発者が.NETプロジェクトのバーコードソリューションを選択する際に評価するいくつかの選択肢の1つです。
ZXing.Net.MAUIとIronBarcodeの主な違いは何ですか?
IronBarcodeはインスタンス管理を必要としない静的なステートレスAPIを使用します。一方、ZXing.Net.MAUIは通常、使用前にインスタンスの作成と設定が必要です。IronBarcodeはまた、ネイティブPDFサポート、自動フォーマット検出、すべての環境でのシングルキーライセンスを提供します。
IronBarcodeはZXing.Net.MAUIよりもライセンスが簡単ですか?
IronBarcodeは単一のライセンスキーで開発環境と本番環境の両方をカバーします。これは、SDKキーとランタイムキーを分離するライセンスシステムと比較して、CI/CDパイプラインとDocker構成を簡素化します。
IronBarcodeはZXing.Net.MAUIがサポートしているすべてのバーコードフォーマットをサポートしていますか?
IronBarcodeはQRコード、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1など30以上のバーコードシンボロジーをサポートしています。フォーマットの自動検出は、明示的なフォーマットの列挙が不要であることを意味します。
IronBarcodeはネイティブPDFバーコード読み取りをサポートしていますか?
IronBarcodeは、別のPDFレンダリングライブラリを必要とせず、BarCodeReader.Read("document.pdf")を使用してPDFファイルから直接バーコードを読み取ります。ページごとの結果には、ページ番号、バーコードフォーマット、値、信頼度スコアが含まれます。
IronBarcodeはZXing.Net.MAUIと比べてどのようにバッチ処理を行いますか?
IronBarcodeの静的メソッドはステートレスで当然スレッドセーフであり、スレッドごとのインスタンス管理なしにParallel.ForEachを直接使用できます。どの価格帯でもスループットの上限はありません。
IronBarcode はど for .NETバージョンをサポートしていますか?
IronBarcodeは.NET Framework 4.6.2+、.NET Core 3.1、.NET 5、6、7、8、9を単一のNuGetパッケージでサポートしています。プラットフォーム・ターゲットには、Windows x64/x86、Linux x64、macOS x64/ARMが含まれます。
.NETプロジェクトにIronBarcodeをインストールするには?
NuGet経由でIronBarcodeをインストールする:パッケージマネージャーコンソールで'Install-Package IronBarCode'を実行するか、CLIで'dotnet add package IronBarCode'を実行する。追加のSDKインストーラーやランタイムファイルは必要ありません。
ZXing.Net.MAUIとは異なり、購入前にIronBarcodeを評価することはできますか?
IronBarcodeのトライアルモードでは、完全なデコードされたバーコード値を返します。購入を決定する前に、ご自身のドキュメントで読み取り精度をベンチマークすることができます。
ZXing.Net.MAUIとIronBarcodeの価格の違いは何ですか?
IronBarcodeは、開発および量産をカバーする永続的なシングルデベロッパーライセンスで749ドルからご利用いただけます。価格の詳細とボリュームオプションはIronBarcodeのライセンスページでご覧いただけます。別途ランタイムライセンスは必要ありません。
ZXing.NET.MAUIからIronBarcodeへの移行は簡単ですか?
ZXing.Net.MAUIからIronBarcodeへの移行は、主にインスタンスベースのAPIコールをIronBarcodeの静的メソッドに置き換え、ライセンスの定型文を削除し、結果のプロパティ名を更新します。ほとんどの移行はコードを追加するのではなく、コードを削減します。
IronBarcodeはロゴ入りQRコードを生成できますか?
はい。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")は、設定可能なエラー修正機能付きで、ブランド画像をネイティブにQRコードに埋め込みます。カラーQRコードもChangeBarCodeColor()でサポートされています。

