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
Otevřete okno Možnosti projektu pro aplikaci Xamarin.Mac:
Vyberte Build pro Mac a nastavte podporované architektury na x86_64:
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 dlopen
IntPtr.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.