Aktualizowanie aplikacji ujednoliconych platformy Xamarin.Mac do 64-bitowej
Od stycznia 2018 r. firma Apple wymaga, aby nowe 64-bitowe przesyłanie do sklepu Mac App Store było przeznaczone dla 64-bitowych. Aplikacje dostępne już w sklepie Mac App Store muszą zostać zaktualizowane do wersji docelowej 64-bitowej do czerwca 2018 r.
Szablon projektu File>New Xamarin.Mac domyślnie tworzy aplikacje 64-bitowe, więc wszystkie ostatnio utworzone aplikacje są już zgodne z 64-bitowymi i nie będą wymagały żadnych zmian.
Określanie wartości docelowej 64-bitowej
Otwórz okno Opcje projektu dla aplikacji Xamarin.Mac:
Wybierz pozycję Kompilacja dla komputerów Mac i ustaw pozycję Obsługiwane architektury , aby x86_64:
Jeśli aplikacja ma jakiekolwiek zależności zewnętrzne, takie jak natywne odwołania lub projekty powiązania, zaktualizuj je do wartości docelowej 64-bitowej.
Błędy
Podczas pierwszej kompilacji lub uruchamiania aplikacji z obsługą 64-bitową mogą wystąpić błędy linków z programu clang lub problemów ze środowiskiem uruchomieniowym. Te błędy mogą wystąpić, jeśli zależności innych firm — na przykład odwołania natywne w projektach Xamarin.Mac lub powiązania albo ręcznie załadowane struktury dla całego systemu — nie zostały zaktualizowane do wersji 64-bitowej.
Napiwek
Konwertowanie projektu na 64-bitowe jest ważną zmianą i może pośrednio ujawnić różne błędy programowania. W szczególności może to zmienić rozmiar i wyrównanie struktur danych, które miałyby wpływ na podpisy p/invoke i kod natywny połączony w projekcie. Rozważ przejrzenie wszystkich ostrzeżeń dotyczących kompilacji i dokładnie przetestuj aplikację, aby przechwycić potencjalne problemy.
Przykładowy błąd wynikający z dynamicznie połączonej zależności innej firmy, która nie jest docelowa w wersji 64-bitowej:
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
Ten błąd można obserwować w czasie wykonywania, dlopen
zwracając IntPtr.Zero
zamiast oczekiwanego dojścia.
Przykładowy błąd wynikający ze statycznie połączonej zależności innej firmy, która nie jest docelowa w wersji 64-bitowej:
Undefined symbols for architecture x86_64:
"_LibraryFunction", referenced from:
-u command line option
ld: symbol(s) not found for architecture x86_64
Aby pomyślnie skompilować i uruchomić, zaktualizuj te zależności do wersji 64-bitowej i ponownie skompiluj aplikację.