Aktualizace sjednocených aplikací Xamarin.Mac na 64bitovou verzi

Od ledna 2018 vyžaduje Apple, aby nová odeslání z Mac App Storu cílila na 64bitovou verzi. Aplikace, které jsou už dostupné v Mac App Storu, musí být aktualizovány tak, aby cílily na 64bitovou verzi do června 2018.

Šablona projektu Nový> soubor Xamarin.Mac ve výchozím nastavení vytvoří 64bitové aplikace, takže všechny nedávno vytvořené aplikace jsou již 64bitové kompatibilní a nebudou vyžadovat žádné změny.

Cílení na 64bitovou verzi

  1. Otevřete okno Možnosti projektu pro aplikaci Xamarin.Mac:

    The contextual menu for the project

  2. Vyberte Build pro Mac a nastavte podporované architektury na x86_64:

    Setting the supported architectures to x86_64

  3. Pokud má vaše aplikace nějaké externí závislosti, jako jsou nativní odkazy nebo projekty vazeb, aktualizujte je tak, aby cílily na 64bitovou verzi.

Chyby

Při prvním sestavení nebo spuštění aplikace s 64bitovou podporou může docházet k chybám propojení při problémech s clangem nebo modulem runtime. K těmto chybám může dojít v případě, že závislosti třetích stran – například nativní odkazy v projektech Xamarin.Mac nebo vazby nebo ručně načtené architektury pro celý systém – nebyly aktualizovány na 64bitovou verzi.

Tip

Převod projektu na 64bitovou verzi je zásadní změnou a může nepřímo odhalit různé programovací chyby. Konkrétně může změnit velikost a zarovnání datových struktur, které by ovlivnily podpisy p/vyvolání a nativní kód propojený v projektu. Zvažte kontrolu všech upozornění sestavení, která jste dostali, a důkladně otestujte aplikaci, abyste zachytili potenciální problémy.

Příklad chyby vyplývající z dynamicky propojené závislosti třetí strany, která necílila 64bitovou verzi:

ld : warning : ignoring file PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary, 
file was built for i386 which is not the architecture being linked (x86_64): 
PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary 

Tuto chybu může následovat za běhu vrácením dlopenIntPtr.Zero namísto očekávaného popisovače.

Příklad chyby vyplývající ze staticky propojené závislosti třetí strany, která necílila 64bitovou verzi:

Undefined symbols for architecture x86_64:
  "_LibraryFunction", referenced from:
     -u command line option
ld: symbol(s) not found for architecture x86_64 

Pokud chcete úspěšně sestavit a spustit, aktualizujte tyto závislosti na 64bitovou verzi a aplikaci znovu zkompilujte.