フッターコンテンツにスキップ
他のコンポーネントと比較する

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" />
XML
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
$vbLabelText   $csharpLabel

このコントロールにより、ユーザーはMAUIページに埋め込まれたリアルタイムのビューファインダーを利用できるようになります。 カメラ映像がアクティブな間は、バーコード検出機能が継続的に作動します。"ポイント&スキャン"が主な操作となるコンシューマー向けアプリにとって、このユーザーエクスペリエンスは非常に優れています。 制限事項としては、このライブラリがサポートするインタラクションはこれだけであり、iOSやAndroidでのライブカメラ検出を超える要件が発生した場合、BarcodeScanning.Native.Mauiでは対応できません。

IronBarcodeを理解する

IronBarcodeは、カメラのストリームではなくデータ入力に基づいて動作する、 .NET向けの商用バーコード読み取りおよび生成ライブラリです。 画像ファイル、バイト配列、ストリーム、およびPDFドキュメントからバーコードを読み取ります。 MAUIでは、MediaPickerを通じてシステムカメラと統合します。これは、アプリケーションが写真選択に使用するのと同じ標準MAUI APIで、写真をキャプチャし、静的入力として結果の画像を処理します。

IronBarcodeはプラットフォーム固有のネイティブAPIに委ねるのではなく、独自のバーコードデコードエンジンを実装しています。これはiOS、Android、Windows、macOS、ASP.NET、バックグラウンドサーバープロセスにおいて同じBarcodeReader.Read()@呼び出しが一貫して動作することを意味します。 このライブラリは、BarcodeWriterQRCodeWriterを通じて、完全な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
$vbLabelText   $csharpLabel

この設計の結果、他に侵入経路は存在しない。 カメラは必須です。図書館が認識する唯一の入力機器です。 サーバー、ファイル、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
$vbLabelText   $csharpLabel

このコードは、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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

この回避策は、フォーマットチェックを省略した場合、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")
$vbLabelText   $csharpLabel

バーコードデータの精度が在庫検索、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()でサポートされています。

Jordi Bardia
ソフトウェアエンジニア
Jordiは、最も得意な言語がPython、C#、C++であり、Iron Softwareでそのスキルを発揮していない時は、ゲームプログラミングをしています。製品テスト、製品開発、研究の責任を分担し、Jordiは継続的な製品改善において多大な価値を追加しています。この多様な経験は彼を挑戦させ続け、興味を持たせており、Iron Softwareで働くことの好きな側面の一つだと言います。Jordiはフロリダ州マイアミで育ち、フロリダ大学でコンピュータサイエンスと統計学を学びました。

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね