reckfellENGINE

Отладка macOS: подпись и символы

Dev entitlements, проверка подписи, .dSYM и диагностика attach.

На этой странице

Нативный LLDB и отладчик C# решают разные задачи. Эта страница — про attach к процессу macOS, разрешения подписи и символы нативного кода. Подготовку scheme смотрите в руководстве Xcode.

Локальная сборка редактора

Из Source, рядом с SConstruct, соберите dev-вариант с символами:

Командная строка
scons platform=macos target=editor arch=arm64 dev_build=yes debug_symbols=yes generate_bundle=yes -j4

На Intel используйте arch=x86_64. Пример не включает C#: для managed-части выполните отдельные стадии из руководства сборки macOS. Упаковку C# .app выполняйте после подготовки managed-файлов.

В текущем упаковщике dev_build=yes выбирает misc/dist/macos/editor_debug.entitlements; обычная сборка выбирает editor.entitlements. Только первый из этих файлов содержит com.apple.security.get-task-allow. debug_symbols=yes не выбирает debug entitlements: символы позволяют читать стек, но не дают права attach.

Упаковщик по умолчанию использует локальную ad-hoc identity -. Это не Developer ID и не notarization. Кроме того, текущий вызов codesign в упаковщике не проверяет ненулевой exit code автоматически: успешное завершение SCons само по себе не доказывает корректную подпись.

Проверка фактического bundle

Подставьте путь к полученной .app; имя зависит от параметров сборки. Команды ниже читают подпись и символы, не переподписывают приложение:

Командная строка
codesign --display --entitlements - "/absolute/Reckfell.app"
codesign --verify --deep --strict --verbose=2 "/absolute/Reckfell.app"
dwarfdump --uuid "/absolute/Reckfell.app/Contents/MacOS/Reckfell"

Для отладочного bundle проверьте com.apple.security.get-task-allow = true и результат проверки подписи. Не заменяйте это наличием entitlement-файла в исходниках: важны разрешения, реально встроенные в подпись конкретного приложения. Разрешение не гарантирует attach при любых системных политиках; при отказе сохраните точное сообщение LLDB, путь и PID процесса.

Если нужны отдельные символы, сборка поддерживает пару debug_symbols=yes separate_debug_symbols=yes. macOS post-action сначала запускает dsymutil, создаёт <binary>.dSYM, затем strip; обе команды должны завершиться успешно. Сохраняйте соответствующие бинарник, .dSYM и исходники одной сборки. Одинаковый номер версии 1.0.0 не делает разные сборки взаимозаменяемыми; сравнивайте UUID бинарника и .dSYM через dwarfdump --uuid.

Экспортированная игра

Для локального отладочного экспорта есть настройка codesign/entitlements/debugging, по умолчанию false. При формировании встроенных entitlements она добавляет com.apple.security.get-task-allow. Если используете собственный entitlement-файл, проверяйте именно его и итоговую подпись, а не только флажок preset.

Не распространяйте debug-подпись как релизную. Требования к notarization и get-task-allow приведены в документации Apple. Для релиза создайте отдельную сборку/экспорт без debug entitlement и заново проверьте подпись; переименование .app разрешения не меняет.

Диагностика

СимптомЧто проверить
Attach запрещёнИтоговые entitlements, подпись, PID, пользователя процесса и текст отказа. Не отключайте системную защиту как стандартный шаг.
Breakpoint серый, видны адресаСимволы, UUID, архитектуру и соответствие исходников. get-task-allow не генерирует символы.
Останавливается другой процессScheme executable, PID редактора/игры, путь запуска и --editor.
C#-строки недоступны в LLDBНативная остановка не подтверждает подключение managed-debugger.

Проверены исходники выбора entitlements и генерации символов. Переподпись, macOS attach, notarization и экспорт в этой проверке не выполнялись.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.