reckfellENGINE

Запуск игры на macOS: подпись и диагностика

Первый запуск, проверка пакета и разбор ошибок без отключения защиты системы.

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

Руководство описывает запуск экспортированной игры Reckfell на macOS и помогает отличить блокировку системы от ошибки приложения. Сначала создайте экспорт: см. Экспорт для macOS.

Первый запуск

Распакуйте ZIP перед запуском .app либо скопируйте приложение со смонтированного образа в выбранный каталог установки. Сохраняйте комплектность пакета приложения и сопутствующих файлов. Перемещение в «Программы» не исправляет подпись и не выполняет нотариализацию.

Для распространения вне Mac App Store подпись, нотариализация и разрешение запуска — разные этапы. Подпись ad-hoc не подтверждает личность через Developer ID. Работа локальной сборки на компьютере разработчика не доказывает, что скачанный релиз пройдёт Gatekeeper на другом Mac. Для App Store действуют проверки при отправке приложения, а не отдельный ручной процесс нотариализации. См. требования Apple к нотариализации.

Если macOS блокирует доверенную тестовую сборку из-за неизвестного разработчика или отсутствия нотариализации, сначала попробуйте открыть её. Затем используйте Системные настройки → Конфиденциальность и безопасность → Всё равно открыть, если этот пункт доступен, и подтвердите конкретное приложение. Названия и доступность зависят от macOS и политики управления устройством. Это исключение для приложения, а не исправление распространяемого пакета. Следуйте актуальным инструкциям Apple.

Сообщение о вредоносном коде, отозванном разрешении или повреждённом/изменённом приложении требует отдельного разбора. Получите свежий пакет из доверенного источника и передайте разработчику точный текст сообщения. Новая подпись или снятие карантина не подтверждают корректность повреждённой загрузки. Для этого процесса не требуется отключать защиту всей системы.

Проверка проблемного пакета

Выполните команды на целевом Mac. В первой строке укажите настоящий абсолютный путь к .app. Имя исполняемого файла берётся из CFBundleExecutable: оно не обязано совпадать с отображаемым названием игры.

Командная строка
APP="/absolute/path/My Game.app"
EXECUTABLE=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleExecutable' "$APP/Contents/Info.plist")
file "$APP/Contents/MacOS/$EXECUTABLE"
codesign --display --verbose=4 "$APP"
codesign --verify --deep --strict --verbose=2 "$APP"
spctl --assess --type execute --verbose=4 "$APP"
xattr -l "$APP"

Команды читают метаданные, архитектуру, подписи и локальную политику запуска: не переподписывают приложение, не меняют правила Gatekeeper и не снимают карантин. Если чтение CFBundleExecutable завершилось ошибкой, сначала исправьте путь или состав пакета, затем проверяйте исполняемый файл.

  • file показывает доступные архитектуры. Mac arm64, Intel Mac и universal-сборка — разные цели; нативные библиотеки тоже должны поддерживать архитектуру запуска.
  • codesign --display показывает данные подписи. codesign --verify проверяет целостность подписанного кода: учитывайте диагностику и код завершения. Корректная ad-hoc-подпись не является Developer ID и не доказывает нотариализацию.
  • spctl --assess проверяет действующую политику этого компьютера. Результат зависит в том числе от управления устройством и локальных настроек. Он не заменяет проверку поставляемого архива на чистой машине.
  • xattr -l перечисляет атрибуты. Само наличие или отсутствие com.apple.quarantine не подтверждает целостность, безопасность или успешную нотариализацию.

Apple отдельно описывает проверку подписи и оценку системной политики. Сохраните полные результаты вместе с хешем проверенного архива, версией macOS и архитектурой CPU.

Игра запускается и сразу завершается

Убедившись, что это нужная сборка, запустите исполняемый файл из Terminal, чтобы увидеть диагностику старта:

Командная строка
"$APP/Contents/MacOS/$EXECUTABLE" --verbose

Используйте значения APP и EXECUTABLE из предыдущего примера. Команда запускает игру. Окружение и рабочий каталог Terminal могут отличаться от Finder; успешный запуск здесь не заменяет обычный запуск из Finder.

Проверяйте последнюю ошибку, не приписывая любое завершение Gatekeeper. При аварии сохраните соответствующий отчёт macOS и символы именно этой сборки; см. Нативная отладка на macOS.

Для упакованных ресурсов используйте asset://, для сохранений с правом записи — user://. Текущий каталог процесса не является каталогом проекта или стабильным местом рядом с .app. macOS может запускать приложение в карантине из перемещённого системного пути. Перенос пакета не заменяет исправление относительных путей; не записывайте создаваемые данные внутрь подписанного пакета приложения.

Что гарантирует экспортёр

По текущим исходникам экспорт на хосте macOS по умолчанию выбирает Xcode codesign, на других хостах — встроенную ad-hoc-подпись. Начальное значение identity для Xcode пустое: экспортёр трактует его как ad-hoc. Нотариализация по умолчанию отключена. Эти настройки не создают релиз с Developer ID.

Функция подписи сообщает об ошибках внешнего инструмента предупреждениями и не возвращает вызывающему коду статус подписи. Поэтому успешного экспорта недостаточно для подтверждения корректной подписи: проверьте журнал и итоговый пакет.

Ветка notarytool сообщает UUID запроса после отправки. Это не подтверждение принятой нотариализации. Проверьте итоговый статус и журнал по процессу Apple, затем подготовьте билет и конечный архив для распространения. Изменение содержимого после подписи может её нарушить. См. процесс нотариализации Apple.

При экспорте C# сохраняйте managed-файлы, нативные зависимости нужной архитектуры и необходимые entitlements. Когда экспортёр сам создаёт entitlements, сборка с CSharpScript включает разрешения для JIT; свой файл entitlements требует отдельной проверки. Параметр codesign/entitlements/debugging по умолчанию false: его включение добавляет com.apple.security.get-task-allow в создаваемый файл. Разделяйте локальную отладку и подпись релиза.

Диагностика по симптомам

СимптомСледующая проверка
Неизвестный разработчик / нет нотариализацииРеальная identity, итог нотариализации, точное сообщение и локальная политика; для своей доверенной тестовой сборки — процедура исключения выше.
Подпись не проходит проверкуСвежий исходный архив, изменённые или пропавшие файлы, подписи вложенных исполняемых файлов и библиотек.
Несовместимая архитектура / не загружается библиотекаАрхитектуры исполняемого файла и нативных зависимостей: другая загрузка не исправит неподходящую библиотеку внутри пакета.
В Finder не работает, в Terminal работаетОкружение, относительные пути и права; сохраните результаты обоих запусков.
Не найдены ресурсы или сохраненияСостав упакованных ресурсов и использование asset:// / user://, а не рабочего каталога shell.
Managed-игра завершается на стартеManaged-файлы, runtime и нативные зависимости, итоговые entitlements и журнал запуска.
Запрос нотариализации отправлен, релиз блокируетсяИтоговый статус и журнал Apple, конечный поставляемый файл; одного UUID недостаточно.

Для руководства по исходникам проверены настройки экспортёра, обработка подписи и отправки на нотариализацию, создаваемые entitlements и преобразование путей. Также изучена документация Apple. На хосте проверки Windows не выполнялись действия интерфейса macOS, подпись, нотариализация, изменение карантина, экспорт приложения или запуск на устройстве.

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

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

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

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