Xamarin.Mac のトラブルシューティングのヒント

概要

プロジェクトを進めていく中で、API が思ったように動作しなかったり、バグを回避しようとしたりして行き詰まることがあります。 Xamarin における目標は、モバイル アプリケーションとデスクトップ アプリケーションを正常に作成していただくことなので、有用なリソースを提供しています。

これらのリソースでは、問題を迅速に解決するために実行できる準備手順がいくつかあります。

  • クラッシュを報告するために可能な限り問題の根本原因を特定します。

    • "アプリケーションがクラッシュしました" は診断が困難です。 "この呼び出しに空の配列を返すとアプリケーションがクラッシュします"は、修正作業がはるかに簡単です。

    • "NSTable を機能させる方法がありません" は、"この場合、NSTableDelegate のメソッドが呼び出されていないようです" よりも役に立ちません。

  • 可能であれば、問題を示す小さなサンプル プログラムを提供します。 問題を探しているソース コードのページを掘り下げると、時間と労力が大幅に増えます。

  • 問題の原因となるアプリケーションに対して行った変更を把握すると、問題の原因をすばやく絞り込むことができます。 Xamarin.Mac のバージョンを最近アップグレードした場合、アプリケーションのセクションをトリミングして問題の原因となっている部分を見つけたり、以前のビルドをテストして問題が発生した変更を見つけたりすると、非常に役立ちます。

出力なしでアプリがクラッシュした場合の対処方法

ほとんどの場合、Visual Studio for Mac のデバッガーは、アプリケーションで例外とクラッシュをキャッチし、根本原因を追跡するのに役立ちます。 ただし、アプリケーションがドックでバウンスし、ほとんどまたはまったく出力なしで終了する場合もあります。 次のようなものがあります。

  • コード署名の問題。
  • 特定の mono ランタイムがクラッシュします。
  • Objective-c の一部の例外とクラッシュ。
  • プロセスの有効期間の非常に早い段階でクラッシュするものもあります。
  • 一部のスタック オーバーフロー。
  • Info.plist一覧表示されている macOS のバージョンが、現在インストールされている macOS バージョンよりも新しいか、無効です。

これらのプログラムのデバッグは、必要な情報を見つけるのが難しい場合があります。 役に立つ可能性のあるいくつかの方法を次に示します。

  • Info.plist に表示されている macOS のバージョンが、コンピューターに現在インストールされている macOS のバージョンと同じであることを確認します。

  • Visual Studio for Mac アプリケーション出力 (ビュー -Pad ->>Application Output) で、出力を記述する可能性がある Cocoa からのスタック トレースまたは出力を赤で確認します。

  • コマンド ラインからアプリケーションを実行し、次のコマンドを使用して (ターミナル アプリで) 出力を確認します。

    MyApp.app/Contents/MacOS/MyApp (アプリケーションの名前を指定 MyApp します)

  • 出力を増やすには、コマンド ラインでコマンドに "MONO_LOG_LEVEL" を追加します。次に例を示します。

    MONO_LOG_LEVEL=debug MyApp.app/Contents/MacOS/MyApp

  • ネイティブ デバッガー (lldb) をプロセスにアタッチして、それ以上の情報が提供されているかどうかを確認できます (これには有料ライセンスが必要です)。 たとえば、次の操作を行います。

    1. ターミナルに入力 lldb MyApp.app/Contents/MacOS/MyApp します。
    2. ターミナルに入力 run します。
    3. ターミナルに入力 c します。
    4. デバッグが完了したら終了します。
  • 最後の手段として、メソッド (または必要に応じて他の場所) でMain呼び出すNSApplication.Init前に、既知の場所のファイルにテキストを書き込んで、問題が発生している起動の手順を追跡できます。

既知の問題

次のセクションでは、既知の問題とその解決策について説明します。

サンドボックス アプリでデバッガーに接続できない

デバッガーは TCP 経由で Xamarin.Mac アプリに接続します。つまり、既定ではサンドボックスを有効にするとアプリに接続できないため、適切なアクセス許可を有効にせずにアプリを実行しようとすると、"デバッガーに接続できません" というエラーが表示されます。

Editing the entitlements in the App sandbox.

[ 発信ネットワーク接続を許可する (クライアント)] アクセス許可はデバッガーに必要なアクセス許可であり、これを有効にすると通常どおりデバッグできます。 それなしではデバッグできないため、デバッグ ビルド専用のサンドボックス化されたアプリのエンタイトルメントにそのアクセス許可を自動的に追加するようにターゲットmsbuildを更新CompileEntitlementsしました。 リリース ビルドでは、変更されていないエンタイトルメント ファイルで指定されたエンタイトルメントを使用する必要があります。

System.NotSupportedException: エンコード 437 に使用できるデータがありません

Xamarin.Mac アプリにサード パーティ製ライブラリを含めると、アプリをコンパイルして実行しようとすると、"System.NotSupportedException: No data is available for encoding 437" (System.NotSupportedException: No data is available for encoding 437) という形式でエラーが発生する可能性があります。 たとえば、ライブラリは Ionic.Zip.ZipFile、操作中にこの例外をスローする場合があります。

これは、Xamarin.Mac プロジェクトのオプションを開き、Mac Build>Internationalization に移動し、西の国際化をチェックすることで解決できます。

Editing the build options

コンパイルに失敗しました (mm5103)

このエラーは、通常、Xcode の新しいバージョンがリリースされ、新しいバージョンをインストールしたが、まだ実行していない場合に発生します。 新しいバージョンの Xcode でコンパイルする前に、まず少なくとも 1 回は、そのバージョンを実行する必要があります。

新しいバージョンの Xcode を初めて実行すると、Xamarin.Mac に必要なコマンド ライン ツールがいくつかインストールされます。 さらに、Xcode または Xamarin.Mac のバージョンを更新した後、クリーンビルドを実行する必要があります。

この問題を解決できない場合は、バグを提出してください

entitlements.plist が見つかりません

最新バージョンの Visual Studio for Mac では、Info.plist エディターから Entitlements セクションが削除され、別の Entitlements.plist エディターに配置されています (Xamarin.iOS でのクロスプラットフォーム サポートの向上のため)。

新しい Visual Studio for Mac がインストールされると、新しい Xamarin.Mac アプリ プロジェクトを作成すると、 Entitlements.plist ファイルがプロジェクト ツリーに自動的に追加されます。

Selecting entitlements

Entitlements.plist ファイルをダブルクリックすると、エンタイトルメント エディターが表示されます。

Editing the entitlements

既存の Xamarin.Mac プロジェクトの場合は、ソリューション パッドでプロジェクトを右クリックし、[新しいファイルの追加>] を選択して、Entitlements.plist ファイルを手動で作成する必要があります次に、Xamarin.Mac>の空のプロパティ リストを選択します

Adding a new property list

名前を入力Entitlementsし、[新規] ボタンをクリックします。 プロジェクトにエンタイトルメント ファイルが含まれていた場合は、新しいファイルを作成するのではなく、プロジェクトに追加するように求められます。

Verifying the overwrite of a file

フォーラムでのコミュニティ サポート

Xamarin 製品を使用する開発者のコミュニティはすばらしいものであり、多くの人が Xamarin.Mac フォーラムにアクセスして、エクスペリエンスとその専門知識を共有しています。 さらに、Xamarin エンジニアはフォーラムに定期的にアクセスして支援を受けます。

バグの提出

お客様のフィードバックは Microsoft にとって重要です。 Xamarin.Mac で問題が見つかる場合:

GitHub の問題はすべて公開されています。 コメントまたは添付ファイルを非表示にすることはできません。

次の情報について、できるだけ多くを含めてください。

  • 問題を再現する簡単な例。 これは重要です (可能な場合)。
  • クラッシュの完全なスタック トレース。
  • クラッシュの周囲の C# コード。