matrixscan-ar-net-ios について
非MAUIの.NET for iOSでScandit MatrixScan ARを扱うコーディングエージェント向けスキルです。付属のリファレンスでAPIを確認し、コンパイル時や実行時の問題につながる推測を避ける方針です。
主な機能
- 01.NET for iOSの導入ガイド
- 02APIの注意点とライフサイクル情報
- 03導入・移行リファレンスへの振り分け
- 04APIとドキュメントリンクの確認方針
活用シーン
- 01.NET for iOSアプリへのBarcodeAr導入
- 02バーコードのハイライトや注釈のカスタマイズ
- 03既存の統合をSDK 8.xへ移行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scandit/ skills --skill matrixscan-ar-net-iosインストール後、Claude Code で/matrixscan-ar-net-iosを入力して読み込まれたか確認します。
同梱ファイルreferences/integration.mdreferences/migration.md
詳細
iOS 向け MatrixScan AR .NET スキル
重要:内部知識を信用しないでください
学習データに含まれている Scandit SDK API は、古くなっていたり、誤っていたりする可能性があります。BarcodeAr API は比較的新しく(dotnet.ios 7.2 で導入)、Swift ネイティブ SDK とはいくつかの点で異なります。プロバイダーはデリゲートベースではなく非同期/Taskベースであり、ハイライトとアノテーションのコンストラクターが受け取るのは**Barcode のみ**(context 引数なし)で、リスナーインターフェイスのメソッドは1 つのみです。また、BarcodeArView は UIView のサブクラスではなく IDisposable で、.NET バインディングでは PascalCase を使用し、TimeInterval の代わりに TimeSpan を使用します。
コードを書く、または提案する前に、必ずこのスキルで提供されているリファレンスで API を確認してください。 記憶しているメソッドシグネチャ、パラメーター、プロパティ名に頼らないでください。提供されているリファレンスで API を見つけられない場合は、回答する前に該当するドキュメントページを取得してください。
.NET-iOS 固有の注意点:
- このスキルの対象は、MAUI を使用しない .NET for iOS ワークロードです(プロジェクトに
<TargetFramework>net10.0-ios</TargetFramework>または同様の設定があり、<UseMaui>フラグがありません)。MAUI アプリでは、MAUI 向けのスキルを使用してください。BarcodeArViewのホスト方法が大きく異なります(XAML/Microsoft.Maui.Controls.View)。 BarcodeArはコンテキストを受け取るnewコンストラクターを使用します:new BarcodeAr(dataCaptureContext, settings)。.NET にBarcodeAr.Create(...)/BarcodeAr.ForDataCaptureContext(...)ファクトリーはありません。BarcodeArSettingsも通常のnewを使用します(DataCaptureContext.ForLicenseKey(key)は引き続きファクトリー形式です。これは Core にあります)。BarcodeArView.Create(parentView, barcodeAr, dataCaptureContext, viewSettings, cameraSettings)はファクトリーです(BarcodeAr自体とは異なります)。cameraSettings引数は null 許容です。BarcodeAr.RecommendedCameraSettingsを使用するにはnullを渡してください。parentViewはUIViewです(通常はホストするビューコントローラーのthis.View、または専用のコンテナーUIViewアウトレット)。BarcodeArViewは自動的にparentViewにアタッチされるため、this.View.AddSubview(...)を呼び出さないでください。BarcodeArViewはUIViewのサブクラスではなく、IDisposableです。 クラスには、必要に応じて(iOS ではglobal using View = UIKit.UIView;によりViewがUIViewにエイリアスされるため、ネイティブ相互運用などで)UIKit.UIViewに変換するpublic static implicit operator View(BarcodeArView view)が宣言されていますが、自分でビュー階層に追加する必要はありません。Createファクトリーが自動的にparentViewにアタッチします。- iOS の .NET
BarcodeArViewにOnResume()/OnPause()はありません。 これらのメソッドは(バインディング内の#if __ANDROID__でガードされている)Android 専用です。iOS では、公式のMatrixScanARSimpleSampleと同様に、ライフサイクルのViewWillAppearでbarcodeArView.Start()を、ViewWillDisappearでbarcodeArView.Stop()を呼び出します。.NET iOS のビューコントローラーからbarcodeArView.OnResume()を呼び出すとコンパイルエラーになります。 BarcodeArView.Dispose()が後処理を行います。BarcodeArViewにOnDestroy()メソッドはありません(これは Android の Java/Kotlin の慣例です)。ビューコントローラーのDispose(bool)オーバーライドからDispose()を呼び出すか、短期間だけ使用するインスタンスを所有している場合はusingのセマンティクスを利用してください。- iOS 専用のビューコントロールです。
ShouldShowMacroModeControl(bool)とMacroModeControlPosition(Anchor)はiOS のみに存在します(Android では公開されていません)。これらは、クロスプラットフォームのShouldShowTorchControl/ShouldShowZoomControl/ShouldShowCameraSwitchControlと、それぞれに対応する*Positionと並んでいます。iOS のコントロールについて質問された場合は、これらにも触れてください。 IBarcodeArListenerのメソッドは 1 つだけです:OnSessionUpdated(BarcodeAr, BarcodeArSession, IFrameData)。dotnet.iosには、Swift のBarcodeArListenerプロトコルにあるようなOnObservationStarted/OnObservationStoppedコールバックはありません。これらを宣言するとコンパイルエラーになります。インターフェイスに含まれていません。- 慣用的な C# では、リスナーインターフェイスよりイベント API(
barcodeAr.SessionUpdated += handler)を優先してください。ハンドラーにはBarcodeAr、Session、FrameDataを含むBarcodeArEventArgsが渡されます。他のプラットフォームとの一貫性を保つため、AddListener(IBarcodeArListener)も引き続き使用できます。 OnSessionUpdated/SessionUpdatedはバックグラウンドの認識キューで実行されます。 UI を更新する場合は、DispatchQueue.MainQueue.DispatchAsync(() => { … })(CoreFoundationのもの)を使ってディスパッチしてください。InvokeOnMainThreadは使用しないでください。動作はしますが、公式の Scandit .NET iOS サンプルでは一貫してDispatchQueue.MainQueue.DispatchAsyncを使用しています。- プロバイダーインターフェイスはデリゲートベースではなく、非同期です。
IBarcodeArHighlightProvider.HighlightForBarcodeAsync(Barcode)はTask<IBarcodeArHighlight?>を返し、IBarcodeArAnnotationProvider.AnnotationForBarcodeAsync(Barcode)はTask<IBarcodeArAnnotation?>を返します。.NET バインディングにはデリゲート/completionHandler引数はありません。特定のバーコードのハイライト/アノテーションを抑制するには、Task.FromResult<IBarcodeArHighlight?>(null)を返すか、asyncメソッドからnullを返してください。 - ハイライトとアノテーションのコンストラクターが受け取る引数は
Barcodeのみです(context引数はありません)。new BarcodeArRectangleHighlight(barcode)、new BarcodeArCircleHighlight(barcode, BarcodeArCircleHighlightPreset.Dot)、new BarcodeArInfoAnnotation(barcode)、new BarcodeArStatusIconAnnotation(barcode)、new BarcodeArPopoverAnnotation(barcode, buttons)を使用してください。UIViewControllerまたはUIViewを渡すとコンパイルエラーになります。 - シンボロジー名は C# の PascalCase です:
Symbology.Ean13Upca、Symbology.Ean8、Symbology.Code128、Symbology.Code39、Symbology.Qr、Symbology.DataMatrix、Symbology.InterleavedTwoOfFive。Swift の camelCase 形式(.ean13UPCA、.qr)ではありません。 BarcodeArSettingsにはEnabled切り替え機能はありません。BarcodeAr自体にもEnabledプロパティはありません。スキャンを一時停止/再開するには、barcodeArView.Pause()/barcodeArView.Start()を使用してください。- .NET の
BarcodeArViewSettingsは最小限の設定のみです。 プロパティはSoundEnabled、HapticEnabled、DefaultCameraPositionの 3 つだけです。TriggerButtonCollapseTimeout、InactiveStateTimeout、ToastSettings、DefaultMiniPreviewSizeのようなプロパティを作り上げないでください。これらは BarcodeAr ではなく SparkScan のものです。 BarcodeArFeedbackはScandit.DataCapture.Barcode.Ar.Feedbackにあり、Core.Common.Feedback.Feedback型のプロパティScannedとTappedを持ちます。引数なしのnew BarcodeArFeedback()は、両イベントを無音にするフィードバックオブジェクトを生成します。これをbarcodeAr.Feedbackに割り当てると、デフォルトのビープ音/振動が無効になります。デフォルトに戻すには、静的プロパティBarcodeArFeedback.DefaultFeedbackを使用してください(.NET では静的プロパティであり、Swift のBarcodeArFeedback.default()メソッドではありません)。- ハイライトのタップ操作は、
BarcodeArViewのHighlightForBarcodeTappedイベント(EventHandler<HighlightForBarcodeTappedEventArgs>)として公開されています。.NET のBarcodeArViewにUiListener/UIDelegateプロパティはありません。Swift のBarcodeArViewUIDelegateは C# のイベントとして公開されています。イベント引数にはBarcodeAr、Barcode、Highlightが含まれます。 barcodeAr.Feedbackはプロパティ(get/set)です。ApplySettingsAsync(BarcodeArSettings)はTaskを返します。BarcodeAr.RecommendedCameraSettingsは静的プロパティであり、メソッドではありません(Swift SDK ではBarcodeAr.recommendedCameraSettingsはクラス変数です。.NET では getter であり、dotnet.iosにBarcodeAr.CreateRecommendedCameraSettings()メソッドはありません)。- .NET API ツリーに
BarcodeArFilter/SetBarcodeFilterはありません。 8.1 で追加された Swift のsetBarcodeFilter(...)メソッドは、現在dotnet.iosでは公開されていません。使用しないでください。 - ビューコントローラーのコンストラクターは、VC のインスタンス化方法によって異なります。 ストーリーボード/XIB から VC が生成される場合(通常、プロジェクトに
Info.plistでUIMainStoryboardFileが設定されたMain.storyboardがある場合)は、public MyVC(IntPtr handle) : base(handle) { }コンストラクターを残してください。ランタイムは実際のネイティブハンドルを渡してこれを呼び出します。プログラムでインスタンス化する VC(Main.storyboardがなく、SceneDelegate.WillConnectまたはAppDelegateでルートビューコントローラーを設定する場合)では、引数なしのpublic MyVC() : base() { }を宣言し、new MyVC()でインスタンス化してください。(IntPtr)コンストラクターにIntPtr.Zeroを渡さないでください。 ネイティブピアが初期化されず、ViewDidLoadが実行されないことがあります。その結果、カメラプレビューもスキャンもない黒い画面が表示されます。 - SDK 8.0 以降では明示的な初期化が必要です。 Scandit のコードを実行する前に、
AppDelegate.FinishedLaunching(またはプロジェクトにAppDelegateがない場合はSceneDelegate.WillConnectの最初)でScanditCaptureCore.Initialize()とScanditBarcodeCapture.Initialize()を呼び出してください。これを行わないと、DI コンテナーに登録がないため、最初のnew BarcodeAr(...)/BarcodeArView.Create(...)の呼び出しで起動時にクラッシュします。6.x/7.x では不要です。 完全なAppDelegate.csのテンプレートについては、references/integration.md を参照してください。 - NuGet パッケージは
Scandit.DataCapture.CoreとScandit.DataCapture.Barcodeです。ここでは個別の*.Mauiパッケージはありません。それらは MAUI プロジェクト専用です。トレーニングデータからバージョンを推測しないでください。 バージョンを固定する前に、https://www.nuget.org/packages/Scandit.DataCapture.Barcode/からWebFetchで最新の安定版を取得してください。存在しないバージョン(たとえば、公開されているのが8.4.0のみなのに8.13.0を指定するなど)を作り上げると、dotnet restoreはUnable to find package Scandit.DataCapture.Core with version (>= …)で失敗します。手順全体については、references/integration.md のステップ 0 を参照してください。 - iOS の
SupportedOSPlatformVersionは15.0以上である必要があります。.csprojに設定してください。公式の Scandit iOS サンプルでは、Info.plistのMinimumOSVersionが15.0で、プロジェクトの<SupportedOSPlatformVersion>もこれに一致しています。 - 必須の
Info.plistキーはNSCameraUsageDescription(Privacy - Camera Usage Description)です。これがないと、初回のカメラアクセス時にアプリがクラッシュします。カメラを初めて開くときに iOS が自動的にユーザーに確認します。呼び出しが必要な独立した実行時リクエスト API(Android 形式のRequestPermissionsなど)はありません。手動での権限フローが必要な .NET Android スキルとの重要な違いです。
インテントルーティング
ユーザーのリクエストに基づいて、回答する前に適切なリファレンスファイルを読み込んでください。
- BarcodeAr を一から統合する、設定を構成する、ハイライトや注釈をカスタマイズする、セッション更新を処理する、フィードバックをカスタマイズする、またはタップ操作を接続する場合(例:「.NET iOS アプリに MatrixScan AR を追加する」「C# でバーコード AR スキャンを設定する」「追跡中のすべてのバーコードに四角形のハイライトを表示する」「バーコードデータを含む情報注釈を表示する」「ビープ音を消す」「ハイライトのタップに反応する」「円形のハイライトに切り替える」「マクロモードの切り替えを表示する」)→ references/integration.md を読み、そこに記載された手順に従ってください。
- 既存の MatrixScan AR 統合を移行またはアップグレードする場合(例:「v7 から v8 にアップグレードする」「Scandit .NET SDK を v8 に上げる」「BarcodeAr の SDK バージョン間で何が変わったか」「8.x に移行するときに BarcodeAr のコードを変更する必要があるか」)→ references/migration.md を読み、そこに記載された手順に従ってください。
API の使用ポリシー
以下の Scandit リファレンスに明示的に記載されている API のみを使用してください。メソッドのシグネチャ、パラメーター、プロパティ名を推測したり、作り上げたりしないでください。API が存在するかどうか、または呼び出し方が不明な場合、あるいはコンパイルエラーが発生した場合は、回答する前に該当するリファレンスページを取得してください。ユーザーに自分でドキュメントを確認するよう案内してはいけません。回答後は、ユーザーがさらに調べられるよう、必ず関連リンクを含めてください。
ドキュメントの URL を作ったり推測したりしてはいけません。 特定のクラスやプロパティの API ページが必要な場合:
- まず、すでに取得したページに直接リンクがあるか確認してください。トピックページには関連する API シンボルへの直接リンクがあります。取得を依頼するときは、必ずリンクも含めるよう指定してください。
- 直接リンクが見つからなかった場合は、API インデックス(以下の表の Full API reference を参照)を取得し、そこから実際のリンクを抽出してアクセスしてください。
URL の構造は異なる場合があります(例:api/ui/ サブディレクトリ)。推測すると 404 エラーになります。
ライセンスキー
スキャンには Scandit ライセンスキーが必要です。このスキルでは、ライセンス製品は native、ライセンスプラットフォームは ios です。
次の手順を順番に実行してください。MCP のためにユーザーの作業を止めてはいけません。
-
Scandit MCP サーバーが接続されている場合 — 製品に
native、プラットフォームにiosを指定してensure_scanner_setupを呼び出し、次にget_license_env_commandが返すコマンドを実行して、キーをプロジェクトの.envに書き込みます。チャットにはマスクされたプレビューのみを表示し、キー全体を出力してはいけません。 -
接続されていない場合 — 一度接続することを提案してから、手順 1 に進みます。
- Claude Code:
claude mcp add --transport http scandit https://ssl.scandit.com/mcp - Cursor:
{"mcpServers": {"scandit": {"url": "https://ssl.scandit.com/mcp"}}}を~/.cursor/mcp.jsonに追加します - VS Code:
{"servers": {"scandit": {"type": "http", "url": "https://ssl.scandit.com/mcp"}}}を MCP ユーザー設定に追加します
認証はブラウザーを使用するため、ヘッドレス環境や CI ではサポートされていません。サーバーが発行するのはトライアルキーのみです。本番ライセンスの作成、取り消し、変更は行いません。
- Claude Code:
-
ユーザーが断った場合、または MCP クライアントを利用できない場合 — https://ssl.scandit.com で自分でキーを生成し(アカウントをまだお持ちでない場合:https://ssl.scandit.com/dashboard/sign-up?p=test)、貼り付けてもらいます。
次に、プレースホルダーの代わりにキーをコードに設定します。キーを .env に置いただけでは、アプリには反映されません。.NET は .env を自動で読み込まないため、以下の最も簡単な方法を使用してください。どのプラットフォームでも、最も簡単なのは .env を読み込み、キーをライセンスキー呼び出しに直接設定する方法です。その場合も、チャットにはマスクされたプレビューのみを表示してください。
参考情報
質問に応じて、適切なリソースを案内してください。
| トピック | リソース |
|---|---|
| はじめに | はじめに(.NET for iOS) |
| 高度なトピック(カスタムハイライト、カスタムアノテーション、タップ操作、ポップオーバー、フィルター) | 高度な設定 |
| メジャー SDK バージョン間の移行 | 6 → 7 · 7 → 8 |
| API リファレンス全文 | BarcodeAr API(.NET iOS) |
このスキルが対象とする API の範囲
公式 RST ドキュメント(docs/source/barcode-capture/api/barcode-ar*.rst および api/ui/barcode-ar-*.rst)で :available: dotnet.ios と記載されているすべてのクラスについては、references/integration.md で説明しています。
BarcodeAr—new BarcodeAr(DataCaptureContext?, BarcodeArSettings)、Feedback(取得/設定)、ApplySettingsAsync(BarcodeArSettings)→Task、AddListener(IBarcodeArListener)/RemoveListener(IBarcodeArListener)、event EventHandler<BarcodeArEventArgs> SessionUpdated、静的プロパティRecommendedCameraSettings、Dispose。BarcodeArSettings—new BarcodeArSettings()、EnableSymbology(Symbology, bool)、EnableSymbologies(ICollection<Symbology>)、GetSymbologySettings(Symbology)、EnabledSymbologies(取得)、ExpectsOnlyUniqueBarcodes(取得/設定)、SetProperty/GetProperty<T>/TryGetProperty<T>、Dispose。IBarcodeArListener— メソッドはOnSessionUpdated(BarcodeAr, BarcodeArSession, IFrameData)のみです(OnObservation*コールバックはありません)。BarcodeArSession—AddedTrackedBarcodes(IReadOnlyList<TrackedBarcode>)、RemovedTrackedBarcodes(IReadOnlyList<int>)、TrackedBarcodes(IReadOnlyDictionary<int, TrackedBarcode>)、Reset()。BarcodeArEventArgs—BarcodeAr、Session、FrameData。BarcodeArFeedback—new BarcodeArFeedback()(無音)、静的プロパティDefaultFeedback(デフォルト値)、Scanned/Tapped(Core.Common.Feedback.Feedback)、Dispose。BarcodeArView—static Create(UIView parentView, BarcodeAr, DataCaptureContext, BarcodeArViewSettings, CameraSettings?)、HighlightProvider(IBarcodeArHighlightProvider?を取得/設定)、AnnotationProvider(IBarcodeArAnnotationProvider?を取得/設定)、ShouldShowTorchControl/ShouldShowZoomControl/ShouldShowCameraSwitchControl/ShouldShowMacroModeControl(iOS のみ)、TorchControlPosition/ZoomControlPosition/CameraSwitchControlPosition/MacroModeControlPosition(iOS のみ)(Anchor)、Start()、Stop()、Pause()、Reset()、GetNotificationPresenter()、event EventHandler<HighlightForBarcodeTappedEventArgs> HighlightForBarcodeTapped、UIKit.UIViewへの暗黙的な変換、Dispose。iOS にはOnResume()/OnPause()はありません。これらは Android のみです。BarcodeArViewSettings—SoundEnabled(デフォルトはtrue)、HapticEnabled(デフォルトはtrue)、DefaultCameraPosition(デフォルトはWorldFacing)。HighlightForBarcodeTappedEventArgs—BarcodeAr、Barcode、Highlight(IBarcodeArHighlight)。- ハイライト:
IBarcodeArHighlight : IDisposable、IBarcodeArHighlightProvider.HighlightForBarcodeAsync(Barcode) → Task<IBarcodeArHighlight?>、BarcodeArRectangleHighlight(Barcode)(Barcode/Brush/Icon)、BarcodeArCircleHighlight(Barcode, BarcodeArCircleHighlightPreset)(Barcode/Brush/Icon/Size)、BarcodeArCircleHighlightPreset列挙型(Dot、Icon)。 - アノテーション:
IBarcodeArAnnotation : IDisposable(AnnotationTriggerを宣言)、IBarcodeArAnnotationProvider.AnnotationForBarcodeAsync(Barcode) → Task<IBarcodeArAnnotation?>。BarcodeArStatusIconAnnotation(Barcode)—AnnotationTrigger、HasTip、Icon、Text、TextColor、BackgroundColor。BarcodeArInfoAnnotation(Barcode)—HasTip、EntireAnnotationTappable、Anchor(BarcodeArInfoAnnotationAnchor)、AnnotationTrigger、Width(BarcodeArInfoAnnotationWidthPreset)、Body(IReadOnlyCollection<BarcodeArInfoAnnotationBodyComponent>)、Header(BarcodeArInfoAnnotationHeader?)、Footer(BarcodeArInfoAnnotationFooter?)、BackgroundColor、Listener(IBarcodeArInfoAnnotationListener?)。BarcodeArPopoverAnnotation(Barcode, IList<BarcodeArPopoverAnnotationButton>)—AnnotationTrigger、EntirePopoverTappable、Listener(IBarcodeArPopoverAnnotationListener?)、Buttons。BarcodeArPopoverAnnotationButton(ScanditIcon, string)—Text、TextSize、Typeface、TextColor、Enabled、Icon。BarcodeArAnnotationTrigger列挙型:HighlightTapAndBarcodeScan、HighlightTap。
- 情報アノテーションのサブパッケージ(
Scandit.DataCapture.Barcode.Ar.UI.Annotations.Info):BarcodeArInfoAnnotationBodyComponent(Text、TextColor、TextSize、Typeface、StyledTextFormatted、LeftIcon、RightIcon、LeftIconTappable、RightIconTappable、TextAlignment)、BarcodeArInfoAnnotationHeader(Text、TextSize、Typeface、TextColor、Icon、BackgroundColor)、BarcodeArInfoAnnotationFooter(Text、TextSize、Typeface、TextColor、Icon、BackgroundColor)、BarcodeArInfoAnnotationAnchor列挙型(Left、Right、Bottom、Top)、BarcodeArInfoAnnotationWidthPreset列挙型(Small、Medium、Large)、IBarcodeArInfoAnnotationListener(OnInfoAnnotationHeaderTapped、OnInfoAnnotationFooterTapped、OnInfoAnnotationLeftIconTapped、OnInfoAnnotationRightIconTapped、OnInfoAnnotationTapped)。 IBarcodeArPopoverAnnotationListener—OnPopoverButtonTapped、OnPopoverTapped。TrackedBarcode(Scandit.DataCapture.Barcode.Batch.Data内)—Barcode、Identifier、Location。