MAUI と Xamarin SDK のトラブルシューティング
重要
Visual Studio App Center は、2025 年 3 月 31 日に廃止される予定です。 完全に廃止されるまで Visual Studio App Center を引き続き使用できますが、移行を検討できる推奨される代替手段がいくつかあります。
詳細ログの収集
ログ レベルを に VERBOSE
調整する方法については、「 その他の API」 セクションを参照してください。
詳細ログは、[Windows>出力のデバッグ>] ウィンドウで確認できます。
セットアップ中の問題
- Xamarin.Forms アプリの場合は、ライブラリを参照するすべてのプロジェクトにパッケージがインストールされていることを確認します。 それ以外の場合は、エラーが表示されます。
- Xamarin.iOS 用にビルドするときにこのエラーが表示される場合:
MTOUCH: Error MT3001: Could not AOT the assembly 'obj/**/Build/Microsoft.AppCenter.**.iOS.Bindings.dll' (MT3001)
Xamarin.iOS コンポーネントをバージョン 10.4.0.128 以降に更新する必要があります。 - Xamarin.iOS 用のビルド時にこのエラーが表示される場合:
MTOUCH: Error MT5210: Native linking failed, undefined symbol: _OBJC_METACLASS_$_MS{SomeSdkClassName}. Please verify that all the necessary frameworks have been referenced and native libraries are properly linked in. (MT5210)
または同様のエラー (MT5211
App Center に言及する同様のメッセージを含むコード) が表示される場合は、特定のサービスの API を使用する前に を呼び出AppCenter.Start
してください。 を呼び出Start
しているが、この問題が発生している場合は、Xamarin.iOS コンポーネントをバージョン 10.4.0.128 以降に更新する必要があります。 - コンソールで、"App Center SDK が正常に構成されました" というメッセージが表示された Assert ログを探します。 これにより、SDK が正常に構成されていることが確認されます。
ポータルに分析データが表示されない
SDK モジュールが正しく統合されていることを確認します。
メソッド呼び出しと共に正しいアプリ シークレットが含まれていることを
Start()
確認します。 ポータルでアプリを開き、ページに移動することで、正確なStart()
コードはじめにコピーできます。バックエンドに送信されるログを表示する場合は、アプリケーションでログ レベルを Verbose に変更すると、SDK によってコンソールにログが出力されます。 SDK を開始する前に、以下の API を呼び出します。
AppCenter.LogLevel = LogLevel.Verbose;
"App Center SDK が正常に構成されました" というログ (情報ログ レベル) を確認し、HTTPS 要求ログが表示される場合はチェックします。
デバイスがオンラインであることを確認します。
場合によっては、ログがポータルに表示されるまで数分かかる場合があります。 その場合はしばらく待ちます。
App Center バックエンドがデータを受信したかどうかをチェックするには、Analytics サービスの [ログ フロー] セクションに移動します。 送信されると、イベントが表示されます。
クラッシュがポータルに表示されない
SDK モジュールが正しく統合されていることを確認します。
メソッド呼び出しと共に正しいアプリ シークレットが含まれていることを
Start()
確認します。 ポータルでアプリを開き、ページに移動することで、正確なStart()
コードはじめにコピーできます。クラッシュ後にアプリを再起動します。 App Center のクラッシュは、再起動後にのみクラッシュ ログを転送します。 また、Xamarin.iOS と Xamarin.Mac では、デバッガーをアタッチした場合、SDK はクラッシュ ログを保存しません。 iOS アプリをクラッシュさせたときにデバッガーがアタッチされていないことを確認します。 Xamarin.Android では、デバッガーをアタッチしているときにクラッシュする可能性がありますが、未処理の例外に分割した後も実行を続行する必要があります。
バックエンドに送信されるログを表示する場合は、アプリケーションでログ レベルを Verbose に変更すると、SDK によってコンソールにログが出力されます。 SDK を開始する前に、以下の API を呼び出します。
AppCenter.LogLevel = LogLevel.Verbose;
"App Center SDK が正常に構成されました" というログ (情報ログ レベル) を確認し、HTTPS 要求ログが表示される場合はチェックします。
Xamarin Insights や HockeyApp など、クラッシュ レポート機能を提供する他のライブラリは使用しないでください。 統合できるクラッシュ レポート SDK は 1 つだけです。
デバイスがオンラインであることを確認します。
場合によっては、ログがポータルに表示されるまで数分かかる場合があります。 その場合はしばらく待ちます。
SDK が次回のアプリの起動時にクラッシュを検出した場合にチェックする場合は、API を呼び出して、最後のセッションでアプリがクラッシュしたかどうかをチェックし、アラートを表示できます。 または、クラッシュ コールバックを拡張して、サーバーに正常に送信されたかどうかを確認することもできます。
App Center バックエンドがクラッシュを受信したかどうかをチェックするには、Analytics サービスの [ログ フロー] セクションに移動します。 送信されると、クラッシュが表示されます。
配布とアプリ内の更新によって自動 UI テストがブロックされている
自動 UI テストを実行している場合、アプリ内更新を有効にすると、App Center バックエンドに対する認証が試行されるため、自動 UI テストはブロックされます。 UI テストでは、App Center の配布を有効にしないことをお勧めします。
DistributePlay を追加した後、Google Play によってアプリケーションが拒否される
アプリ内更新の実装が含まれているため、モジュールを Distribute
使用するアプリは拒否されます。 この状況を回避するために、App Center SDK にはモジュールがありDistributePlay
、メイン モジュールのスタブが含まれています。 これは、メインアセンブリを、API を模倣するスタブアセンブリにDistribute
置き換えます。 クライアント アプリケーションで追加の変更は必要ありません。 DistributePlay
には、アプリ内更新に関連するコードはありません。
モジュールをアプリにDistributePlay
置き換えたDistribute
後も拒否された場合は、次の手順に従って、モジュールがDistribute
正しく置き換えられたことを確認してください。
- Google Play Console のすべての発行グループについて、すべてのリリースで を に置き換えてください
Distribute
DistributePlay
。 - を使用
Xamarin.Forms
する場合は、モジュールを共有プロジェクトとXamarin.Android
プロジェクトのDistributePlay
両方に追加してください。 - 出力ファイルにアセンブリが含まれていないことを確認します
Microsoft.AppCenter.Distribute.Android.Bindings.dll
。 APK アナライザーを使用してチェックできます。
iOS でデータベースを開けなかったことを示すコンソール内のメッセージ
App Center では、SQLite を使用して、バックエンドに送信される前にログを保持します。 OS によって提供されるライブラリではなく、独自の SQLite ライブラリを使用してアプリケーションをバンドルしている場合は、コンソール [AppCenter] ERROR: -[MSACDBStorage executeSelectionQuery:]/147 Failed to open database
にこのようなエラーが表示され、バックエンドに分析情報やクラッシュ情報が表示されない可能性があります。 SDK をバージョン 0.16.0 以降に更新します。
App Center シークレット値を保護する
app_secret
はアプリの識別子であり、トラフィックが適用されるアプリを知る必要があり、既存のデータを取得または編集するために使用できません。 app_secret
が公開されている場合、最も大きなリスクはアプリに不適切なデータを送信することですが、データのセキュリティには影響しません。
機密データを取得するには、クライアント側で生成されるアプリ/ユーザー トークンを指定する必要があります。 クライアント側のデータを完全にセキュリティで保護する方法はありません。
環境変数を使用してアプリ シークレットをコードに挿入することで、アプリのセキュリティを向上させることができます。 そうすることで、シークレットはコードに表示されません。