Ř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í nil
zá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 null
ArgumentNullException
, ale myslíte si, že by mělo fungovat, postupujte takto:
- 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ěří. - Zakažte chybu.
- Můžete tu chybu obejít? Pokud se můžete vyhnout volání rozhraní API,
null
může být snadné obejít jednoduchou kontrolu null volání. - 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:
- Podívejte se na fóra Xamarin.Mac
- Vyhledejte úložiště problému.
- Pokud nemůžete najít odpovídající problém, vytvořte nový problém v úložišti problémů GitHubu.
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í.