Udostępnij za pośrednictwem


Porady dotyczące rozwiązywania problemów z platformą Xamarin.Mac

Omówienie

Czasami wszyscy utknęliśmy podczas pracy nad projektem, albo na brak możliwości działania interfejsu API w taki sposób, w jaki chcemy, lub próbując obejść usterkę. Naszym celem w środowisku Xamarin jest pomyślne napisanie aplikacji mobilnych i klasycznych, a my udostępniliśmy pewne zasoby, które pomogą.

W przypadku dowolnego z tych zasobów możesz wykonać kilka kroków przygotowania, aby pomóc im szybko rozwiązać problem:

  • Ustal główną przyczynę problemu, jak najlepiej, aby zgłosić awarie:

    • "Moja aplikacja ulega awarii" jest trudna do zdiagnozowania. "Moja aplikacja ulega awarii, gdy zwracam pustą tablicę do tego wywołania", jest znacznie łatwiej pracować nad naprawianiem.

    • "Nie mogę uzyskać NSTable do pracy" jest mniej pomocne niż "Żadna z metod w moim NSTableDelegate wydaje się być wywoływana w tym przypadku."

  • Jeśli to możliwe, podaj mały przykładowy program pokazujący problem. Kopanie stron kodu źródłowego w poszukiwaniu problemu wymaga więcej czasu i nakładu pracy.

  • Znajomość zmian wprowadzonych w aplikacji w celu wyświetlenia problemu może szybko zawęzić źródło problemu. Zauważając, że ostatnio uaktualniono wersje platformy Xamarin.Mac, przycinanie sekcji aplikacji w celu znalezienia części powodującej problem lub przetestowanie poprzednich kompilacji w celu znalezienia, jakie zmiany wprowadziły problem, mogą być bardzo przydatne.

Co zrobić, gdy aplikacja ulegnie awarii bez danych wyjściowych

W większości przypadków debuger w Visual Studio dla komputerów Mac przechwyci wyjątki i awarie w aplikacji i pomoże w śledzeniu głównej przyczyny. Jednak w niektórych przypadkach aplikacja będzie odbijać się na docku, a następnie zakończyć z niewielkimi lub żadnymi danymi wyjściowymi. Mogą one obejmować:

  • Problemy z podpisywaniem kodu.
  • Niektóre środowiska uruchomieniowe mono ulega awarii.
  • Niektóre wyjątki i awarie języka Objective-c.
  • Niektóre awarie są bardzo wczesne w okresie istnienia procesu.
  • Niektóre przepełnienie stosu.
  • Wersja systemu macOS wymieniona w pliku Info.plist jest nowsza niż obecnie zainstalowana wersja systemu macOS lub jest nieprawidłowa.

Debugowanie tych programów może być frustrujące, ponieważ znalezienie niezbędnych informacji może być trudne. Oto kilka podejść, które mogą pomóc:

  • Upewnij się, że wersja systemu macOS wymieniona w pliku Info.plist jest taka sama jak wersja systemu macOS aktualnie zainstalowana na komputerze.

  • Sprawdź dane wyjściowe aplikacji Visual Studio dla komputerów Mac (widok ->Pads ->Application Output) pod kątem śladów stosu lub danych wyjściowych w kolorze czerwonym z narzędzia Cocoa, które mogą opisywać dane wyjściowe.

  • Uruchom aplikację z poziomu wiersza polecenia i przyjrzyj się danych wyjściowych (w aplikacji terminalu) przy użyciu:

    MyApp.app/Contents/MacOS/MyApp (gdzie MyApp to nazwa aplikacji)

  • Możesz zwiększyć dane wyjściowe, dodając "MONO_LOG_LEVEL" do polecenia w wierszu polecenia, na przykład:

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

  • Do procesu można dołączyć natywny debuger (lldb), aby sprawdzić, czy zawiera więcej informacji (wymaga to płatnej licencji). Na przykład wykonaj następujące czynności:

    1. Wprowadź lldb MyApp.app/Contents/MacOS/MyApp polecenie w terminalu.
    2. Wprowadź run polecenie w terminalu.
    3. Wprowadź c polecenie w terminalu.
    4. Zakończ po zakończeniu debugowania.
  • W ostateczności przed wywołaniem NSApplication.InitMain metody (lub w innych miejscach zgodnie z potrzebami) możesz napisać tekst do pliku w znanej lokalizacji, aby śledzić, na jakim etapie uruchamiania występują problemy.

Znane problemy

W poniższych sekcjach omówiono znane problemy i ich rozwiązania.

Nie można nawiązać połączenia z debugerem w aplikacjach w trybie piaskownicy

Debuger łączy się z aplikacjami platformy Xamarin.Mac za pośrednictwem protokołu TCP, co oznacza, że domyślnie po włączeniu piaskownicy nie może nawiązać połączenia z aplikacją, więc jeśli spróbujesz uruchomić aplikację bez włączenia odpowiednich uprawnień, zostanie wyświetlony błąd "Nie można nawiązać połączenia z debugerem".

Editing the entitlements in the App sandbox.

Uprawnienie Zezwalaj na Połączenie sieci wychodzącej (klient) jest wymagane dla debugera, co umożliwi normalne debugowanie. Ponieważ nie można jej debugować, zaktualizowaliśmy CompileEntitlements element docelowy msbuild , aby automatycznie dodać to uprawnienie do uprawnień dla dowolnej aplikacji, która jest w trybie piaskownicy tylko dla kompilacji debugowania. Kompilacje wydania powinny używać uprawnień określonych w pliku uprawnień, niezmodyfikowanych.

System.NotSupportedException: żadne dane nie są dostępne do kodowania 437

W przypadku dołączania bibliotek innych firm w aplikacji Xamarin.Mac może wystąpić błąd w postaci "System.NotSupportedException: Brak danych dostępnych do kodowania 437" podczas próby skompilowania i uruchomienia aplikacji. Na przykład biblioteki, takie jak Ionic.Zip.ZipFile, mogą zgłaszać ten wyjątek podczas operacji.

Można to rozwiązać, otwierając opcje projektu platformy Xamarin.Mac, przechodząc do strony Kompilacja>komputerów Mac Internationalization i sprawdzając międzynarodowość Zachodu:

Editing the build options

Nie można skompilować (mm5103)

Ten błąd jest zwykle spowodowany wydaniem nowej wersji programu Xcode i zainstalowano nową wersję, ale nie została jeszcze uruchomiona. Przed próbą skompilowania przy użyciu nowej wersji programu Xcode należy najpierw uruchomić wersję co najmniej raz.

Przy pierwszym uruchomieniu nowej wersji środowiska Xcode instaluje kilka narzędzi wiersza polecenia wymaganych przez platformę Xamarin.Mac. Ponadto należy wykonać czystą kompilację po zaktualizowaniu programu Xcode lub wersji platformy Xamarin.Mac.

Jeśli nie możesz rozwiązać tego problemu, zgłoś usterkę.

Brak pliku entitlements.plist

Najnowsza wersja Visual Studio dla komputerów Mac usunęła sekcję Upoważnienia z edytora Info.plist i umieściła ją w osobnym edytorze Entitlements.plist (aby uzyskać lepszą obsługę międzyplatformową za pomocą platformy Xamarin.iOS).

Po zainstalowaniu nowego Visual Studio dla komputerów Mac podczas tworzenia nowego projektu aplikacji platformy Xamarin.Mac plik Entitlements.plist zostanie automatycznie dodany do drzewa projektu:

Selecting entitlements

Jeśli klikniesz dwukrotnie plik Entitlements.plist , zostanie wyświetlony edytor uprawnień:

Editing the entitlements

W przypadku istniejących projektów Xamarin.Mac należy ręcznie utworzyć plik Entitlements.plist, klikając prawym przyciskiem myszy projekt w okienkurozwiązania i wybierając polecenie Dodaj>nowy plik.... Następnie wybierz pozycję Lista pustych właściwości platformy Xamarin.Mac>:

Adding a new property list

Wprowadź Entitlements nazwę i kliknij przycisk Nowy . Jeśli projekt wcześniej zawierał plik Upoważnienia, zostanie wyświetlony monit o dodanie go do projektu zamiast tworzenia nowego pliku:

Verifying the overwrite of a file

Pomoc techniczna społeczności na forach

Społeczność deweloperów korzystających z produktów platformy Xamarin jest niesamowita i wiele z naszych forów platformy Xamarin.Mac, aby podzielić się doświadczeniami i wiedzą. Ponadto inżynierowie platformy Xamarin okresowo odwiedzają forum, aby pomóc.

Zgłaszanie usterki

Twoja opinia jest dla nas ważna. Jeśli znajdziesz jakiekolwiek problemy z platformą Xamarin.Mac:

Problemy z usługą GitHub są publiczne. Nie można ukryć komentarzy ani załączników.

Dołącz jak najwięcej z następujących elementów:

  • Prosty przykład odtworzenia problemu. Jest to bezcenne, jeśli to możliwe.
  • Pełny ślad stosu awarii.
  • Kod języka C# otaczający awarię.