Симптом: проект собирается без ошибок, но это ещё не доказывает, что опубликованное приложение запустится у пользователей Intel.
Быстрое решение: сначала зафиксируйте минимальную поддерживаемую macOS и аудиторию, затем проверьте настройки Xcode 27, архитектуры конечного продукта и тесты на целевых Mac. При минимальном deployment target macOS 27 учитывайте, что ARCHS_STANDARD по умолчанию больше не включает x86_64; если вы продолжаете поддерживать Intel на более ранних системах, соберите и отдельно примите Universal-продукт. Сборочная машина сама по себе не определяет архитектуры приложения.
Эта проверка нужна разработчикам настольных приложений для macOS, которым важно согласовать цель macOS 27 с поддержкой пользователей Intel.
Она также пригодится инженерам выпуска и CI, которым нужно отличать архитектуру узла от архитектуры поставляемого приложения.
Последняя проверка: 27 октября 2026 года. Сведения о поведении Xcode, архитектурах и системной поддержке сверены с примечаниями к выпуску Xcode 27, объявлением Apple о macOS 27 и документацией Apple о Rosetta, Universal-бинарных файлах и настройках сборки.
Этап приёмки: зафиксируйте аудиторию и поддерживаемые системы
Не начинайте с переключателя ARCHS. Сначала запишите, кому и на каких системах вы обещаете запуск приложения. macOS 27 рассчитана на Apple silicon, но из этого нельзя выводить, что всякое приложение, собранное с использованием macOS 27 SDK, обязано отказаться от Intel или от более ранних выпусков macOS. Здесь важны разные вещи: версия SDK, минимальная версия развёртывания, архитектура процессора и фактический набор срезов внутри продукта.
В объявлении Apple о macOS 27 проверьте формулировки о поддерживаемых компьютерах и самой системе. Для приложения отдельно определите минимальную версию macOS и процессоры, которые вы продолжаете обслуживать. В примечаниях к Xcode 27 Apple указывает, что SDK macOS 27 позволяет создавать Universal-приложения с обратным развёртыванием на более ранние системы. Это возможность инструментария, а не автоматическая гарантия совместимости вашего приложения со всеми этими системами.
| Заявленная область поддержки | Что это означает для сборки | Что потребуется подтвердить |
|---|---|---|
| Только macOS 27 и Apple silicon | Можно оценивать arm64-only, если это согласуется с зависимостями и условиями распространения | Что целевой процессор и система соответствуют заявлению; что приложение и все вложенные компоненты запускаются в нужном окружении |
| Более ранние macOS, включая пользователей Intel | Обычно требуется сохранить путь x86_64; проверяйте Universal-состав конечного продукта |
Что приложение и его исполняемые зависимости содержат нужные срезы и проходят тесты на Intel Mac |
| Поддержка указана без версии системы или процессора | Решение о снятии архитектуры принимать рано | Уточнить продуктовую политику, минимальную систему и распределение пользователей до изменения настроек |
Важно: «собрано на Apple silicon», «собрано с macOS 27 SDK» и «поддерживает только Apple silicon» — не взаимозаменяемые утверждения. Зафиксируйте отдельно конфигурацию CI, SDK, deployment target и обещание пользователю.
Для Rosetta также не подменяйте ограниченное заявление о переводе Intel-кода универсальным обещанием совместимости. Ознакомьтесь с документацией Apple о среде трансляции Rosetta и сверяйте конкретные формулировки поддержки с официальным объявлением. Наличие Rosetta не исправляет отсутствующую архитектуру в бинарном файле, несовместимую библиотеку или неподдерживаемый deployment target. Оно также не доказывает, что приложение проходит проверку на Intel Mac: Intel-процессор выполняет x86_64 нативно, а не проверяет arm64-срез через Rosetta.
Этап настройки: проверьте deployment target и ARCHS каждого target
Откройте настройки сборки каждого target, который попадёт в поставляемый продукт: приложения, вспомогательных исполняемых файлов, расширений и плагинов. Просмотр только настроек основного приложения недостаточен: у отдельных целей могут быть собственные значения архитектур, исключения или переопределения конфигурации.
Документация Apple по настройке параметров сборки target описывает работу с параметрами сборки и их уровнями. В проекте важно проверить не только видимое значение в интерфейсе, но и разрешённое значение для конкретной схемы, конфигурации и SDK. Если команда задаёт параметры через xcconfig, скрипт или аргументы xcodebuild, включите и эти источники в проверку.
| Параметр | Что проверить | Риск при пропуске |
|---|---|---|
MACOSX_DEPLOYMENT_TARGET |
Минимальная версия должна совпадать с обещанием пользователям и политикой выпуска | Приложение может требовать более новую систему, чем указано в документации продукта |
ARCHS |
Набор архитектур в каждой конфигурации и его фактическое разрешение инструментарием | Ожидание Universal-сборки может не соответствовать выбранной стандартной архитектуре |
EXCLUDED_ARCHS |
Нет ли исключения x86_64 или arm64, заданного для target, SDK или конфигурации |
Один архитектурный срез может незаметно исчезнуть на этапе сборки |
VALID_ARCHS |
Не осталось ли старого пользовательского переопределения в проектах и xcconfig | Наследуемые настройки могут конфликтовать с актуальным поведением Xcode |
| Настройки зависимостей | Совпадают ли архитектурные возможности библиотек, фреймворков и плагинов с целевым продуктом | Основной файл может быть Universal, а необходимый компонент — только arm64 |
Для проекта с минимальным deployment target macOS 27 ключевой нюанс таков: по примечаниям к выпуску Xcode 27, ARCHS_STANDARD по умолчанию больше не включает x86_64, когда целевая версия macOS равна 27 или выше. Поэтому прежнее ожидание, что стандартная настройка автоматически даст Universal-сборку, может оказаться неверным. Сверьте это с официальными примечаниями Xcode 27, затем получите разрешённые настройки из того же окружения и конфигурации, которыми пользуется CI.
Для диагностики пригодится команда:
xcodebuild -showBuildSettings \
-scheme MyApp \
-configuration Release
Сохраните вывод как артефакт приёмки или приложите к задаче выпуска только релевантные строки. Проверяйте значения как минимум для MACOSX_DEPLOYMENT_TARGET, ARCHS, EXCLUDED_ARCHS и, если он присутствует, VALID_ARCHS. Замените MyApp на имя своей схемы. Если проект использует разные настройки для Debug и Release, тестовая схема отличается от архивной или значения подставляются скриптом, проверьте именно конфигурацию публикации, а не удобный для локальной разработки вариант.
Переопределять ARCHS вручную стоит только после установления причины. Например, если продукт обязан поддерживать Intel, а стандартное значение в конфигурации с macOS 27 не даёт нужного среза, согласуйте явное архитектурное решение со всеми targets и зависимостями. Не добавляйте x86_64 вслепую: если бинарная библиотека или сторонний компонент этой архитектуры не содержит, сборка может завершиться ошибкой либо результат не будет пригоден для распространения.
Этап сборки: исследуйте конечный архив, а не только проект
Параметры проекта объясняют намерение сборки, но не подтверждают содержимое поставляемого файла. Проверяйте архив или готовый пакет, который фактически уйдёт пользователям. Между настройками и релизом могут находиться отдельная схема архивации, фазовые скрипты, копирование ресурсов, встраивание библиотек, упаковка установщика и обработка артефактов в CI.
Для основного исполняемого файла используйте lipo:
lipo -archs "/путь/к/MyApp.app/Contents/MacOS/MyApp"
Если вы заявляете поддержку Intel и рассчитываете на Universal binary, в результате должны присутствовать arm64 и x86_64. Руководство Apple по созданию Universal-бинарного файла для macOS разъясняет объединение срезов. Команда помогает проверить конкретный файл, однако одного основного исполняемого файла недостаточно для полноценного вердикта.
Проверьте содержимое .app, архива или установочного пакета: динамические библиотеки, встроенные фреймворки, вспомогательные процессы, плагины и другие исполняемые компоненты, необходимые при запуске или во время работы. Если основной файл содержит оба среза, а обязательный helper — только arm64, Intel-пользователь всё равно может получить отказ при запуске или при вызове соответствующей функции. Для сложного продукта полезно составить перечень исполняемых компонентов и сохранить результат проверки по каждому из них.
Отдельно зафиксируйте идентификатор сборки, конфигурацию, схему, выбранный SDK и контрольную сумму проверяемого артефакта, если это предусмотрено вашим процессом выпуска. Так результаты осмотра можно связать именно с опубликованным кандидатом, а не с предыдущим локальным файлом с тем же именем. Не подменяйте эту проверку снимком настроек Xcode: снимок подтверждает конфигурацию, но не состав бинарного файла после упаковки.
Если получен неверный набор срезов, сначала выясните, где он изменился: на уровне target, зависимости, архивной схемы или упаковочного скрипта. Техническая заметка Apple TN3117 о разрешении ошибок сборки для Apple silicon полезна при разборе архитектурных конфликтов, но не заменяет проверку конечного продукта и не отменяет требований вашей матрицы совместимости.
Этап тестирования: выполните отдельную проверку на каждой архитектуре
Успешный CI-run на одном типе Mac подтверждает только тот маршрут сборки и запуска, который реально выполнялся на этом узле. Он не доказывает, что Universal-файл содержит требуемый срез, что Intel-путь работает, или что ключевые сценарии приложения одинаково проходят на обеих архитектурах. Для приёмки подготовьте отдельные записи испытаний на Apple silicon и Intel Mac, если обе платформы входят в область поддержки.
| Среда проверки | Что подтвердить | Что сохранить в отчёте |
|---|---|---|
| Apple silicon | Запуск arm64-пути, старт приложения, критичные функции и взаимодействие со встроенными компонентами | Версия macOS, архитектура, версия приложения, идентификатор сборки и результат сценариев |
| Intel Mac | Запуск x86_64-пути, работу зависимостей и те же критичные пользовательские сценарии |
Версия macOS, архитектура, версия приложения, идентификатор сборки и результат сценариев |
| Установочный пакет на целевой системе | Поведение после установки, а не только из каталога разработки | Версия пакета, результат установки, запуска и проверки функций |
Для обеих платформ используйте один и тот же кандидат на выпуск, если ваша процедура не требует отдельной сборки для разных архитектур. Запишите версию системы и приложения, идентификатор артефакта, результат старта, проверку основных функций и обнаруженные отклонения. «Приложение открылось» — необходимая, но не достаточная отметка, если важные функции запускают отдельные процессы, загружают плагины или используют архитектурно-зависимые библиотеки.
На Intel Mac вы можете проверить путь x86_64, но не использовать эту машину для отладки arm64-среза как нативной архитектуры. На Apple silicon проверьте ожидаемый нативный путь и, если это имеет отношение к вашей политике, отдельно разберите исполнение Intel-кода через Rosetta. Не смешивайте такой тест с нативным испытанием на Intel: это разные режимы выполнения и разные доказательства совместимости.
Если Intel-оборудование недоступно команде постоянно, не выдавайте успешный запуск на Apple silicon за замену тесту Intel-сценария. Укажите это ограничение в отчёте, определите риск для выпуска и решите, требуется ли доступ к реальному Intel Mac до релиза. Рекомендации Apple в документации Rosetta помогают отделить перевод инструкций от поддержки конкретного приложения, но подтверждение пользовательского сценария всё равно требует целевой среды.
Этап решения о выпуске: сохраните Universal или переходите на arm64-only
Решение принимайте на основании заявленной аудитории, а не того, какая архитектура оказалась удобнее для CI. Если вы продолжаете поддерживать пользователей Intel или более ранние macOS, оставьте Universal-путь и оформите его приёмку: соответствующие срезы в продукте, проверенные зависимости и отдельный результат испытаний на Intel Mac. Если приложение официально рассчитано только на macOS 27 и Apple silicon, arm64-only можно рассматривать после проверки всех компонентов, установщика и распространения.
Перед выпуском ответьте на каждый пункт:
- [ ] В документации продукта указаны минимальная версия macOS и поддерживаемые процессоры.
- [ ] Вы проверили официальный статус macOS 27 и не распространили его на обещания совместимости приложения с другими системами.
- [ ] Для каждого target проверены
MACOSX_DEPLOYMENT_TARGET,ARCHS,EXCLUDED_ARCHSи применимые переопределения. - [ ] Ожидаемое поведение
ARCHS_STANDARDсверено с примечаниями Xcode 27 и фактическими разрешёнными настройками проекта. - [ ] Архитектуры проверены в исполняемом файле из конечного архива или пакета.
- [ ] Для обязательных библиотек, helper-процессов и плагинов подтверждены необходимые архитектурные срезы.
- [ ] Результаты запуска на Apple silicon и Intel Mac записаны отдельно, если обе платформы входят в поддержку.
- [ ] Артефакт, настройки и результаты испытаний связаны одной записью о кандидате на выпуск.
Если приложению необходимы реальные Mac для повторяемого выпуска или проверки архитектурных срезов, оцените доступ к удалённой среде по условиям, которые можно проверить до начала работ: доступность нужных инструментов, способ подключения, права для установки зависимостей и возможность получить артефакты проверки. Сведения об использовании удалённых Mac собраны на странице сценариев разработки и эксплуатации. Если вы сравниваете такой подход с покупкой собственной машины, текущие условия аренды проверяйте в тарифах KVMFLUX; эта статья не предполагает конкретную конфигурацию, цену или наличие определённого узла.
Частые вопросы
Нужна ли поддержка Intel Mac для приложения под macOS 27?
Только если Intel-пользователи и соответствующие версии macOS входят в вашу продуктовую область поддержки. В этом случае проверяйте наличие x86_64 в конечном артефакте, архитектуры зависимостей и результат испытаний на Intel Mac. Если продукт ограничен macOS 27 и Apple silicon, оцените arm64-only после проверки всего состава приложения и условий распространения.
Включает ли Xcode 27 x86_64 по умолчанию при deployment target macOS 27?
Нет: примечания Apple к Xcode 27 уточняют, что при минимальной версии macOS 27 или выше ARCHS_STANDARD больше не включает x86_64 по умолчанию. Но этот факт не означает, что macOS 27 SDK не подходит для Universal-сборок с развёртыванием на более ранние системы. Проверьте итоговые настройки нужного target и его конфигурации.
Как доказать, что продукт содержит arm64 и x86_64?
Проверьте исполняемый файл в архиве или установочном пакете командой lipo -archs, а затем изучите необходимые библиотеки и вспомогательные компоненты. Для Universal-поставки в проверяемом основном бинарном файле ожидаются оба среза. Сохраните вывод вместе с идентификатором сборки и результатом упаковки: настройки проекта сами по себе не доказывают, что обе архитектуры попали в доставляемый продукт.
Как подтвердить совместимость приложения отдельно на двух типах Mac?
На Apple silicon проверьте запуск нативного arm64-пути, а на Intel Mac — x86_64-путь. Для каждого испытания запишите версию macOS, версию и идентификатор сборки приложения, архитектуру среды и результат критичных функций. Один успешный запуск не подтверждает обе платформы, а Intel Mac нельзя считать средой нативной отладки arm64.
При выборе между текущей сборочной схемой и проверкой на Mac-среде учитывайте, что неподходящая Linux-машина не воспроизводит macOS-инструментарий, а универсальная сборка на одном типе Mac не заменяет тест Intel-пути. Покупка собственного оборудования может быть оправдана при постоянной загрузке и необходимости физического доступа, но для временной проверки выпуска это означает отдельные расходы, обслуживание и необходимость обеспечить нужные поколения процессоров. Если вам нужно воспроизвести сборку и проверить артефакт вне локального Mac, изучите условия удалённого доступа и аренды KVMFLUX, прежде чем переносить туда релизный процесс.
Часто задаваемые вопросы
Нужно ли сохранять поддержку Intel Mac для приложения под macOS 27?
Это определяется заявленной областью поддержки продукта, а не только версией сборочной системы. Если приложение должно запускаться на более ранних macOS и обслуживать пользователей Intel, вам понадобится проверить x86_64 в конечном продукте и отдельно испытать его на Intel Mac. Если поддерживаются только macOS 27 и Apple silicon, можно рассмотреть сборку только для arm64, но сначала проверьте зависимости, установщик и требования распространения.
Добавляет ли Xcode 27 x86_64 по умолчанию для macOS 27?
Нет. В примечаниях к выпуску Xcode 27 указано, что при целевой версии macOS 27 или выше ARCHS_STANDARD больше не включает x86_64 по умолчанию. Это не означает, что всякая сборка из macOS 27 SDK обязана быть arm64-only: SDK может использоваться для Universal-приложения с развёртыванием на более ранние системы. Проверьте разрешённые настройки конкретного target и фактический бинарный файл.
Как проверить, что приложение собрано одновременно для arm64 и x86_64?
Проверяйте не только настройки проекта, но и исполняемый файл внутри окончательного архива или установочного пакета. Для бинарного файла можно выполнить `lipo -archs /путь/к/файлу`; ожидаемые архитектуры должны быть перечислены в выводе. Затем проверьте динамические библиотеки, плагины и другие исполняемые компоненты: если зависимость содержит только arm64, наличие обеих архитектур у основного приложения само по себе не обеспечивает запуск на Intel.
Как отдельно принять приложение на Apple silicon и Intel Mac?
Составьте отдельные записи испытаний для каждой целевой платформы: укажите модель архитектуры, версию macOS, версию продукта, идентификатор сборки и результат запуска ключевых функций. На Apple silicon проверьте нативный arm64-сценарий; на Intel Mac — путь x86_64. Не считайте успешную компиляцию или запуск на одном типе процессора доказательством работы на другом: Intel Mac не предназначен для отладки arm64-среза.
Проверьте приложение на выделенном Mac mini M4
Используйте KVMFLUX как удалённую среду для сборки и испытаний приложения на Apple silicon. Запускайте Xcode и CI по SSH или подключайтесь к macOS через VNC, чтобы проверить поведение приложения на реальном Mac. Сопоставьте результаты на Apple silicon с отдельными испытаниями на Intel Mac и убедитесь, что сборка содержит нужные архитектуры. Выберите срок аренды под задачу — от одного дня для проверки до квартала для постоянного узла CI.