Delen via


Tips voor het oplossen van problemen met Xamarin.Mac

Overzicht

Soms zitten we allemaal vast terwijl we aan een project werken, ofwel over het onvermogen om een API te krijgen om op de gewenste manier te werken of om een bug te omzeilen. Ons doel bij Xamarin is dat u succesvol bent met het schrijven van uw mobiele en desktoptoepassingen, en we hebben enkele bronnen verstrekt om u te helpen.

Met een van deze resources zijn er enkele stappen van voorbereiding die u kunt uitvoeren om ze te helpen uw probleem snel op te lossen:

  • Bepaal de hoofdoorzaak van het probleem zo goed mogelijk om crashes te melden:

    • 'Mijn toepassing loopt vast' is moeilijk te diagnosticeren. "Mijn toepassing loopt vast wanneer ik een lege matrix naar deze aanroep retourneer" is veel eenvoudiger om te werken aan het oplossen van problemen.

    • "Ik kan NSTable niet laten werken" is minder nuttig dan "Geen van de methoden van mijn NSTableDelegate lijkt in dit geval te worden aangeroepen."

  • Geef, indien mogelijk, een klein voorbeeldprogramma op waarin het probleem wordt weergegeven. Het doorzoeken van pagina's van broncode op zoek naar het probleem neemt meer tijd en moeite in beslag.

  • Als u weet welke wijzigingen u in uw applicatie heeft aangebracht waardoor een probleem is ontstaan, kunt u snel de bron van het probleem achterhalen. Als u onlangs een upgrade van versies van Xamarin.Mac hebt uitgevoerd, kunt u secties van uw toepassing bijsnijden om het onderdeel te vinden dat het probleem veroorzaakt, of eerdere builds testen om te achterhalen welke wijziging het probleem heeft geïntroduceerd, kan erg nuttig zijn.

Wat u moet doen wanneer uw app vastloopt zonder uitvoer

In de meeste gevallen ondervangt het foutopsporingsprogramma in Visual Studio voor Mac uitzonderingen en crashes in uw toepassing en helpt u bij het opsporen van de hoofdoorzaak. Echter zijn er enkele gevallen waarin uw applicatie stuitert in het dock en vervolgens wordt afgesloten met weinig of geen uitvoer. Dit kan het volgende omvatten:

  • Problemen met ondertekening van code.
  • Bepaalde Mono-runtime crasht.
  • Sommige Objective-c-uitzonderingen en crashes.
  • Sommige crashes treden zeer vroeg op in de levensduur van het proces.
  • Sommige stack-overloop.
  • De macOS-versie die wordt vermeld in uw Info.plist- is nieuwer dan uw momenteel geïnstalleerde macOS-versie of deze is ongeldig.

Het opsporen van fouten in deze programma's kan frustrerend zijn, omdat het vinden van de benodigde informatie lastig kan zijn. Hier volgen enkele benaderingen die u kunnen helpen:

  • Zorg ervoor dat de macOS-versie die wordt vermeld in de Info.plist- hetzelfde is als de versie van macOS die momenteel op de computer is geïnstalleerd.

  • Controleer de uitvoer van Visual Studio voor Mac-toepassingen (View ->Pads ->Application Output) voor stacktraceringen of uitvoer in rood uit Cocoa die de uitvoer kunnen beschrijven.

  • Voer uw toepassing uit vanaf de opdrachtregel en bekijk de uitvoer (in de Terminal-app) met behulp van:

    MyApp.app/Contents/MacOS/MyApp (waarbij MyApp de naam van uw toepassing is)

  • U kunt de uitvoer verhogen door 'MONO_LOG_LEVEL' toe te voegen aan uw opdracht op de opdrachtregel, bijvoorbeeld:

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

  • U kunt een systeemeigen foutopsporingsprogramma (lldb) aan uw proces koppelen om te zien of er meer informatie is (hiervoor is een betaalde licentie vereist). Ga bijvoorbeeld als volgt te werk:

    1. Voer lldb MyApp.app/Contents/MacOS/MyApp in de terminal in.
    2. Voer run in de terminal in.
    3. Voer c in de terminal in.
    4. Afsluiten wanneer u klaar bent met foutopsporing.
  • Als laatste redmiddel, voordat u NSApplication.Init aanroept in uw Main methode (of op andere plaatsen waar nodig), kunt u tekst schrijven naar een bestand op een bekende locatie om op te sporen bij welke stap van de lancering u problemen ondervindt.

Bekende problemen

In de volgende secties worden bekende problemen en hun oplossingen behandeld.

Kan geen verbinding maken met het foutopsporingsprogramma in sandbox-apps

Het foutopsporingsprogramma maakt verbinding met Xamarin.Mac-apps via TCP, wat betekent dat wanneer u sandboxing inschakelt, het geen verbinding kan maken met de app. Als u de app probeert uit te voeren zonder de juiste machtigingen ingeschakeld, krijgt u een foutmelding 'Kan geen verbinding maken met het foutopsporingsprogramma'.

de machtigingen bewerken in de App-sandbox.

De machtiging Uitgaande netwerkverbindingen (client) toestaan is de machtiging die is vereist voor het foutopsporingsprogramma. Als u deze inschakelt, wordt foutopsporing normaal toegestaan. Omdat je zonder dit niet kunt debuggen, hebben we het CompileEntitlements-doel voor msbuild bijgewerkt om die toestemming automatisch toe te voegen aan de bevoegdheden voor elke app die alleen gesandboxed is voor foutopsporingsversies. Release-builds moeten gebruikmaken van de rechten die zijn opgegeven in het rechtenbestand, ongewijzigd.

System.NotSupportedException: er zijn geen gegevens beschikbaar voor codering 437

Wanneer u bibliotheken van derden opgeeft in uw Xamarin.Mac-app, krijgt u mogelijk een foutmelding in de vorm 'System.NotSupportedException: Er zijn geen gegevens beschikbaar voor codering 437' wanneer u de app probeert te compileren en uit te voeren. Bibliotheken, zoals Ionic.Zip.ZipFile, kunnen deze uitzondering bijvoorbeeld genereren tijdens de bewerking.

Dit kan worden opgelost door de opties voor het Xamarin.Mac-project te openen, naar Mac Build>Internationalisatie te gaan en de West internationalisatie te controleren:

De buildopties bewerken

Kan niet compileren (mm5103)

Deze fout wordt meestal veroorzaakt wanneer een nieuwe versie van Xcode wordt uitgebracht en u de nieuwe versie hebt geïnstalleerd, maar deze nog niet hebt uitgevoerd. Voordat u probeert te compileren met een nieuwe versie van Xcode, moet u die versie ten minste één keer uitvoeren.

De eerste keer dat u een nieuwe versie van Xcode uitvoert, worden verschillende opdrachtregelprogramma's geïnstalleerd die vereist zijn voor Xamarin.Mac. Daarnaast moet u een schone build uitvoeren na het bijwerken van Xcode of uw Xamarin.Mac-versie.

Als u dit probleem niet kunt oplossen, een bugindienen.

Ontbrekende rechten.plist

De nieuwste versie van Visual Studio voor Mac heeft de sectie Rechten verwijderd uit de Info.plist editor en deze in afzonderlijke Entitlements.plist editor geplaatst (voor betere platformoverschrijdende ondersteuning met Xamarin.iOS).

Wanneer de nieuwe Visual Studio voor Mac is geïnstalleerd, wordt er automatisch een Entitlements.plist-bestand toegevoegd aan de projectstructuur wanneer u een nieuw Xamarin.Mac-app-project maakt:

Rechten selecteren

Als u dubbelklikt op het bestand Entitlements.plist, wordt de rechteneditor weergegeven:

De rechten bewerken

Voor bestaande Xamarin.Mac-projecten moet u het bestand Entitlements.p list handmatig maken door met de rechtermuisknop op het project te klikken in de Solution Pad- en Add>New File te selecteren.... Selecteer vervolgens Xamarin.Mac>Lege eigenschappenlijst:

Een nieuwe eigenschappenlijst toevoegen

Voer Entitlements in voor de naam en klik op de knop Nieuwe. Als uw project eerder een rechtenbestand bevat, wordt u gevraagd het toe te voegen aan het project in plaats van een nieuw bestand te maken:

het overschrijven van een bestand controleren

Communityondersteuning op de forums

De community van ontwikkelaars die Xamarin-producten gebruiken, is geweldig en veel bezoeken onze Xamarin.Mac-forums om ervaringen en hun expertise te delen. Daarnaast bezoeken Xamarin-technici periodiek het forum om u te helpen.

Een fout indienen

Uw feedback is belangrijk voor ons. Als u problemen ondervindt met Xamarin.Mac:

GitHub-problemen zijn allemaal openbaar. Het is niet mogelijk om opmerkingen of bijlagen te verbergen.

Neem zo veel mogelijk van het volgende op:

  • Een eenvoudig voorbeeld van het reproduceren van het probleem. Dit is waardevol waar mogelijk.
  • De volledige stacktrace van de crash.
  • De C#-code rond de crash.