Сборка исходников и .app для macOS
Apple SDK, архитектуры, C#-стадии и упаковка bundle.
Здесь описана сборка исходников Reckfell 1.0.0 для macOS. Для упаковки готовой игры используйте экспорт macOS. Компиляция и создание .app ниже сверены по исходникам, но не выполнялись на этом Windows-хосте.
Выберите Apple toolchain
Нужны Apple toolchain и macOS SDK, Python 3.9+, SCons 4.4+ и .NET SDK 10 для C#. В терминале сборки проверьте:
xcode-select --print-path
xcrun --sdk macosx --show-sdk-path
clang --versionОтсутствующий/неверный активный developer directory настройте по инструкции Apple. Сборка ищет SDK через xcrun, если MACOS_SDK_PATH не задан явно. Один каталог Mac SDK не предоставляет все compiler/framework-зависимости. Кросс-компиляция требует отдельного toolchain, а не одного platform=macos на другой OS.
Текущие исходники принимают arm64 и x86_64. Минимальная deployment-версия задаётся как macOS 13.0 для arm64 и 11.0 для x86_64. Это флаги сборки, не полная сертификация оборудования/возможностей. Metal в этих исходниках включён только для arm64; ветвь x86_64 отключает его с предупреждением. Объединённый бинарник не доказывает одинаковый набор рендереров.
Проверьте зависимости рендереров и дополнительных возможностей
| Опция | Следствие |
|---|---|
| vulkan=yes, use_volk=no | Нужен совместимый MoltenVK; при ошибке обнаружения задайте vulkan_sdk_path |
| metal=yes | Нужны выбранные Apple SDK/frameworks и поддерживаемая архитектура |
| angle=yes | Нужны подходящие ANGLE-библиотеки через angle_libs; отсутствие может отключить backend с предупреждением |
| accesskit=yes | Нужен AccessKit C SDK через accesskit_sdk_path; отсутствие может отключить поддержку доступности |
Читайте полный журнал конфигурации: успешная сборка всё ещё может иметь отключённый backend. angle=no/accesskit=no используйте только как осознанное изменение возможностей. Архитектура зависимостей должна соответствовать результату.
Соберите и подготовьте C#
Запускайте из Source с SConstruct. Пример редактора Apple Silicon:
scons platform=macos target=editor arch=arm64 module_mono_enabled=yes -j4Для Intel используйте arch=x86_64 и соответствующие зависимости. Остальные опции, включая dev_build и precision, влияют на имена/конфигурацию. Результаты находятся в Source/bin. Старый файл, оставшийся после ошибки компиляции/линковки, не подтверждает успех: проверьте exit status и время результата.
C#-модуль по умолчанию выключен. Native-компиляция с module_mono_enabled=yes — одна стадия: сгенерируйте glue новым редактором и соберите соответствующие managed API/packages с .NET SDK 10. RECKFELL_BINARY должен указывать на реальный новый результат; скорректируйте имя примера под свою конфигурацию:
RECKFELL_BINARY="/absolute/Source/bin/reckfell.macos.editor.arm64.mono"
"$RECKFELL_BINARY" --headless --generate-mono-glue modules/mono/glue
python3 modules/mono/build_scripts/build_assemblies.py --reckfell-output-dir=bin --push-nupkgs-local=bin/NuGet
"$RECKFELL_BINARY" --path /absolute/project --editorПроверьте bin/ReckfellSharp и bin/NuGet для SDK 1.0.0. Native/managed-возможности должны совпадать. project.reckfell должен лежать в каталоге --path. --headless — режим запуска, не доказательство отсутствия зависимостей или проверки GPU.
Создайте bundle последним
Для .app C#-редактора сначала подготовьте managed-результат, затем выполняйте финальный проход generate_bundle=yes: упаковщик копирует bin/ReckfellSharp, но сам этот каталог не собирает. Используйте согласованные SCons-опции:
scons platform=macos target=editor arch=arm64 module_mono_enabled=yes generate_bundle=yes -j4Результат находится в bin; имя .app зависит от префикса/суффиксов сборки. Проверьте Contents/MacOS/Reckfell и для C# — Contents/Resources/ReckfellSharp. Упаковщик использует исходный шаблон misc/dist/macos_tools.app и текущие entitlements из misc/dist/macos. Не копируйте устаревшие пути из другого checkout.
Для Intel и Apple Silicon сначала соберите обе архитектуры с согласованными настройками, затем запускайте финальную упаковку. Помощник lipo объединяет реально найденные бинарники, а не создаёт отсутствующую архитектуру. Проверьте архитектуры результата вместо вывода о universal-сборке по имени файла.
bundle_sign_identity по умолчанию равен '-' для локальной ad-hoc подписи. Это не Developer ID distribution/notarization. Помощник вызывает codesign без обязательной проверки его return code: завершение SCons само по себе не доказывает успех подписи. Просмотрите вывод codesign и проверьте готовый bundle перед использованием. Проверка распространения и подпись в этом проходе не выполнялись.
Для игровых шаблонов используйте target=template_debug/template_release с согласованными C#/архитектурой/опциями. generate_bundle упаковывает доступные результаты, но не компилирует все отсутствующие варианты. Проверяйте экспортированную игру на каждой поддерживаемой целевой OS.
Диагностика и ограничения
| Ошибка | Что проверить |
|---|---|
| xcrun не находит SDK | Активный developer directory и MACOS_SDK_PATH |
| Нет MoltenVK/ANGLE/AccessKit | Выбранный backend, SDK path и архитектуру |
| Ошибка копирования C# в bundle | Подходящий bin/ReckfellSharp существует до упаковки |
| .app есть, но не запускается | Реальный executable, managed-файлы, динамические зависимости и подпись |
| Нет одной архитектуры | Оба native-результата и одинаковую конфигурацию упаковки |
Опции исходников, managed-стадии и поведение упаковщика сверены. Компиляция macOS, установка зависимостей, реальная многоархитектурная линковка, запуск, графика, подпись и экспорт не проверены. Source, установленный Runtime и SDK не менялись.