Tipps zur Problembehandlung bei Xamarin.Mac

Übersicht

Manchmal bleiben wir bei der Arbeit an einem Projekt hängen, entweder an der Unfähigkeit, eine API zu erhalten, wie wir möchten oder versuchen, einen Fehler zu umgehen. Unser Ziel bei Xamarin ist, dass Sie erfolgreich Ihre Mobilen und Desktopanwendungen schreiben, und wir haben einige Ressourcen bereitgestellt, die Ihnen helfen können.

Mit einer dieser Ressourcen gibt es einige Schritte der Vorbereitung, die Sie unternehmen können, um ihnen zu helfen, Ihr Problem schnell zu lösen:

  • Ermitteln Sie die Ursache des Problems so gut wie möglich, um Abstürze zu melden:

    • "Meine Anwendung stürzt ab" ist schwierig zu diagnostizieren. "Meine Anwendung stürzt ab, wenn ich ein leeres Array an diesen Aufruf zurückgibt" ist viel einfacher zu beheben.

    • "Ich kann NSTable nicht arbeiten" ist weniger hilfreich als "Keine der Methoden auf meinem NSTableDelegate scheint in diesem Fall aufgerufen zu werden."

  • Wenn möglich, stellen Sie ein kleines Beispielprogramm bereit, das das Problem zeigt. Das Durchsuchen von Seiten des Quellcodes, die nach dem Problem suchen, erfordert mehr Zeit und Mühe.

  • Wenn Sie wissen, welche Änderungen Sie an Ihrer Anwendung vorgenommen haben, um ein Problem zu verursachen, kann die Ursache des Problems schnell eingeschränkt werden. Notieren Sie sich, wenn Sie kürzlich versionen von Xamarin.Mac aktualisiert haben, kürzen Sie Abschnitte Ihrer Anwendung, um den Teil zu finden, der das Problem verursacht, oder testen Sie vorherige Builds, um zu finden, welche Änderung das Problem eingeführt hat, kann sehr hilfreich sein.

Was zu tun ist, wenn Ihre App ohne Ausgabe abstürzt

In den meisten Fällen erfasst der Debugger in Visual Studio für Mac Ausnahmen und Abstürze in Ihrer Anwendung und hilft Ihnen, die Ursache nachzuverfolgen. Es gibt jedoch einige Fälle, in denen Ihre Anwendung im Dock abspringt und dann mit wenig oder ohne Ausgabe beendet wird. Folgende sind möglich:

  • Probleme bei der Codesignierung.
  • Bestimmte Monolaufzeit stürzt ab.
  • Einige Objective-c-Ausnahmen und Abstürze.
  • Einige abstürze sehr früh die Prozesslebensdauer.
  • Einige Stapelüberläufe.
  • Die in Ihrer Info.plist aufgeführte macOS-Version ist neuer als Ihre aktuell installierte macOS-Version oder ist ungültig.

Das Debuggen dieser Programme kann frustrierend sein, da das Auffinden der erforderlichen Informationen schwierig sein kann. Hier sind einige Ansätze, die ihnen helfen können:

  • Stellen Sie sicher, dass die in der Info.plist aufgeführte macOS-Version mit der auf dem Computer installierten MacOS-Version identisch ist.

  • Überprüfen Sie die Visual Studio für Mac Anwendungsausgabe (View ->Pads ->Application Output) auf Stapelablaufverfolgungen oder -ausgaben in Rot aus Cocoa, die die Ausgabe beschreiben können.

  • Führen Sie Ihre Anwendung über die Befehlszeile aus, und sehen Sie sich die Ausgabe (in der Terminal-App ) mithilfe von:

    MyApp.app/Contents/MacOS/MyApp (dabei MyApp handelt es sich um den Namen Ihrer Anwendung)

  • Sie können die Ausgabe erhöhen, indem Sie ihrem Befehl in der Befehlszeile "MONO_LOG_LEVEL" hinzufügen, z. B.:

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

  • Sie können einen systemeigenen Debugger (lldb) an Ihren Prozess anfügen, um festzustellen, ob mehr Informationen bereitgestellt werden (dies erfordert eine kostenpflichtige Lizenz). Gehen Sie z. B. wie folgt vor:

    1. Geben Sie lldb MyApp.app/Contents/MacOS/MyApp in das Terminal ein.
    2. Geben Sie run in das Terminal ein.
    3. Geben Sie c in das Terminal ein.
    4. Beenden Sie das Debuggen, wenn Sie mit dem Debuggen fertig sind.
  • Als letzte Möglichkeit können Sie vor dem Aufrufen NSApplication.Init Ihrer Main Methode (oder an anderen Stellen nach Bedarf) Text in eine Datei an einem bekannten Speicherort schreiben, um zu ermitteln, in welchem Schritt der Startvorgang Probleme auftreten.

Bekannte Probleme

In den folgenden Abschnitten werden bekannte Probleme und deren Lösungen behandelt.

Es kann keine Verbindung mit dem Debugger in Sandkasten-Apps hergestellt werden.

Der Debugger stellt eine Verbindung mit Xamarin.Mac-Apps über TCP her. Dies bedeutet, dass beim Aktivieren der Sandboxing standardmäßig keine Verbindung mit der App hergestellt werden kann. Wenn Sie also versuchen, die App ohne die entsprechenden Berechtigungen auszuführen, wird die Fehlermeldung "Mit dem Debugger kann keine Verbindung hergestellt werden" angezeigt.

Editing the entitlements in the App sandbox.

Die Berechtigung "Ausgehendes Netzwerk zulassen" Verbinden ions (Client) ist die berechtigung, die für den Debugger erforderlich ist. Dadurch wird das Debuggen normal ermöglicht. Da Sie das Debuggen nicht ohne das Problem ausführen können, haben wir das CompileEntitlements Ziel msbuild aktualisiert, um diese Berechtigung automatisch den Berechtigungen für jede App hinzuzufügen, die nur für Debugbuilds verwendet wird. Releasebuilds sollten die in der Berechtigungsdatei angegebenen Berechtigungen verwenden, nicht geändert.

System.NotSupportedException: Für die Codierung 437 sind keine Daten verfügbar.

Wenn Sie Drittanbieterbibliotheken in Ihre Xamarin.Mac-App einschließen, wird möglicherweise ein Fehler im Format "System.NotSupportedException: Es sind keine Daten für die Codierung 437 verfügbar", wenn Sie versuchen, die App zu kompilieren und auszuführen. Beispielsweise können Bibliotheken, z Ionic.Zip.ZipFile. B. , diese Ausnahme während des Vorgangs auslösen.

Dies kann gelöst werden, indem sie die Optionen für das Xamarin.Mac-Projekt öffnen, zu Mac Build>Internationalization gehen und die West-Internationalisierung überprüfen:

Editing the build options

Fehler beim Kompilieren (mm5103)

Dieser Fehler wird in der Regel verursacht, wenn eine neue Version von Xcode veröffentlicht wird und Sie die neue Version installiert haben, aber noch nicht ausgeführt haben. Bevor Sie versuchen, mit einer neuen Version von Xcode zu kompilieren, müssen Sie diese Version mindestens einmal ausführen.

Wenn Sie zum ersten Mal eine neue Version von Xcode ausführen, werden mehrere Befehlszeilentools installiert, die von Xamarin.Mac benötigt werden. Darüber hinaus sollten Sie einen sauber Build ausführen, nachdem Sie Xcode oder Ihre Xamarin.Mac-Version aktualisiert haben.

Wenn Sie dieses Problem nicht beheben können, geben Sie bitte einen Fehler ein.

Fehlende Berechtigungen.plist

Die neueste Version von Visual Studio für Mac hat den Abschnitt "Berechtigungen" aus dem Info.plist-Editor entfernt und in separaten Berechtigungs-.plist-Editor platziert (für eine bessere plattformübergreifende Unterstützung mit Xamarin.iOS).

Wenn das neue Visual Studio für Mac installiert ist, wird beim Erstellen eines neuen Xamarin.Mac-App-Projekts automatisch eine Datei "Entitlements.plist" zur Projektstruktur hinzugefügt:

Selecting entitlements

Wenn Sie auf die Datei "Entitlements.plist " doppelklicken, wird der Berechtigungs-Editor angezeigt:

Editing the entitlements

Für vorhandene Xamarin.Mac-Projekte müssen Sie die Datei "Entitlements.plist" manuell erstellen, indem Sie im Projektblock mit der rechten Maustaste auf das Projekt klicken und "Neue Datei hinzufügen>... auswählen". Wählen Sie als Nächstes Xamarin.Mac>Empty Property List aus:

Adding a new property list

Geben Sie Entitlements den Namen ein, und klicken Sie auf die Schaltfläche "Neu ". Wenn Ihr Projekt zuvor eine Berechtigungsdatei enthält, werden Sie aufgefordert, es dem Projekt hinzuzufügen, anstatt eine neue Datei zu erstellen:

Verifying the overwrite of a file

Community-Support in den Foren

Die Community von Entwicklern, die Xamarin-Produkte verwenden, ist erstaunlich und viele besuchen unsere Xamarin.Mac-Foren , um Erfahrungen und ihre Expertise zu teilen. Darüber hinaus besuchen Xamarin Ingenieure regelmäßig das Forum, um zu helfen.

Ablegen eines Fehlers

Ihr Feedback ist uns sehr wichtig. Wenn Sie Probleme mit Xamarin.Mac finden:

GitHub-Issues sind allesamt öffentlich. Es ist nicht möglich, Kommentare oder Anlagen auszublenden.

Fügen Sie möglichst viele der folgenden Informationen hinzu:

  • Ein einfaches Beispiel, um das Problem zu reproduzieren. Dies ist von sehr großem Nutzen, sofern möglich.
  • Die vollständige Stapelüberwachung des Absturzes.
  • Den C#-Code, der den Absturz umgibt.