Udostępnij za pośrednictwem


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

  1. Otwórz okno Opcje projektu dla aplikacji Xamarin.Mac:

    The contextual menu for the project

  2. Wybierz pozycję Kompilacja dla komputerów Mac i ustaw pozycję Obsługiwane architektury , aby x86_64:

    Setting the supported architectures to x86_64

  3. 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ę.