BarcodeScanning.MAUI vs IronBarcode:C#バーコードライブラリの比較
BarcodeScanning.Native.Mauiはカメラプラグインであり、バーコードライブラリではありません。 アプリがWindows上で動作したり、アップロードされたファイルを処理したり、PDFからバーコードを読み取ったりする場合は、このツールは不適切です。そして、READMEにはそのことが最初から明確に記載されていません。 パッケージページでは、"BarCode scanning library for .NET MAUI "と説明されており、技術的には正確ですが、重要な制約が抜けています。 これが全機能です。 この比較では、カメラ制御ライブラリとフル機能のバーコードSDKのアーキテクチャ上の違いを検証し、それぞれのツールがどのような用途に適しているか、またどのような点で不足しているかをチームが理解するのに役立ちます。
バーコードスキャンについて理解する。MAUI
BarCodeScanning.Native.Mauiは、iOS(AppleのVisionフレームワーク)とAndroid(ML Kit)のネイティブカメラバーコード検出APIをMAUI CameraView コントロールにラップします。 開発者はコントロールをXAMLページに配置し、イベントハンドラーを設定すると、ライブラリはライブカメラの映像でバーコードが検出されるたびにそのイベントを発生させます。 インタラクションモデル全体は、カメラ入力、イベント出力という方式であり、それ以外の経路は存在しない。
このライブラリはオープンソースであり、MITライセンスの下で無料で利用できます。 その設計目標は明確かつ限定的である。iOSおよびAndroidのMAUIアプリケーション向けに、最小限のAPIでライブカメラによるバーコード検出機能を提供することだ。 独自のバーコードデコードエンジンを実装するのではなく、ネイティブプラットフォームのAPIに処理を委譲することで、その目的を達成しています。
BarcodeScanning.Native.Maui の主なアーキテクチャ特性:
-カメラのみの入力:このライブラリは、ライブカメラフレームのみを受け付けます。 公開APIのどこにも、@@--CODE-38409--@、@@--CODE-38410--@、@@--CODE-38411--@、および@@--CODE-38412--@メソッドはありません。
- iOSおよびAndroidのみ:このライブラリは、iOS固有の(Visionフレームワーク)ネイティブAPIとAndroid固有の(ML Kit)ネイティブAPIをラップしています。MAUIのWindowsターゲットは実装されておらず、実装予定もありません。 -生成機能なし: BarcodeScanning.Native.Maui はカメラフレームからバーコードを読み取ります。 いかなる形式のバーコードも生成できません。
- iOSのUPC-Aの不正確さ: AppleのVisionフレームワークは、UPC-Aバーコードに対して13桁を返します(EAN-13エンコーディングに合わせるために先頭にゼロを追加します)。 このライブラリは修正せずに生の値をそのまま渡すため、アプリケーションコードで手動での回避策が必要になります。
- PDF417の信頼性に関する既知の問題:図書館独自のGitHub課題追跡システムでは、PDF417のスキャンが"非常に問題が多く、ほとんどのスキャンが実行されない"と記録されており、これは配送ラベル、運転免許証、搭乗券のスキャンを直接阻害する要因となっています。
- Minimal Public Surface:パブリックAPIは、@--CODE-38413--@、@--CODE-38414--@、@--CODE-38415--@、@--CODE-38416--@、および@--CODE-38417--@と@--CODE-38418--@で構成されています。 それが、アプリケーションコードがやり取りする対象の全てです。
- MITライセンス、無料:このライブラリはライセンス料なしで無料で利用できます。
ライブカメラのスキャンパターン
BarcodeScanning.Native.Maui API パターン全体は、XAML コントロールと C# イベント ハンドラーの組み合わせで構成されています。
<scanner:CameraView x:Name="CameraView"
OnDetectionFinished="OnBarcodeDetected"
CameraEnabled="True"
BarcodeFormats="All" />
<scanner:CameraView x:Name="CameraView"
OnDetectionFinished="OnBarcodeDetected"
CameraEnabled="True"
BarcodeFormats="All" />
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArgs)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode IsNot Nothing Then
ResultLabel.Text = barcode.DisplayValue
End If
End Sub
このコントロールにより、ユーザーはMAUIページに埋め込まれたリアルタイムのビューファインダーを利用できるようになります。 カメラ映像がアクティブな間は、バーコード検出機能が継続的に作動します。"ポイント&スキャン"が主な操作となるコンシューマー向けアプリにとって、このユーザーエクスペリエンスは非常に優れています。 制限事項としては、このライブラリがサポートするインタラクションはこれだけであり、iOSやAndroidでのライブカメラ検出を超える要件が発生した場合、BarcodeScanning.Native.Mauiでは対応できません。
IronBarcodeを理解する
IronBarcodeは、カメラのストリームではなくデータ入力に基づいて動作する、 .NET向けの商用バーコード読み取りおよび生成ライブラリです。 画像ファイル、バイト配列、ストリーム、およびPDFドキュメントからバーコードを読み取ります。 MAUIでは、MediaPickerを通じてシステムカメラと統合します。これは、アプリケーションが写真選択に使用するのと同じ標準MAUI APIで、写真をキャプチャし、静的入力として結果の画像を処理します。
IronBarcodeはプラットフォーム固有のネイティブAPIに委ねるのではなく、独自のバーコードデコードエンジンを実装しています。これはiOS、Android、Windows、macOS、ASP.NET、バックグラウンドサーバープロセスにおいて同じBarcodeReader.Read()@呼び出しが一貫して動作することを意味します。 このライブラリは、BarcodeWriterとQRCodeWriterを通じて、完全なBarCode生成APIも提供します。
IronBarcodeの主な特徴:
- 静的ファイルベースAPI: @--CODE-38423--@@ ファイルパス、バイト配列、ストリーム、PDFなど、あらゆる静的データソースを受け入れます。 -フルプラットフォーム対応: iOS、Android、Windows、macOSのMAUIターゲットがすべてサポートされています。 同じコードは、プラットフォーム固有の分岐なしに、4つのプラットフォームすべてで動作します。
- バーコード生成: @--CODE-38424--@@および@--CODE-38425--@@は、Code128、QR、DataMatrix、およびその他のフォーマットを画像ファイルまたはバイト配列として生成します。
- PDF対応: PDF文書に埋め込まれたバーコードは、中間的な画像抽出ステップを経ることなく直接読み取られます。 -正確なUPC-Aデコード:手動による正規化の回避策を必要とせずに、正しい12桁のUPC-A値を返します。 -商用ライセンス: Lite 749ドル、 Plus 1,499ドル、 Professional 2,999ドル、Unlimited 5,999ドル — 1年間のサポート付き永久ライセンス。 -サーバーサイド展開: ASP.NET、Azure Functions、Dockerコンテナ、AWS Lambdaで動作し、物理カメラへのプラットフォーム依存はありません。
機能比較
以下の表は、BarcodeScanning.Native.MauiとIronBarcodeの基本的な違いをまとめたものです。
| フィーチャー | BarcodeScanning.MAUI | IronBarcode |
|---|---|---|
| 主な目的 | ライブカメラのバーコード検出 | あらゆるデータソースからのバーコードの読み取りと生成 |
| 入力ソース | ライブカメラのフレームのみ | ファイル、バイト配列、ストリーム、PDF |
| プラットフォームサポート | iOSおよびAndroid版MAUIのみ | iOS、Android、Windows、macOS MAUI + サーバーサイド |
| バーコード生成 | なし | はい — BarcodeWriter + QRCodeWriter |
| ライセンスモデル | MIT(無料、オープンソース) | 商用プラン -Lite749ドル~無制限プラン 5,999ドル |
| サーバーサイド / ASP.NET | なし | はい |
詳細な機能比較
| フィーチャー | BarcodeScanning.MAUI | IronBarcode |
|---|---|---|
| 読む | ||
| ライブカメラのフレーム読み取り | はい — CameraView コントロール | いいえ(MediaPickerを使用してキャプチャし、その後読み取ってください) |
| アプリ内カメラビューファインダー | はい、リアルタイムで連続的に | いいえ — MediaPicker を介してシステムカメラ UI を使用します |
| 画像ファイルから読み込む | なし | はい - --コード-38426--@@@。 |
| バイト配列から読み込む | なし | はい - --コード-38427--@@@。 |
| ストリームから読み込む | なし | はい - @--CODE-38428--@@@. |
| PDFから読み込む | なし | はい - --CODE-38429--@@@. |
| 複数バーコード検出 | あり(1フレームにつき複数可、e.BarcodeResults経由) |
はい (@--CODE-38431--@@ オプション) |
| 読書速度制御 | なし | コード-38432--/コード-38433--/コード-38434--/コード-38434 |
| iOSにおけるUPC-Aの精度 | 13桁の数字を返す(バグ)、手動での正規化が必要 | 正しい12桁のUPC-Aコードを返します |
| PDF417の信頼性 | "ほとんどのスキャンは実行されない"(GitHubの課題) | サポート対象 |
| 世代 | ||
| バーコード生成 | なし | はい---コード-38435--@@@。 |
| QRコード生成 | なし | はい - @--CODE-38436--@@@. |
| PNG形式またはバイト配列として出力 | なし | はい |
| プラットフォーム | ||
| iOS MAUI | はい | はい |
| アンドロイド MAUI | はい | はい |
| Windows MAUI | なし | はい |
| macOS MAUI | 記録なし | はい |
| ASP.NET / サーバーサイド | なし | はい |
| Docker / Azure / AWS Lambda | なし | はい |
| .NET Frameworkのサポート | いいえ(マウイ島のみ) | はい — .NET Framework 4.6.2以降 |
| ライセンスについて | ||
| ライセンスの種類 | MIT(オープンソース) | 商用永久 |
| コスト | 無料 | Lite: 749ドル、Plus: 1,499ドル、Professionalプラン:2,999ドル、アンリミテッドプラン:5,999ドル |
| 評価モード | 該当なし | 無料トライアルあり |
アーキテクチャ:カメラ制御とファイル処理APIの比較
これら2つのライブラリの最も根本的な違いは、入力モデルです。 BarcodeScanning.Native.Mauiは、連続的なカメラストリームを中心に設計されています。 IronBarcodeは、離散的なデータ入力を前提として設計されています。 これらは同じアイデアを競合的に実装したものではなく、異なるユースケースに対応した異なるアーキテクチャ上の選択肢である。
バーコードスキャン。MAUIアプローチ
BarcodeScanning.Native.Mauiは、各プラットフォームのネイティブカメラ検出パイプラインをラップします。 Androidでは、ML Kitがフレームを処理します。 iOSでは、AppleのVisionフレームワークがフレームを処理します。 このライブラリは、MAUIのCameraView@コントロールとして、OnDetectionFinished@イベントとともに表示されます。 アプリケーションコードは画像バイトを直接処理することはなく、イベントから得られる検出されたバーコード値のみを処理します。
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArgs)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode IsNot Nothing Then
ResultLabel.Text = barcode.DisplayValue
End If
End Sub
この設計の結果、他に侵入経路は存在しない。 カメラは必須です。図書館が認識する唯一の入力機器です。 サーバー、ファイル、PDF、Windowsマシン――これらのどれも、このライブラリが想定するような意味でのカメラは備えていません。
IronBarcodeのアプローチ
IronBarcodeは静的メソッドで画像データを受け取ります。 呼び出し元はあらゆるソースからデータを提供し、ライブラリがそれをデコードする。 MAUIでは、データはMediaPickerから来ています; サーバー上では、フォームアップロードによって取得されます。 デスクトップアプリケーションでは、ファイルダイアログから取得されます。
// IronBarcode in MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanBarcodeButton_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 result in results)
ResultLabel.Text = result.Value;
}
// IronBarcode in MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanBarcodeButton_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 result in results)
ResultLabel.Text = result.Value;
}
Imports IronBarCode
Imports System.IO
Private Async Sub ScanBarcodeButton_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 result In results
ResultLabel.Text = result.Value
Next
End Using
End Using
End Sub
このコードは、iOS、Android、およびWindows MAUIで全く同じように動作します。 サーバサイドで使用する場合、同じBarcodeReader.Read()メソッドは、アップロードされたファイルのバイト配列またはPDFパスを受け入れます。 IronBarcodeのドキュメントには、サポートされているすべての入力タイプが記載されています。
プラットフォーム対応範囲とWindowsサポート
プラットフォームの対応範囲は、MAUI アプリケーションを構築するチームにとって、BarcodeScanning.Native.Maui の構造的な制約が具体的に現れる部分です。
バーコードスキャン。MAUIアプローチ
BarcodeScanning.Native.Maui は、MAUI の Windows ターゲットをサポートしていません。 これは一時的な隙間ではなく、図書館の建築構造に起因する構造的な結果である。 このライブラリは、iOS固有のネイティブAPI(Visionフレームワーク)とAndroid固有のネイティブAPI(ML Kit)をラップしています。Windowsにはどちらもありません。 iOS、Android、Windowsを対象とするMAUIアプリケーションを開発するチーム(標準的なマルチターゲットシナリオ)は、BarcodeScanning.Native.Mauiを3つのターゲットすべてに対応するバーコードソリューションとして使用することはできません。 Windows向けにプラットフォーム固有のコードを別途実装するか、ライブラリ全体を置き換えるかのいずれかを選択する必要がある。
IronBarcodeのアプローチ
IronBarcodeのBarcodeReader.Read()@コールは、Windows、iOS、Android、macOS MAUIターゲット上でプラットフォーム固有のコードなしで動作します。 CODE-38443--@@@ブロック、条件付き依存性ロード、スタブ実装は必要ありません。 ファイル入力とPDF入力についても、パターンは一貫しています。
using IronBarCode;
// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
var results = BarcodeReader.Read(file.FullPath);
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
}
// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
using IronBarCode;
// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
var results = BarcodeReader.Read(file.FullPath);
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
}
// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
Imports IronBarCode
' Read barcodes from a file the user selected
Dim file = Await FilePicker.PickAsync()
If file IsNot Nothing Then
Dim results = BarcodeReader.Read(file.FullPath)
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
End If
' Read barcodes directly from a PDF — no image extraction step needed
Dim pdfResults = BarcodeReader.Read("shipment-manifest.pdf")
IronBarcodeのMAUI統合ガイドには、すべてのMAUIターゲットに対する完全なセットアップ手順が記載されています。 IronBarcodeは、BarcodeScanning.Native.MauiにパスがまったくないASP.NET、Docker、Azure Functions、およびAWS Lambda環境でのサーバーサイドデプロイメントもサポートしています。
バーコード読み取り精度:UPC-AおよびPDF417
BarcodeScanning.Native.Mauiにおける2つの特定のフォーマット精度問題は、実稼働アプリケーションに直接的な影響を及ぼします。
バーコードスキャン。MAUIアプローチ
iOSでは、BarcodeScanning.Native.Mauiの基盤となる検出機能(Apple Vision)は、UPC-Aバーコードに対して13桁の数字を返します。 UPC-Aは12桁の形式です。 先頭の余分なゼロはEAN-13エンコーディングと一致します。 ライブラリはこの生の値を修正せずにそのまま渡します。 UPC-A値をデータベースに保存するアプリケーションは、本来含まれるべきではない先頭のゼロを含むレコードを蓄積してしまう可能性があります。
文書化された回避策では、フォーマットを確認し、値を切り詰める必要があります。
// Workaround required for iOS UPC-A — strip the leading zero manually
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode == null) return;
var value = barcode.DisplayValue;
if (barcode.BarcodeFormat == BarcodeFormat.UPC_A && value.Length == 13)
value = value.Substring(1); // strip Apple's prepended leading zero
ProcessBarcode(value);
}
// Workaround required for iOS UPC-A — strip the leading zero manually
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArgs e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode == null) return;
var value = barcode.DisplayValue;
if (barcode.BarcodeFormat == BarcodeFormat.UPC_A && value.Length == 13)
value = value.Substring(1); // strip Apple's prepended leading zero
ProcessBarcode(value);
}
' Workaround required for iOS UPC-A — strip the leading zero manually
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArgs)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode Is Nothing Then Return
Dim value = barcode.DisplayValue
If barcode.BarcodeFormat = BarcodeFormat.UPC_A AndAlso value.Length = 13 Then
value = value.Substring(1) ' strip Apple's prepended leading zero
End If
ProcessBarcode(value)
End Sub
この回避策は、フォーマットチェックを省略した場合、0で始まるEAN-13バーコードを暗黙のうちに破損させてしまう。 PDF417はGitHubの課題報告で"非常に問題が多い ― ほとんどのスキャンは実行されない"と別途記載されており、配送ラベル、運転免許証、搭乗券に影響を及ぼしている。
IronBarcodeのアプローチ
IronBarcodeは、手動による正規化を行わずに、正しい12桁のUPC-A値を返します。 PDF417は、確実に読み込めるサポートされているフォーマットです。 生成側はIronBarcodeのAPIを通じても利用可能です。
using IronBarCode;
// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
using IronBarCode;
// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
Imports IronBarCode
' Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.SaveAsPng("qr.png")
' Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png")
バーコードデータの精度が在庫検索、POS取引、サプライチェーン統合に直接影響するアプリケーションの場合、IronBarcodeの正しいフォーマット処理により、BarcodeScanning.Native.Mauiがアプリケーションコードに残してしまう種類の本番環境におけるバグが解消されます。 IronBarcodeのバーコード読み取りに関するドキュメントでは、フォーマット固有の動作について詳細に解説しています。
APIマッピングリファレンス
| BarcodeScanning.Native.Maui | IronBarcode |
|---|---|
| XAML コントロール | カメラ制御なし - キャプチャするには、MediaPicker.CapturePhotoAsync()を使用してください。 |
| イベント | コード-38447 |
| コード-38448 | の返り値--CODE-38449--@@ (IEnumerable) |
| コード-38450 | コード-38451 |
| コード-38452 | コード-38453 |
| コード-38454 | コード-38455 |
| コード-38456 | 自動検出 - マルチフォーマットの設定は不要 |
| コード-38457 | コード-38458--コール |
| iOSとAndroidのみ | iOS、Android、Windows、macOS (MAUI) + ASP.NET、デスクトップ |
| カメラフレームのみ | ファイル、バイト配列、ストリーム、PDF |
| ファイル/PDF APIなし | 画像ファイルおよびPDFを受け付けます。 |
| Windows MAUIなし | Windows MAUIの完全サポート |
| 生成APIなし | --コード-38460--@ + @@--コード-38461--@@。 |
チームがBarcodeScanning.MAUIからIronBarcodeへの移行を検討する場合
Windows MAUIターゲットがビルドに追加されました
MAUIアプリケーションは通常、iOSとAndroidをターゲットとして開発が始まり、アプリケーションの成熟度やEnterprise配布要件の拡大に伴い、後からWindowsを追加する。 Windowsターゲットを追加すると、BarcodeScanning.Native.Mauiがすぐに問題となります。ライブラリ内にWindows実装がなく、回避策もありません。 このような状況にあるチームは、別のライブラリを使用してWindows用のバーコード実装を別途維持するか、バーコードレイヤー全体をすべてのMAUIターゲットで一貫して動作するライブラリに移行する必要があります。 2つ目の方法は運用がより簡単であり、プラットフォーム固有の分岐に伴うメンテナンスの手間を省くことができる。
ファイルアップロードまたはPDF処理の要件が追加されました
モバイルアプリケーションは、多くの場合、入力方法としてライブカメラによるスキャンのみから始まり、後にアップロードされた画像やドキュメントを受け入れるように拡張される。 ユーザーがギャラリーの写真、電子メールで受信した画像、または出荷明細書や搭乗券を含むPDFからバーコードをスキャンする必要がある場合、BarcodeScanning.Native.Mauiには対応するコードパスがありません。 この要件の境界に達したチームは、BarcodeScanning.Native.Maui に加えてファイルおよび PDF 入力用の別のバーコードライブラリを追加するか、すべての入力タイプを処理する単一のライブラリに移行するかの選択を迫られます。異なる API、異なる結果タイプ、異なるフォーマットサポートテーブルを持つ 2 つのバーコード パッケージを管理すると、長期的に複雑さが増しますが、単一パッケージのソリューションではこれを回避できます。
サーバーサイドでのバーコード処理が導入されました
モバイル端末でバーコードをスキャンするアプリケーションは、多くの場合、サーバー側のコンポーネントを開発します。これは、バーコードを検証するASP.NET APIエンドポイント、PDFを処理するバックグラウンドジョブ、またはアップロードされたドキュメントから追跡番号を抽出するクラウド関数などです。 BarcodeScanning.Native.Mauiは、カメラのハードウェアコンテキストに依存するUIコントロールライブラリです。 サーバープロセスでは実行できません。 モバイルとサーバーの両方で同じバーコード読み取りロジックが必要なチームは、サーバー側で別のライブラリを使用する必要があります。サーバー側の要件が発生すると、チームはモバイルとサーバーの両方をカバーする単一のライブラリに統合する方が、2つの別々の実装を維持するよりも望ましいかどうかを検討することがよくあります。
UPC-Aデータの正確性が生産上の問題となる
iOSのUPC-A 13桁の動作は、開発段階で必ずしも検出されるとは限りません。 開発段階でスキャンされたUPC-Aバーコードは正しく動作するように見えるかもしれませんが、AppleのVisionフレームワークによって導入された先頭のゼロがデータベースに表示されます。 在庫記録、POSシステム、またはサプライチェーン統合において13桁のUPC-A値を発見したチームは、コードの問題に加えて、データの修正という問題にも直面する。 BarcodeScanning.Native.MauiのGitHubイシューに記載されている回避策は、新規スキャンを修正しますが、過去のデータは修正しません。 データ品質問題の範囲が明確になった場合、アプリケーションレベルの正規化を行わずに正しいUPC-A値を返すライブラリに移行することが、多くの場合、よりクリーンな長期的な解決策となります。
PDF417文書のスキャンが必要です
PDF417は、北米において配送ラベル、運転免許証、搭乗券などに使用されているバーコード形式です。 これらは、物流、本人確認、旅行関連のアプリケーションでよくスキャンされる対象です。 BarcodeScanning.Native.MauiのGitHubイシュートラッカーには、PDF417が"非常に問題が多く、ほとんどのスキャンは実行されない"と記載されています。PDF417の信頼性が必須要件であり、あれば良いというものではないアプリケーションにとって、この既知の問題は直接的な障害となり、代替ライブラリの評価を余儀なくされます。
一般的な移行の考慮事項
カメライベントをMediaPickerと静的読み取りに転送
マイグレーションにおける中心的な構造的変更は、連続的なカメラ・イベント・パターンを、MediaPicker@キャプチャに続いてBarcodeReader.Read()@に置き換えることです。 イベントハンドラ、XAMLコントロール、XML名前空間宣言はすべて削除されています。 その代わりに、ボタンがMediaPicker.CapturePhotoAsync()をトリガーし、その結果の写真バイトがBarcodeReader.Read()に渡されます。 これにより、ユーザーエクスペリエンスはライブビューファインダーからシステムカメラの画面へと変化し、ほとんどのビジネスアプリケーションに適したものとなる。
スレッドマーシャリングの変更点
BarcodeScanning.Native.MauiはバックグラウンドのスレッドでOnDetectionFinished@を実行するため、UI要素を更新する既存のハンドラはすべてMainThread.BeginInvokeOnMainThread()@で更新をラップします。 IronBarcodeで使用されるMediaPicker + asyncパターンでは、awaitの後の継続は、通常メインスレッドである呼び出しコンテキストに戻ります。 ほとんどの場合、MainThread.BeginInvokeOnMainThread()ラッパーを削除して、イベントハンドラのコードを簡素化することができます。
UPC-A の回避策による削除
BarcodeScanning.Native.MauiのiOS UPC-A 13桁の動作を処理したコードベースは、@--CODE-38474--@@をチェックし、@--CODE-38475--@を呼び出して先頭のゼロを取り除くコードを持つことになります。 移行後、このコードは削除する必要があります。IronBarcodeは正しい12桁の値を返すため、この回避策を残しておくと、有効なUPC-A読み取り値から最初の桁が誤って削除されてしまいます。
マウイ島の許可
BarcodeScanning.Native.Mauiは、パッケージセットアップの一環として、AndroidおよびiOSマニフェストにカメラパーミッションを自動的に追加します。CODE-38476--@@を使用するIronBarcodeでは、@@--CODE-38477--@と@@--CODE-38478--@の標準MAUIカメラパーミッションが必要です。 これらの権限は、カメラを何らかの目的で使用するMAUIプロジェクトには通常既に含まれています。
IronBarcodeの追加機能
この比較で取り上げた機能以外にも、 IronBarcodeはBarcodeScanning.Native.Mauiでは一切対応していない機能を提供しています。
-バーコード生成: Code128、QR、DataMatrix、PDF417などの形式をPNG、SVG、またはバイト配列として生成します。これらはMAUI UI、APIレスポンス、または印刷ラベルで使用できます。
- QRコード生成:ロゴの埋め込み、色のカスタマイズ、エラー訂正レベルの制御など、スタイリッシュなQRコードを作成できます。
- マルチバーコード読み取り:@--CODE-38480--@@オプションは、1つの画像に存在するすべてのバーコードを1回で読み取ります。
- PDFバーコード抽出: PDF文書に埋め込まれたバーコードを直接読み取ります。中間的な画像変換は不要です。 -サーバーサイド展開:カメラに依存することなく、同じバーコード読み取りおよび生成ロジックをASP.NET、Azure Functions、Docker、およびAWS Lambdaに展開できます。
- 読み取り速度の設定:@--CODE-38481--@、@--CODE-38482--@、および
Slowerの設定により、画質に応じてスループットと精度を調整できます。 - macOS MAUI サポート: MAUI デスクトップ アプリケーションに対する macOS の完全なサポート。BarcodeScanning.Native.Maui ではドキュメント化されていない 4 番目の MAUI ターゲットをカバーします。
.NETの互換性と将来の準備
IronBarcodeは、.NET 6、 .NET 7、 .NET 8、 .NET 9、および.NET Framework 4.6.2以降をサポートしています。 これは、MAUI のターゲットセット全体だけでなく、最新の.NETにまだ移行していない従来のサーバー環境でも動作することを意味します。 IronBarcodeは定期的にアップデートされ、2026年までの普及拡大に伴い.NET 10との互換性も確保されています。BarcodeScanning.Native.MauiはMAUI専用のライブラリであり、 .NET Frameworkのサポートやサーバーサイドへのデプロイパスはありません。 コードベースがMAUIと既存の.NET Frameworkまたは.NET Coreサーバーアプリケーションの両方にまたがるチームにとって、 IronBarcodeは各ランタイムコンテキストごとに個別のバーコードパッケージを必要とせずに、すべての環境で一貫したAPIを提供します。
結論
BarcodeScanning.Native.MauiとIronBarcodeは、それぞれ異なる問題に対処します。 BarcodeScanning.Native.Mauiは、iOSおよびAndroid上でバーコード自動検出機能を備えたリアルタイムビューファインダーを提供するカメラ制御ライブラリです。 IronBarcodeは、あらゆるソースからの静的画像データを、すべての.NETプラットフォームで処理するバーコード読み取りおよび生成ライブラリです。 アーキテクチャ上の違い(連続的なカメラストリームか、離散的なデータ入力か)によって、特定の要件に対してどのライブラリが適切かが決まります。
BarcodeScanning.Native.Maui は、アプリケーションが iOS と Android のみを対象とする消費者向けモバイル アプリであり、連続フレーム検出によるアプリ内ライブカメラプレビューが必須の UX パターンであり、要件が Windows、ファイルアップロード、PDF 処理、またはサーバー側のバーコード処理にまで拡大しない場合に最適な選択肢です。 その制約された範囲内では、それは自由で、最小限で、機能的である。
IronBarcodeは、Windows MAUIを含むプラットフォームのサポートが必要な場合、ライブカメラに加えてまたはライブカメラの代わりにファイル、PDF、またはバイト配列からバーコード入力が行われる場合、サーバー側のバーコード処理がアーキテクチャの一部である場合、または読み取りと同時にバーコード生成が必要な場合に最適な選択肢です。 また、UPC-Aの精度やPDF417の信頼性が許容範囲ではなく、生産上の要件である場合にも適切です。 これらの機能を実現するには、商用ライセンス費用という代償を支払う必要がある。
現在、BarcodeScanning.Native.Maui の狭い範囲の要件に合致するチームにとって、このライブラリは合理的かつ費用対効果の高い選択肢です。しかし、2 つのプラットフォームでのライブ カメラ スキャンを超えて要件が拡大している、または拡大が見込まれるチームにとって、BarcodeScanning.Native.Maui とのスコープの不一致は、設定上の問題ではなく、アーキテクチャ上の問題となります。 IronBarcodeの、あらゆる入力タイプ、プラットフォーム、展開対象に共通する一貫したAPIこそが、この不一致に対する実用的な解決策です。
よくある質問
BarcodeScanning.MAUIとは何ですか?
BarCodeScanning.MAUIは、C#アプリケーションでバーコードを生成して読み取るための.NETバーコードライブラリです。これは、開発者が.NETプロジェクト用のバーコードソリューションを選択する際に評価するいくつかの選択肢の1つです。
BarcodeScanning.MAUIとIronBarcodeの主な違いは何ですか?
IronBarcodeはインスタンス管理を必要としない静的なステートレスAPIを使用します。一方、BarcodeScanning.MAUIは通常、使用前にインスタンスの作成と設定が必要です。IronBarcodeはまた、ネイティブPDFサポート、自動フォーマット検出、すべての環境でのシングルキーライセンスを提供します。
IronBarcodeはBarcodeScanning.MAUIよりライセンスが簡単ですか?
IronBarcodeは単一のライセンスキーで開発環境と本番環境の両方をカバーします。これは、SDKキーとランタイムキーを分離するライセンスシステムと比較して、CI/CDパイプラインとDocker構成を簡素化します。
IronBarcodeはBarcodeScanning.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はBarcodeScanning.MAUIと比べてどのようにバッチ処理を行いますか?
IronBarcodeの静的メソッドはステートレスで当然スレッドセーフであり、スレッドごとのインスタンス管理なしにParallel.ForEachを直接使用できます。どの価格帯でもスループットの上限はありません。
IronBarcode はどの.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インストーラーやランタイムファイルは必要ありません。
BarcodeScanning.MAUIとは異なり、購入前にIronBarcodeを評価することはできますか?
IronBarcodeのトライアルモードでは、完全なデコードされたバーコード値を返します。購入を決定する前に、ご自身のドキュメントで読み取り精度をベンチマークすることができます。
BarcodeScanning.MAUIとIronBarcodeの価格の違いは何ですか?
IronBarcodeは、開発および量産をカバーする永続的なシングルデベロッパーライセンスで749ドルからご利用いただけます。価格の詳細とボリュームオプションはIronBarcodeのライセンスページでご覧いただけます。別途ランタイムライセンスは必要ありません。
BarcodeScanning.MAUIからIronBarcodeへの移行は簡単ですか?
BarcodeScanning.MAUIからIronBarcodeへの移行は、主にインスタンスベースのAPIコールをIronBarcodeのスタティックメソッドに置き換え、ライセンスの定型文を削除し、結果のプロパティ名を更新します。ほとんどの移行はコードを追加するのではなく、コードを削減します。
IronBarcodeはロゴ入りQRコードを生成できますか?
はい。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")は、設定可能なエラー修正機能付きで、ブランド画像をネイティブにQRコードに埋め込みます。カラーQRコードもChangeBarCodeColor()でサポートされています。

