Обновление Xamarin.Mac Unified приложений до 64-разрядной версии

По состоянию на январь 2018 года Apple требует, чтобы новые отправки Mac App Store предназначены для 64-разрядной версии. Приложения, уже доступные в Mac App Store, должны быть обновлены до 64-разрядной версии к июню 2018 года.

Шаблон проекта File>New Xamarin.Mac создает 64-разрядные приложения по умолчанию, поэтому все недавно созданные приложения уже совместимы с 64-разрядными и не требуют каких-либо изменений.

Назначение 64-разрядной версии

  1. Откройте окно параметров проекта для приложения Xamarin.Mac:

    The contextual menu for the project

  2. Выберите " Сборка Mac" и задайте поддерживаемые архитектурыдля x86_64:

    Setting the supported architectures to x86_64

  3. Если у вашего приложения есть внешние зависимости, такие как собственные ссылки или проекты привязки, обновите их до 64-разрядной версии.

ошибки

При первом создании или запуске приложения с 64-разрядной поддержкой могут возникнуть ошибки связи из проблем с clang или среды выполнения. Эти ошибки могут возникать, если сторонние зависимости ( например, собственные ссылки в проектах Xamarin.Mac или привязки, а также платформы на уровне системы вручную) не были обновлены до 64-разрядной версии.

Совет

Преобразование проекта в 64-разрядную версию является основным изменением и может косвенно выявить различные ошибки программирования. В частности, это может изменить размер и выравнивание структур данных, которые повлияют на p/invoke signatures и машинный код, связанные в проекте. Рассмотрите возможность тщательного просмотра предупреждений сборки и тщательного тестирования приложения, чтобы поймать потенциальные проблемы.

Пример ошибки, связанной с динамически связанной сторонней зависимостью, которая не предназначена для 64-разрядной версии:

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 

Эта ошибка может выполняться во время выполнения, dlopen возвращая IntPtr.Zero вместо ожидаемого дескриптора.

Пример ошибки, связанной со статически связанной сторонней зависимостью, которая не предназначена для 64-разрядной версии:

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

Чтобы успешно создать и запустить, обновите эти зависимости до 64-разрядной и повторной компиляции приложения.