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. Zmiany mogą dotyczyć:
- 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
(gdzieMyApp
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:- Wprowadź
lldb MyApp.app/Contents/MacOS/MyApp
polecenie w terminalu. - Wprowadź
run
polecenie w terminalu. - Wprowadź
c
polecenie w terminalu. - Zakończ po zakończeniu debugowania.
- Wprowadź
W ostateczności przed wywołaniem
NSApplication.Init
Main
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".
Uprawnienie Zezwalaj na wychodzące połączenia sieciowe (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:
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:
Jeśli klikniesz dwukrotnie plik Entitlements.plist , zostanie wyświetlony edytor uprawnień:
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 >nowy plik.... Następnie wybierz pozycję >:
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:
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:
- Przeszukaj repozytorium problemów
- Jeśli nie możesz znaleźć pasującego problemu, zgłoś nowy problem w repozytorium problemów z usługą GitHub.
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ę.