Rozwiązywanie problemów z wiązaniem

Niektóre porady dotyczące rozwiązywania problemów z powiązaniami z interfejsami API systemu macOS (wcześniej znanymi jako OS X) na platformie Xamarin.Mac.

Brakujące powiązania

Chociaż platforma Xamarin.Mac obejmuje większość interfejsów API firmy Apple, czasami może być konieczne wywołanie interfejsu API firmy Apple, który nie ma jeszcze powiązania. W innych przypadkach należy wywołać język C/Objective-C innej firmy, który wykracza poza zakres powiązań platformy Xamarin.Mac.

Jeśli masz do czynienia z interfejsem API firmy Apple, pierwszym krokiem jest poinformowanie platformy Xamarin, że osiągasz sekcję interfejsu API, dla którego nie mamy jeszcze pokrycia. Zgłoś usterkę zwracającą uwagi na brakujący interfejs API. Do określania priorytetów interfejsów API, nad którymi pracujemy, używamy raportów od klientów. Ponadto jeśli masz licencję Business lub Enterprise i ten brak powiązania blokuje postęp, postępuj zgodnie z instrukcjami w temacie Pomoc techniczna , aby zgłosić bilet. Nie możemy obiecać powiązania, ale w niektórych przypadkach możemy ci obejść pracę.

Po powiadomieniu platformy Xamarin (jeśli ma to zastosowanie) o braku powiązania, następnym krokiem jest samodzielne powiązanie go. Mamy tutaj pełny przewodnik i kilka nieoficjalnych dokumentacji tutaj na potrzeby zawijania Objective-C powiązań ręcznie. Jeśli wywołujesz interfejs API języka C, możesz użyć mechanizmu P/Invoke języka C#, dokumentacja znajduje się tutaj.

Jeśli zdecydujesz się samodzielnie pracować nad powiązaniem, pamiętaj, że błędy w powiązaniu mogą spowodować wszelkie ciekawe awarie w natywnym środowisku uruchomieniowym. W szczególności należy zachować ostrożność, że podpis w języku C# jest zgodny z podpisem natywnym w liczbie argumentów i rozmiarem każdego argumentu. Niepowodzenie tej czynności może spowodować uszkodzenie pamięci i/lub stosu i może spowodować awarię natychmiast lub w dowolnym punkcie w przyszłości lub uszkodzonych danych.

Wyjątki argumentów podczas przekazywania wartości null do powiązania

Podczas gdy platforma Xamarin działa w celu zapewnienia wysokiej jakości i dobrze przetestowanych powiązań dla interfejsów API firmy Apple, czasami błędy i błędy są wsuwane. Najbardziej typowym problemem, który można napotkać, jest zgłaszany ArgumentNullException przez interfejs API podczas przekazywania wartości null, gdy podstawowy interfejs API akceptuje nilwartość . Pliki nagłówka natywnego definiujące interfejs API często nie udostępniają wystarczającej ilości informacji o tym, które interfejsy API akceptują zero i które będą ulegać awarii w przypadku przekazania go.

Jeśli napotkasz przypadek, w którym przekazanie null elementu zgłasza błąd ArgumentNullException , ale uważasz, że powinno to zadziałać, wykonaj następujące kroki:

  1. Zapoznaj się z dokumentacją firmy Apple i/lub przykładami, aby sprawdzić, czy można znaleźć dowód, że akceptuje nil. Jeśli masz doświadczenie w pracy z Objective-Cprogramem , możesz napisać mały program testowy, aby go zweryfikować.
  2. Zgłoś usterkę.
  3. Czy możesz obejść usterkę? Jeśli możesz uniknąć wywoływania interfejsu API za pomocą nullpolecenia , proste sprawdzanie wartości null wokół wywołań może być łatwe w pracy.
  4. Jednak niektóre interfejsy API wymagają przekazania wartości null, aby wyłączyć lub wyłączyć niektóre funkcje. W takich przypadkach można obejść ten problem, wyświetlając przeglądarkę zestawów (zobacz Znajdowanie elementu członkowskiego języka C# dla danego selektora), kopiowanie powiązania i usuwanie sprawdzania wartości null. Jeśli to zrobisz, pamiętaj, aby zgłosić usterkę (krok 2), ponieważ skopiowane powiązanie nie będzie otrzymywać aktualizacji i poprawek, które wprowadziliśmy na platformie Xamarin.Mac, i należy je uznać za krótkoterminową pracę.

Raportowanie usterek

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ę.