Обновление Xamarin.Mac Unified приложений до 64-разрядной версии
По состоянию на январь 2018 года Apple требует, чтобы новые отправки Mac App Store предназначены для 64-разрядной версии. Приложения, уже доступные в Mac App Store, должны быть обновлены до 64-разрядной версии к июню 2018 года.
Шаблон проекта File>New Xamarin.Mac создает 64-разрядные приложения по умолчанию, поэтому все недавно созданные приложения уже совместимы с 64-разрядными и не требуют каких-либо изменений.
Назначение 64-разрядной версии
Откройте окно параметров проекта для приложения Xamarin.Mac:
Выберите " Сборка Mac" и задайте поддерживаемые архитектуры для x86_64:
Если у вашего приложения есть внешние зависимости, такие как собственные ссылки или проекты привязки, обновите их до 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-разрядной и повторной компиляции приложения.