Tipps zur Problembehandlung von Xamarin.Mac

Übersicht

Manchmal bleiben wir während der Arbeit an einem Projekt hängen, entweder in der Möglichkeit, eine API zu erhalten, wie wir möchten oder versuchen, um einen Fehler zu umgehen. Unser Ziel bei Xamarin ist es, dass Sie ihre mobilen und Desktopanwendungen schreiben können, und wir haben einige Ressourcen zur Unterstützung bereitgestellt.

Mit einer dieser Ressourcen gibt es einige Schritte der Vorbereitung, die Sie ergreifen 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ürzen 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ückgeben" ist viel einfacher zu beheben.

    • "Ich kann keine NSTable 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 anzeigt. Durch die Durchdigung durch Seiten des Quellcodes, die nach dem Problem suchen, dauert mehr Zeit und Aufwand.

  • Das Wissen, welche Änderungen Sie an Ihrer Anwendung vorgenommen haben, um ein Problem zu verursachen, kann schnell die Quelle des Problems einschränken. Notieren Sie, wenn Sie kürzlich Versionen von Xamarin.Mac aktualisiert haben, indem Sie Abschnitte Ihrer Anwendung ausschneiden, um den Teil zu finden, der das Problem verursacht, oder vorherige Builds testen, um zu finden, was das Problem eingeführt hat, kann sehr hilfreich sein.

Was sie tun soll, wenn Ihre App ohne Ausgabe abstürzt

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

  • Probleme bei der Codesignierung.
  • Bestimmte Mono-Runtime stürzt ab.
  • Einige Objektiv-c-Ausnahmen und Absturze.
  • Einige stürzen sehr früh ab, die Prozesslebensdauer.
  • Einige Stapelüberlaufe.
  • 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 Finden der erforderlichen Informationen schwierig sein kann. Nachfolgend finden Sie einige Ansätze, die helfen können:

  • Stellen Sie sicher, dass die macOS Version, die in der Info.plist aufgeführt ist, identisch mit der version von macOS ist, die derzeit auf dem Computer installiert ist.

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

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

    MyApp.app/Contents/MacOS/MyApp (wo MyApp ist der Name Ihrer Anwendung)

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

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

  • Sie können einen nativen Debugger () an Ihren Prozess anfügen, um zu sehen, ob dies weitere Informationen bereitstellt (lldbdies erfordert eine kostenpflichtige Lizenz). Führen Sie beispielsweise die folgenden Schritte aus:

    1. Geben Sie im Terminal ein lldb MyApp.app/Contents/MacOS/MyApp .
    2. Geben Sie im Terminal ein run .
    3. Geben Sie im Terminal ein c .
    4. Beenden Sie das Debuggen, wenn Sie fertig sind.
  • Als letztes Problem können Sie vor dem Aufrufen NSApplication.Init ihrer Main Methode (oder an anderen Stellen wie erforderlich) Text in eine Datei an einem bekannten Speicherort schreiben, um nachzuverfolgen, welche Schritte beim Start auftreten.

Bekannte Probleme

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

Die Verbindung mit dem Debugger in Sandkasten-Apps kann nicht hergestellt werden.

Der Debugger stellt eine Verbindung mit Xamarin.Mac-Apps über TCP her, d. h., wenn Sie Sandkasten aktivieren, kann keine Verbindung mit der App hergestellt werden, sodass Sie versuchen, die App ohne die richtigen Berechtigungen auszuführen, einen Fehler "Mit dem Debugger kann keine Verbindung hergestellt werden".

Editing the entitlements in the App sandbox.

Die Berechtigung "Ausgehende Netzwerkverbindungen zulassen" (Client) ist für den Debugger erforderlich, wodurch das Debuggen normal aktiviert wird. Da Sie ohne es nicht debuggen können, haben wir das CompileEntitlements Ziel msbuild aktualisiert, um diese Berechtigung automatisch zu den Berechtigungen für jede App hinzuzufügen, die nur für Debugbuilds sandkastenlich ist. Release-Builds sollten die in der Berechtigungsdatei angegebenen Berechtigungen verwenden, nicht geändert.

System.NotSupportedException: Für die Codierung 437 steht keine Daten zur Verfügung.

Wenn Sie 3rd-Party-Bibliotheken in Ihrer Xamarin.Mac-App einschließen, wird möglicherweise ein Fehler in dem Formular "System.NotSupportedException" angezeigt: Es stehen keine Daten für die Codierung von 437 zur Verfügung, wenn Sie versuchen, die App zu kompilieren und auszuführen. Beispielsweise können Bibliotheken, wie Ionic.Zip.ZipFilez. 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 wechseln und dieWest-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 werden. Bevor Sie versuchen, mit einer neuen Version von Xcode zu kompilieren, müssen Sie diese Version mindestens einmal ausführen.

Beim ersten Ausführen einer neuen Version von Xcode wird mehrere Befehlszeilentools installiert, die von Xamarin.Mac benötigt werden. Darüber hinaus sollten Sie nach dem Aktualisieren Xcode oder Ihrer Xamarin.Mac-Version einen sauberen Build ausführen.

Wenn Sie dieses Problem nicht beheben können, geben Sie 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 ihn in separatem Berechtigungen.plist-Editor platziert (für bessere plattformübergreifende Unterstützung mit Xamarin.iOS).

Visual Studio für Mac Wenn Sie ein neues Xamarin.Mac-App-Projekt erstellen, wird automatisch eine Datei "Entitlements.plist" zur Projektstruktur hinzugefügt, wenn Sie ein neues Xamarin.Mac-App-Projekt erstellen:

Selecting entitlements

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

Editing the entitlements

Für vorhandene Xamarin.Mac-Projekte müssen Sie die Datei "Berechtigungen.plist" manuell erstellen, indem Sie mit der rechten Maustaste auf das Projekt im Lösungspad klicken und die Option"Neue Dateihinzufügen>" auswählen. Wählen Sie als Nächstes Xamarin.Mac>Empty-Eigenschaftsliste 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, das Projekt hinzuzufügen, anstatt eine neue Datei zu erstellen:

Verifying the overwrite of a file

Community Support für die Foren

Die Community von Entwicklern mit Xamarin-Produkten 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.

Einreichen eines Fehlers

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

  • Durchsuchen Sie das Repository „Issues“.
  • Vor der Umstellung auf das GitHub-Repository „Issues“ wurden Xamarin-Probleme auf Bugzilla nachverfolgt. Suchen Sie dort nach übereinstimmenden Problemen.
  • Wenn Sie kein übereinstimmendes Problem finden können, melden Sie ein neues Problem im GitHub-Repository „Issues“.

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.