Sdílet prostřednictvím


Řešení potíží s vazbami

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

Chybějící vazby

I když Xamarin.Mac pokrývá většinu rozhraní API Apple, někdy možná budete muset volat některé rozhraní Apple API, které ještě nemá vazbu. V jiných případech je potřeba volat třetí stranu C/Objective-C , že je mimo rozsah vazeb Xamarin.Mac.

Pokud pracujete s rozhraním Apple API, prvním krokem je dát Xamarinu vědět, že se blížíte části rozhraní API, pro které ještě nemáme pokrytí. Zakažte chybu s chybějícím rozhraním API. Sestavy od zákazníků používáme k určení priorit rozhraní API, na kterých pracujeme v dalším kroku. Pokud máte navíc licenci Business nebo Enterprise a tento nedostatek vazby blokuje váš postup, postupujte také podle pokynů podpory a vytvořte lístek. Nemůžeme slíbit vazbu, ale v některých případech vám můžeme pomoct.

Jakmile Xamarin (pokud je k dispozici) upozorníte na chybějící vazbu, je dalším krokem zvážení vytvoření vazby. Máme zde úplnou příručku a některé neoficiální dokumentace zde pro zabalení Objective-C vazeb ručně. Pokud voláte rozhraní API jazyka C, můžete použít mechanismus volání nespravovaného kódu jazyka C#, tady je dokumentace.

Pokud se rozhodnete pracovat na vazbě sami, mějte na paměti, že chyby ve vazbě můžou způsobit nejrůznější zajímavé chybové ukončení v nativním modulu runtime. Dávejte pozor zejména na to, aby váš podpis v jazyce C# odpovídal nativnímu podpisu v počtu argumentů a velikosti každého argumentu. Pokud to neuděláte, může dojít k poškození paměti nebo zásobníku a mohlo by dojít k okamžitému chybovému ukončení nebo k nějakému libovolnému bodu v budoucnu nebo poškození dat.

Výjimky argumentů při předávání hodnoty null vazbě

I když Xamarin pracuje na poskytování vysoce kvalitních a dobře otestovaných vazeb pro rozhraní API Apple, někdy chyby a chyby se vyklouznou. Nejběžnějším problémem, na který můžete narazit, je rozhraní API, které se vyvolá ArgumentNullException při předání hodnoty null při přijetí nilzákladního rozhraní API . Nativní hlavičkové soubory definující rozhraní API často neposkytují dostatek informací o tom, která rozhraní API přijímají nil a která se chybově ukončí, pokud ho předáte.

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

  1. Podívejte se do dokumentace společnosti Apple nebo příklady a podívejte se, jestli najdete důkaz, že ho přijímá nil. Pokud vám to nevadí Objective-C, můžete napsat malý testovací program, který ho ověří.
  2. Zakažte chybu.
  3. Můžete tu chybu obejít? Pokud se můžete vyhnout volání rozhraní API, nullmůže být snadné obejít jednoduchou kontrolu null volání.
  4. Některá rozhraní API ale vyžadují předání hodnoty null, aby se vypnuly nebo zakázaly některé funkce. V těchto případech můžete problém vyřešit tak, že otevřete prohlížeč sestavení (viz Vyhledání člena jazyka C#pro daný selektor), zkopírováním vazby a odebráním kontroly null. Pokud to uděláte, nezapomeňte vytvořit chybu (krok 2), protože zkopírovaná vazba nebude přijímat aktualizace a opravy, které provedeme v Xamarin.Mac, a měli byste se považovat za krátkodobou práci.

Hlášení chyb

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

Všechny problémy GitHubu jsou veřejné. Komentáře ani přílohy není možné skrýt.

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

  • Jednoduchý příklad reprodukování problému. To je neocenitelné , pokud je to možné.
  • Úplné trasování zásobníku chybového ukončení.
  • Kód jazyka C# obklopuje chybové ukončení.