barcode-capture-net-ios について
非 MAUI の .NET for iOS プロジェクトで Scandit BarcodeCapture を扱うコーディングエージェント向けスキルです。統合や移行の質問を参照資料に振り分け、.NET 固有 API、ライフサイクル、フレームデータ破棄の要件を示します。
主な機能
- 01.NET iOS BarcodeCapture API の案内
- 02統合・アップグレード・移行の振り分け
- 03バージョン別 API とライフサイクルの注意点
- 04フレームデータ破棄の要件
- 05Scandit ライセンスキー設定の案内
活用シーン
- 01.NET iOS アプリへのバーコードスキャン追加
- 02既存の Scandit 統合のアップグレード
- 03サードパーティ製スキャナーの置き換え
MCP 対応
Scandit リモート MCP サーバーを使ったスキャナーライセンスの設定と、対象となるトライアルキーの取得方法を説明します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scandit/ skills --skill barcode-capture-net-iosインストール後、Claude Code で/barcode-capture-net-iosを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/integration.mdmigration.mdthird-party-migration.md詳細
iOS 向け BarcodeCapture .NET スキル
重要:内部知識を信用しないでください
トレーニングデータには、古い、または誤った Scandit SDK API が含まれている可能性があります。BarcodeCapture API は、SDK のメジャーバージョン間で大幅に変更されます。プロパティの名前が変更されたり、削除されたり、構成し直されたりすることがあります。.NET バインディングでは、ネイティブの Swift SDK とは異なる命名規則も使用されます(PascalCase、init(context:settings:) の代わりに Create(...) ファクトリー、isEnabled の代わりに Enabled など)。
コードを作成または提案する前に、必ずこのスキルで提供されているリファレンスで API を確認してください。 記憶しているメソッドシグネチャ、パラメーター、プロパティ名に頼らないでください。提供されたリファレンスで API が見つからない場合は、回答する前に該当するドキュメントページを取得してください。
特に注意すべき .NET-iOS 固有の落とし穴:
- このスキルは、MAUI 以外の .NET for iOS ワークロード(プロジェクトに
<TargetFramework>net10.0-ios</TargetFramework>を指定し、<UseMaui>フラグを設定しない構成)を対象とします。MAUI アプリでは、代わりにbarcode-capture-net-mauiスキルを使用してください。 - .NET API では、Swift の
BarcodeCapture(context:settings:)初期化子ではなく、PascalCase のファクトリーメソッドを使用します。BarcodeCapture.Create(context, settings)、BarcodeCaptureSettings.Create()、BarcodeCaptureOverlay.Create(barcodeCapture, dataCaptureView)、DataCaptureView.Create(dataCaptureContext, frame)を使用してください。 - シンボル体系の名前は C# の PascalCase です。
Symbology.Ean13Upca、Symbology.Ean8、Symbology.Code128、Symbology.InterleavedTwoOfFive、Symbology.Qr、Symbology.DataMatrixを使用してください。Swift の.ean13UPCAのような形式ではありません。 - キャプチャモードの有効化プロパティは
barcodeCapture.Enabledです(IsEnabledでも Swift のisEnabledでもありません)。 CodeDuplicateFilterの型はTimeSpanで、Swift のTimeIntervalではありません。CodeDuplicate.DefaultDuplicateFilter、CodeDuplicate.ReportDataAndSymbologyOnlyOnce、TimeSpan.FromMilliseconds(500)、TimeSpan.FromSeconds(2.5)、またはTimeSpan.Zeroを使用してください。CodeDuplicateFilter = 0.5のようにdoubleを代入すると、型エラーになります。BarcodeCapture.RecommendedCameraSettingsはメソッドではなく静的プロパティです。正式なパターン(公式 .NET iOS サンプルで使用)は、camera = Camera.GetDefaultCamera(); camera.ApplySettingsAsync(BarcodeCapture.RecommendedCameraSettings);です。.NETバインディングにはCamera.GetDefaultCamera(CameraSettings?)オーバーロードもあります(内部でApplySettingsAsyncを呼び出します)が、サンプルでは明確さを優先して、明示的な 2 行の形式を使用しています。IBarcodeCaptureListenerのコールバック名は C# の命名規則に従います。OnBarcodeScanned、OnSessionUpdated、OnObservationStarted、OnObservationStoppedです。IFrameDataパラメーターの名前はframeDataです。- .NET バインディングでは、
BarcodeCaptureに C# のイベントベース API も用意されています。BarcodeScannedとSessionUpdated(どちらもEventHandler<BarcodeCaptureEventArgs>)です。リスナーインターフェースまたはイベントのいずれかを使用してください。同じハンドラーを両方の方法で登録しないでください。 OnBarcodeScannedは UI スレッド以外で呼び出されます。UI を更新する場合は、DispatchQueue.MainQueue.DispatchAsync(...)を使ってディスパッチしてください。OnBarcodeScannedとOnSessionUpdatedの末尾では、必ずframeData.Dispose()を呼び出してください。公式 iOS サンプルでは、「フリーズ、応答停止、または深刻なコマ落ち」が発生するビデオフィードを防ぐため、フレームを明示的に破棄しています。iOS では省略できません。- 重複や競合するスキャンを防ぐため、
OnBarcodeScannedの冒頭でbarcodeCapture.Enabled = falseを呼び出し、処理が完了してから作業を始めてください。再びスキャンできる状態になったら、barcodeCapture.Enabled = trueに戻します。 DataCaptureView.Create(dataCaptureContext, frame)の初期フレームにはCGRect(またはthis.View.Bounds)を渡します。コンテキストだけを受け取る Android バインディングとは異なります。AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidthを設定し、this.Viewのサブビューとして追加してください。- ライフサイクルでは、
ViewWillAppearでキャプチャモードを有効にしてカメラを起動し、ViewWillDisappearでカメラを停止します。公式サンプルでは、ViewWillDisappearでのみカメラを停止し、OnBarcodeScanned内でEnabled = falseを設定しています。どちらのパターンも有効です。 - 必須の Info.plist キーは
NSCameraUsageDescription(Privacy - Camera Usage Description)です。設定されていない場合、初めてカメラにアクセスした際にアプリがクラッシュします。 - NuGet パッケージは
Scandit.DataCapture.CoreとScandit.DataCapture.Barcodeです。*.Mauiパッケージは MAUI 専用のため使用しないでください。学習データからバージョンを推測しないでください。バージョンを固定する前に、WebFetchを使ってhttps://www.nuget.org/packages/Scandit.DataCapture.Barcode/から最新の安定版を取得してください。公開されていないバージョン(例:8.4.0のみ公開されているのに8.13.0を指定)を作り出すと、Unable to find package Scandit.DataCapture.Core with version (>= …)というエラーが発生し、dotnet restoreが失敗します。詳しい手順は、references/integration.md のステップ 0 を参照してください。 - SDK 8.0 以降では明示的な初期化が必要です。 Scandit API に触れる前に、
AppDelegate.FinishedLaunchingで(通常はウィンドウ/ルートビューコントローラーを作成する前に)ScanditCaptureCore.Initialize()とScanditBarcodeCapture.Initialize()を呼び出してください。これを行わないと、SDK の DI コンテナーに登録がなく、最初のDataCaptureView.Create/BarcodeCapture.Create呼び出し時に起動時クラッシュが発生します。6.x/7.x では不要です。これらのメジャーバージョンでは自動的に初期化されます。AppDelegateの完全なテンプレートは、統合ガイドを参照してください。
インテントルーティング
ユーザーのリクエストに基づき、回答する前に適切なリファレンスファイルを読み込んでください。
- BarcodeCapture をゼロから統合する、設定を構成する、フィードバックをカスタマイズする、ビューファインダーを追加する、スキャンを処理する、またはスキャン後に非同期処理を行う場合(例:「.NET iOS アプリに BarcodeCapture を追加する」「C# / iOS でバーコードスキャンをセットアップする」「net-ios で BarcodeCapture を使う方法」「重複スキャンをフィルターする」「ビープ音を抑制する」「ビューファインダーを追加する」「バーコードを検索している間はスキャンを無効にする」)→ references/integration.md を読み、そこに記載された手順に従ってください。
- 既存の BarcodeCapture 統合を移行またはアップグレードする場合(例:「v6 から v7 にアップグレードする」「BarcodeCapture を移行する」「Scandit .NET SDK を v8 に上げる」「SDK のバージョン間で何が変わったか」)→ references/migration.md を読み、そこに記載された手順に従ってください。
- サードパーティー製のバーコードスキャナーを BarcodeCapture に置き換える場合(例:「ZXing.Net.Mobile スキャナーを BarcodeCapture に置き換える」「AVFoundation のバーコードスキャンから Scandit に移行する」「[library] から BarcodeCapture に切り替える」)→ references/third-party-migration.md を読み、そこに記載された手順に従ってください。
API の使用ポリシー
以下の Scandit リファレンスに明示的に記載されている API のみ使用してください。メソッドシグネチャ、パラメーター、プロパティ名を推測したり、作り出したりしないでください。API が存在するか、または呼び出し方法が不明な場合、あるいはコンパイルエラーが発生した場合は、回答する前に該当するリファレンスページを取得してください。ユーザーに自分でドキュメントを確認するよう伝えてはいけません。回答後は、ユーザーがさらに詳しく確認できるよう、必ず関連リンクを含めてください。
ドキュメントの URL を作ったり、推測したりしてはいけません。 特定のクラスまたはプロパティの API ページが必要な場合:
- まず、すでに取得したページにそのページへの直接リンクがあるか確認してください。トピックページには関連する API シンボルへの直接リンクがあります。取得時のプロンプトには、必ずリンクも含めてください。
- 直接リンクが見つからない場合は、API インデックス(下の表の完全な API リファレンスを参照)を取得し、そこから実際のリンクを抽出して、そのリンク先を開いてください。
URL の構造はさまざまです(例:api/ui/ サブディレクトリ)。推測すると 404 エラーになります。
ライセンスキー
スキャンには Scandit ライセンスキーが必要です。このスキルでは、ライセンス製品は native、ライセンスプラットフォームは ios です。
以下の手順を順番に進めてください。MCP が使えるまでユーザーを待たせてはいけません。
-
Scandit MCP サーバーが接続されている場合 — 製品に
native、プラットフォームにios、app_identifier(アプリのバンドル ID またはアプリケーション ID。Web の場合は本番環境のドメインであり、localhostは不可)、env_varにSCANDIT_LICENSE_KEYを指定してensure_scanner_setupを呼び出してください。返されたコマンドは実行しないでください。次に、その結果またはlist_license_keysからキーの ID を取得し、get_license_keyを呼び出してください。list_license_keysでキーがトライアルではないとわかった場合は、キーを取得する前にユーザーに確認してください。チャットではマスクしたプレビューのみ表示し、キー全体を出力してはいけません。 -
接続されていない場合 — ユーザーに一度だけ、MCP クライアントでリモート Scandit MCP サーバー
https://ssl.scandit.com/mcpに接続できることを伝え、その後、手順 1 から続けてください。MCP クライアントの設定を自分で編集してはいけません。認証はブラウザー経由のため、ヘッドレス環境や CI ではサポートされていません。サーバーが発行するのはトライアルキーのみです。本番ライセンスの作成、取り消し、変更は行いません。
-
ユーザーが希望しない場合、または MCP クライアントがない場合 — https://ssl.scandit.com でキーを自分で生成してもらい、貼り付けてもらってください(アカウントをまだお持ちでない場合:https://ssl.scandit.com/dashboard/sign-up?p=test)。
次に、キーをコードに設定します:プレースホルダーの代わりに、get_license_key が返したキー、またはユーザーが貼り付けたキーや伝えたキーを、ライセンスキーを渡す呼び出しに記述してください。チャットには引き続きマスクしたプレビューのみ表示してください。プロジェクト、そのファイル、または環境からキーを検索してはいけません。
参考資料
質問に応じて、ユーザーを適切なリソースに案内してください。
| トピック | リソース |
|---|---|
| はじめに | はじめに(.NET for iOS) |
| 高度なトピック(カスタムフィードバック、ビューファインダー、位置選択、スキャン意図、複合コード) | 高度な設定 |
| メジャー SDK バージョン間の移行 | 6 → 7 · 7 → 8 |
| API リファレンス全体 | BarcodeCapture API(.NET iOS) |
このスキルが対象とする API
公式 RST ドキュメントで :available: dotnet.ios が指定されているすべてのクラスについては、references/integration.md を参照してください。
BarcodeCapture—Create(context, settings)、Create(settings)、Enabled、PointOfInterest、Feedback、BarcodeCaptureLicenseInfo、Context、静的なRecommendedCameraSettings、ApplySettingsAsync、AddListener/RemoveListener、イベントBarcodeScanned/SessionUpdated。BarcodeCaptureSettings—Create()、EnableSymbology、EnableSymbologies(ICollection<Symbology>)、EnableSymbologies(CompositeType)、GetSymbologySettings、EnabledSymbologies、EnabledCompositeTypes、CodeDuplicateFilter、LocationSelection、BatterySaving、ScanIntention、SetProperty/GetProperty<T>/TryGetProperty<T>。BarcodeCaptureFeedback— 静的なDefaultFeedback、Success。BarcodeCaptureSession—NewlyRecognizedBarcode、NewlyLocalizedBarcodes、FrameSequenceId、Reset()。IBarcodeCaptureListener—OnObservationStarted、OnObservationStopped、OnBarcodeScanned、OnSessionUpdated。BarcodeCaptureEventArgs—BarcodeCapture、Session、FrameData。BarcodeCaptureLicenseInfo—LicensedSymbologies。BarcodeCaptureOverlay—Create(barcodeCapture, view)、Create(barcodeCapture)、Brush、静的なDefaultBrush、Viewfinder、ShouldShowScanAreaGuides、SetProperty。