Главный подход — это создание Universal Binaries, которые объединяют архитектуры arm64 (Apple Silicon) и x86_64 (Intel) в один исполняемый файл. В Xcode это настраивается установкой ARCHS в $(ARCHS_STANDARD), что автоматически нацеливает обе платформы.
Когда поведение должно отличаться между архитектурами, используй условную компиляцию:
#if arch(arm64)
// Реализация для Apple Silicon
#elseif arch(x86_64)
// Реализация для Intel
#endif
Это позволяет держать логику платформы изолированной и легко поддерживаемой без дублирования всей кодовой базы.
Все сторонние библиотеки и фреймворки должны поддерживать обе архитектуры. Основные моменты, на которые стоит обратить внимание:
Необходимо тщательное тестирование под обе архитектуры:
Хотя Rosetta 2 умеет транслировать Intel-бинарники для запуска на Apple Silicon, полагаться на это не рекомендуется как на долгосрочное решение. Нативное выполнение всегда обеспечивает лучшую производительность и энергоэффективность. Rosetta 2 стоит рассматривать как временный мост для совместимости, а не как замену полноценной поддержки Universal Binary.
Установка ARCHS в значение $(ARCHS_STANDARD) в Xcode автоматически настраивает сборку для создания Universal Binary, содержащего обе архитектуры: arm64 и x86_64.
Новый — ещё не проверен сообществом
Вы