Řešení potíží s vazbami

Některé tipy pro řešení potíží s vazbami na rozhraní API pro macOS (dříve označované jako OS X) v Xamarin.Macu

Chybějící vazby

Xamarin.Mac sice pokrývá velkou část rozhraní Api společnosti Apple, ale někdy možná budete muset zavolat nějaké rozhraní Apple API, které ještě nemá vazbu. V jiných případech je potřeba volat C/ třetí strany, aby byla mimo rozsah Objective-C vazeb Xamarin.Mac.

Pokud se zabýváte rozhraním Apple API, prvním krokem je, abyste Xamarinu věděli, že se nacházíte v části rozhraní API, pro kterou zatím nemáme pokrytí. Zahájte chybu s chybějícím rozhraním API. Sestavy od zákazníků používáme k určení priority rozhraní API, na kterých budeme dále pracovat. Pokud navíc máte firemní nebo Enterprise a tato nedostatečná vazba blokuje váš postup, postupujte také podle pokynů v části Podpora a zařiďte lístek. Vazbu nemůžeme slíbit, ale v některých případech vám můžeme dát nějaký problém.

Jakmile Xamarinu (pokud je to možné) oznámíte chybějící vazbu, v dalším kroku zvažte vytvoření vazby sami. Tady najdete kompletního průvodce a neoficiální dokumentaci k balení vazeb ručně. Pokud voláte rozhraní API jazyka C, můžete použít mechanismus volání nespravování a volání jazyka C#, dokumentaci najdete tady.

Pokud se rozhodnete pracovat na vazbě sami, uvědomte si, že chyby ve vazbě mohou způsobit nejrůznější zajímavá selhání v nativním modulu runtime. Zejména buďte velmi opatrní, aby podpis v jazyce C# odpovídal nativnímu podpisu v počtu argumentů a velikosti každého argumentu. Pokud to neuměníte, může dojít k poškození paměti nebo zásobníku a můžete okamžitě nebo v libovolném bodě v budoucnu dojít k chybě nebo poškození dat.

Výjimky argumentů při předávání hodnoty null do vazby

Xamarin sice funguje tak, aby poskytoval vysoce kvalitní a dobře otestované vazby pro rozhraní Api společnosti Apple, ale někdy se chyby a chyby vloudí. Zdaleka nejběžnějším problémem, na který můžete naběhat, je rozhraní API, které se při předání hodnoty null spustí, když podkladové rozhraní ArgumentNullException API přijme nil . Soubory nativních hlaviček, které definují rozhraní API, často neposkytují dostatek informací o tom, která rozhraní API přijímají nil a která při jeho předání dojde k chybě.

Pokud napadáte případ, kdy předání vyvolá výjimku , ale myslíte si, že nullArgumentNullException by mělo fungovat, postupujte následovně:

  1. Podívejte se do dokumentace a příkladů společnosti Apple a zjistěte, jestli nenajdete doklad o tom, že akceptuje nil . Pokud jste s , můžete napsat malý Objective-C testovací program a ověřit ho.
  2. Zakašte chybu.
  3. Můžete chybu obchádovat? Pokud se můžete vyhnout volání rozhraní API pomocí , může být jednoduché obchádování volání jednoduchou kontrolu hodnot null null.
  4. Některá rozhraní API ale k vypnutí nebo zakázání některých funkcí vyžadují předání hodnoty null. V těchto případech můžete tento problém obvyřešit tak, že zobrazíte prohlížeč sestavení (viz Vyhledání člena jazyka C#pro daný selektor), zkopírování vazby a odebrání kontroly hodnoty null. Pokud to uděláme, nezapomeňte zapište chybu (krok 2), protože zkopírovaná vazba neobdrží aktualizace a opravy, které v Xamarin.Macu uděláme, a mělo by se to považovat za krátkodobé řešení.

Hlášení chyb

Vaše názory jsou pro nás důležité. Pokud zjistíte nějaké problémy s Xamarin.Macem:

  • Podívejte se na fóra Xamarin.Mac
  • Hledat v úložišti problémů
  • Před přepnutím na GitHub problémy byly problémy s Xamarinem sledovány na bugzilla. Vyhledejte v těchto programech odpovídající problémy.
  • Pokud nemůžete najít odpovídající problém, zapište nový problém v úložišti GitHub problému.

GitHub jsou všechny veřejné. Komentáře ani přílohy není možné skrýt.

Uveďte co nejvíce z následujících:

  • Jednoduchý příklad reprodukující problém. Pokud je to možné, je to neocenitelné.
  • Úplné trasování zásobníku selhání.
  • Kód jazyka C# obklopující selhání.