Sdílet prostřednictvím


Tipy pro řešení potíží s Xamarin.Mac

Přehled

Někdy se všichni zasekneme při práci na projektu, a to buď kvůli nemožnosti získat rozhraní API tak, jak chceme, nebo se snažíme obejít chybu. Naším cílem v Xamarinu je, abyste byli úspěšní při psaní mobilních a desktopových aplikací a poskytli jsme některé zdroje informací, které vám pomůžou.

U některého z těchto prostředků je několik kroků přípravy, které vám pomůžou rychle vyřešit váš problém:

  • Určete původní příčinu problému co nejlépe, pokud chcete hlásit chybové ukončení:

    • Diagnostika chyby aplikace je obtížná. "Aplikace se chybově ukončí, když do tohoto volání vrátím prázdné pole", je mnohem jednodušší pracovat na opravě.

    • "Nejde získat NSTable k práci" je méně užitečné než "Žádný z metod v mém NSTableDelegate se zdá být volána v tomto případě."

  • Pokud je to možné, uveďte malý ukázkový program zobrazující problém. Zkoumání stránek zdrojového kódu, které hledají problém, trvá mnohem více času a úsilí.

  • Znalost změn, které jste v aplikaci udělali, aby se problém objevil, může rychle zúžit příčinu problému. Pokud jste nedávno upgradovali verze Xamarin.Mac, vystřihněte oddíly aplikace, abyste našli část způsobující problém, nebo testování předchozích buildů, abyste zjistili, jaká změna tento problém zavedla, může být velmi užitečná.

Co dělat, když se aplikace chybově ukončí bez výstupu

Ve většině případů ladicí program v Visual Studio pro Mac zachytí výjimky a chyby ve vaší aplikaci a pomůže vám najít původní příčinu. V některých případech se ale vaše aplikace v docku odrazí a pak se ukončí s malým nebo žádným výstupem. Mezi tyto možnosti patří:

  • Problémy s podepisováním kódu
  • Některé mono runtime se chybově ukončí.
  • Některé výjimky a chybové ukončení Objective-c.
  • Některé chyby velmi brzy po celou dobu životnosti procesu.
  • Některé přetečení zásobníku.
  • Verze macOS uvedená v souboru Info.plist je novější než aktuálně nainstalovaná verze macOS nebo je neplatná.

Ladění těchto programů může být frustrující, protože nalezení potřebných informací může být obtížné. Tady je několik přístupů, které vám můžou pomoct:

  • Ujistěte se, že verze macOS uvedená v souboru Info.plist je stejná jako verze macOS, která je aktuálně nainstalovaná v počítači.

  • Zkontrolujte Visual Studio pro Mac Výstup aplikace (View ->Pads ->Application Output) pro trasování zásobníku nebo výstup červeně z Cocoa, který může popisovat výstup.

  • Spusťte aplikaci z příkazového řádku a podívejte se na výstup (v terminálové aplikaci) pomocí:

    MyApp.app/Contents/MacOS/MyApp (kde MyApp je název vaší aplikace)

  • Výstup můžete zvýšit přidáním "MONO_LOG_LEVEL" do příkazu na příkazovém řádku, například:

    MONO_LOG_LEVEL=debug MyApp.app/Contents/MacOS/MyApp

  • Ke svému procesu můžete připojit nativní ladicí program (lldb), abyste zjistili, jestli obsahuje další informace (to vyžaduje placenou licenci). Postupujte například takto:

    1. Zadejte lldb MyApp.app/Contents/MacOS/MyApp do terminálu.
    2. Zadejte run do terminálu.
    3. Zadejte c do terminálu.
    4. Po dokončení ladění ukončete.
  • Jako poslední možnost můžete před voláním NSApplication.Init metody Main (nebo na jiných místech podle potřeby) napsat text do souboru ve známém umístění, abyste mohli sledovat, v jakém kroku spuštění dochází k problémům.

Známé problémy

V následujících částech najdete známé problémy a jejich řešení.

V aplikacích v izolovaném prostoru (sandbox) se nejde připojit k ladicím programu

Ladicí program se připojí k aplikacím Xamarin.Mac prostřednictvím protokolu TCP, což znamená, že když povolíte sandboxing, nemůže se k aplikaci připojit, takže pokud se pokusíte spustit aplikaci bez povolených správných oprávnění, zobrazí se chyba Nejde se připojit k ladicímu programu.

Editing the entitlements in the App sandbox.

Oprávnění Povolit odchozí síť Připojení ions (klient) je oprávnění vyžadované pro ladicí program. Povolením této sítě povolíte normální ladění. Vzhledem k tomu, že bez toho nemůžete ladit, aktualizovali CompileEntitlements jsme cíl msbuild tak, aby automaticky přidal toto oprávnění k nárokům pro jakoukoli aplikaci, která je v izolovaném prostoru (sandbox) pouze pro sestavení ladění. Sestavení vydaných verzí by měla používat oprávnění zadaná v souboru nároků bez úprav.

System.NotSupportedException: Pro kódování 437 nejsou k dispozici žádná data

Pokud do aplikace Xamarin.Mac zahrnete knihovny třetích stran, může se při pokusu o kompilaci a spuštění aplikace zobrazit chyba ve formátu System.NotSupportedException: Pro kódování 437 nejsou k dispozici žádná data. Například knihovny, například Ionic.Zip.ZipFile, mohou vyvolat tuto výjimku během operace.

To je možné vyřešit otevřením možností projektu Xamarin.Mac, přechodem na Mac Build>Internationalization a kontrolou internationalizace západu:

Editing the build options

Kompilace se nezdařila (mm5103)

Tato chyba je obvykle způsobena vydáním nové verze Xcode a máte nainstalovanou novou verzi, ale zatím ji nespustíte. Než se pokusíte zkompilovat pomocí nové verze Xcode, musíte nejprve spustit tuto verzi alespoň jednou.

Při prvním spuštění nové verze Xcode nainstaluje několik nástrojů příkazového řádku, které vyžaduje Xamarin.Mac. Kromě toho byste měli po aktualizaci Xcode nebo verze Xamarin.Mac provést čisté sestavení.

Pokud tento problém nemůžete vyřešit, vytvořte chybu.

Chybějící oprávnění.plist

Nejnovější verze Visual Studio pro Mac odebrala oddíl Nároky z editoru Info.plist a umístila ji do samostatného editoru Entitlements.plist (pro lepší podporu pro různé platformy v Xamarin.iOS).

Při instalaci nového Visual Studio pro Mac se při vytváření nového projektu aplikace Xamarin.Mac automaticky přidá soubor Entitlements.plist do stromu projektu:

Selecting entitlements

Pokud dvakrát kliknete na soubor Entitlements.plist , zobrazí se Editor nároků:

Editing the entitlements

U existujících projektů Xamarin.Mac budete muset soubor Entitlements.plist vytvořit ručně tak, že kliknete pravým tlačítkem myši na projekt v oblasti řešení a vyberete Přidat>nový soubor.... Dále vyberte seznam prázdných vlastností Xamarin.Mac>:

Adding a new property list

Zadejte Entitlements název a klikněte na tlačítko Nový . Pokud projekt dříve obsahoval soubor Nároků, zobrazí se výzva k jeho přidání do projektu místo vytvoření nového souboru:

Verifying the overwrite of a file

Podpora komunity na fórech

Komunita vývojářů používajících produkty Xamarin je úžasná a mnoho z nich navštíví naše fóra Xamarin.Mac, kde se můžete podělit o zkušenosti a jejich odborné znalosti. Kromě toho Xamarinoví inženýři pravidelně navštíví fórum, které vám pomůže.

Vytvoření chyby

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