
com.vendor.app; по нему macOS хранит настройки и кэши. Без него вы не найдёте, что именно удалять.Пример: узнаём bundle id для Safari:
osascript -e 'id of app "Safari"'
Ожидаемый вывод:
com.apple.Safari
Создаём папку для бэкапа и сразу сохраняем текущие настройки:
mkdir -p ~/Desktop/opengl-fix-backup
defaults export <bundle-id> ~/Desktop/opengl-fix-backup/<bundle-id>.plist
cp -R ~/Library/Preferences/<bundle-id>.plist ~/Desktop/opengl-fix-backup/ 2>/dev/null
<bundle-id> замените на значение из предыдущей команды, например com.apple.Safari.
Чек-лист перед началом:
sw_vers -productVersion возвращает 15.8.2.plist лежит в ~/Desktop/opengl-fix-backupПочему это важно: после обновления ОС пользовательские настройки и кэши остаются от предыдущей версии системы и могут ссылаться на несуществующие пути или старые параметры графики. Резервная копия позволяет откатить изменения, если приложение перестанет запускаться совсем. Похожая логика разбора сбоев после крупного обновления ОС разобрана в гайде Windows 11 26H2: частые проблемы после обновления и как их исправить.
Что сделать: собрать три факта — версия системы, модель графического процессора и архитектура бинарника приложения.
Зачем: OpenGL-сбой почти всегда объясняется одним из трёх: система обновилась, приложение собрано под другую архитектуру, либо приложение не получило аппаратный графический контекст. Пока эти факты не собраны, любое «исправление» — угадывание.
Как проверить: выполнить блок команд и сверить вывод с таблицей.
sw_vers
system_profiler SPDisplaysDataType | head -40
file /Applications/<Приложение>.app/Contents/MacOS/<Приложение>
Пример: для приложения Example вывод будет такого вида:
Software:
System Software Overview:
System Version: macOS 15.8.2 (<номер-сборки>)
Kernel Version: Darwin <версия-ядра>
/Applications/Example.app/Contents/MacOS/Example: Mach-O 64-bit executable arm64
Строка arm64 — приложение собрано под процессоры Apple Silicon. Строка x86_64 — приложение запускается через Rosetta 2, транслятор x86-команд на Apple Silicon. Это важно: путь трансляции — частая точка отказа для старых OpenGL-приложений.
Диагностическая карта:
| Что проверяем | Команда | Что должно быть в выводе | |
|---|---|---|---|
| Версия ОС | `sw_vers -productVersion` | `15.8.2` | |
| GPU и драйвер | `system_profiler SPDisplaysDataType` | модель чипа и строка с версией Metal/OpenGL-поддержки | |
| Архитектура бинарника | `file .../Contents/MacOS/<Приложение>` | `arm64` или `x86_64` | |
| Недавние падения | `ls -lt ~/Library/Logs/DiagnosticReports \ | head -5` | файлы `*.crash`/`*.ips` с датой после обновления |
Если в system_profiler графический раздел пустой или содержит ошибку — сверьтесь с документацией Apple по system_profiler, набор полей зависит от модели Mac.

Что сделать: закрыть приложение, удалить его пользовательский кэш, сохранённое состояние окна и (при необходимости) файл настроек, затем перезагрузить Mac.
Зачем: кэш и сохранённое состояние содержат данные, созданные до обновления ОС. Если приложение хранит там параметры графического контекста, после обновления они могут быть несовместимы — приложение падает при старте или открывает чёрное окно. Удаление этих файлов возвращает приложение к состоянию «первого запуска».
Как проверить: после удаления команда чтения настроек должна сообщить, что домен отсутствует, а папка кэша — что её нет.
osascript -e 'quit app "<Приложение>"'
defaults read <bundle-id> > ~/Desktop/opengl-fix-backup/<bundle-id>-defaults.txt
rm -rf ~/Library/Caches/<bundle-id>
rm -rf ~/Library/Saved\ Application\ State/<bundle-id>.savedState
defaults delete <bundle-id>
Пример: для bundle id com.example.app:
rm -rf ~/Library/Caches/com.example.app
rm -rf ~/Library/Saved\ Application\ State/com.example.app.savedState
defaults delete com.example.app
Проверка:
defaults read com.example.app
ls ~/Library/Caches/com.example.app
Ожидаемый вывод:
Domain com.example.app does not exist
ls: /Users/<пользователь>/Library/Caches/com.example.app: No such file or directory
Дальше — перезагрузка. Она нужна, чтобы графический стек инициализировался заново и приложение не подхватило старое состояние сессии:
sudo shutdown -r now
Отдельно про кэш шейдеров: путь к системному кэшу шейдеров не документирован как пользовательский объект — сверьтесь с документацией Apple. Не удаляйте вручную файлы в /System и /Library: это не пользовательские каталоги, и правка их вручную может сломать систему.
Если приложение собрано под x86_64, попробуйте принудительный запуск через транслятор, а затем нативный:
arch -x86_64 /Applications/<Приложение>.app/Contents/MacOS/<Приложение>
arch -arm64 /Applications/<Приложение>.app/Contents/MacOS/<Приложение>
Флаг arch задаёт архитектуру процесса. Если приложение запускается только под одной из них — проблема в сборке приложения, а не в самой macOS.

Что сделать: запустить приложение из Терминала с перенаправлением потоков вывода в файлы и прочитать системный журнал по имени процесса.
Зачем: приложение, запущенное двойным кликом, не показывает текст ошибки. Перенаправление stdout/stderr в файлы даёт точную причину, а журнал macOS — контекст графической инициализации.
Как проверить: окно приложения открылось, в /tmp/gl-app.err нет строк с error/fail, в журнале есть записи процесса за последние минуты.
open -a "<Приложение>" --stdout /tmp/gl-app.out --stderr /tmp/gl-app.err
sleep 10
echo "--- stderr ---"
cat /tmp/gl-app.err
Затем журнал:
log show --last 5m --predicate 'process == "<Приложение>"' --info \
| grep -iE "opengl|gl_|context|shader|metal" | tail -30
Пример: успешный запуск выглядит так — окно открывается, файл /tmp/gl-app.err пустой или содержит только предупреждения, а grep по журналу выводит строки процесса с упоминанием графического контекста. Точный текст строк зависит от приложения, поэтому сверяйтесь с документацией его разработчика.
Проверка отклика: подвигайте окно и прокрутите содержимое. Если интерфейс реагирует без задержек, анимации плавные — аппаратный рендер работает. Если картинка дёргается, приложение, вероятно, ушло в программный рендер (отрисовка силами CPU вместо GPU).
Последняя проверка — отсутствие новых отчётов о падении:
ls -lt ~/Library/Logs/DiagnosticReports | head -5
Верхний файл должен быть старее текущего запуска (или список пуст).
Проблема. Приложение не стартует из Терминала, мгновенный выход.
zsh: bad CPU type in executablex86_64, а Rosetta 2 на машине не установлена или была удалена.softwareupdate --install-rosetta --agree-to-license
arch -x86_64 /usr/bin/true && echo "Rosetta OK"
Вывод Rosetta OK подтверждает, что трансляция работает.
Проблема. Приложение падает сразу после старта с ошибкой загрузки библиотеки.
dyld[<pid>]: Library not loaded: @rpath/<библиотека>.dylibotool -L /Applications/<Приложение>.app/Contents/MacOS/<Приложение> | grep -i -E "gl|opengl"
В выводе будут пути вида /System/Library/Frameworks/OpenGL.framework/.... Если нужной библиотеки в выводе нет, а в ошибке она указана — проблема в самом приложении; сверьтесь с документацией Apple по составу фреймворков в macOS 15.8.2.
Проблема. Окно открывается, но содержимое чёрное или FPS низкий.
Failed to create OpenGL context (строка в /tmp/gl-app.err; точный текст зависит от приложения)arch -arm64 /Applications/<Приложение>.app/Contents/MacOS/<Приложение>
Если в логе остаётся ошибка контекста — проверьте наличие обновления приложения у вендора; совместимость конкретного профиля OpenGL с macOS 15.8.2 сверьте с документацией разработчика.
Вы собрали факты о системе и приложении, сбросили пользовательские кэши и настройки и подтвердили результат по логам, а не «на глаз». Если сбой сохраняется после сброса — фиксируйте точную строку из /tmp/gl-app.err и otool -L и передавайте её разработчику: это уже дефект сборки приложения, а не настройки Mac.
Почему OpenGL-приложения ломаются после обновления macOS?
Обновление меняет системные компоненты графики и может оставить пользовательские кэши и настройки от предыдущей версии. Приложение при старте читает их, получает несовместимые параметры контекста и падает или открывает чёрное окно.
Apple удалила OpenGL из macOS 15.8.2?
Проверьте состав фреймворков на своей машине командой ls /System/Library/Frameworks/OpenGL.framework и сверьтесь с документацией Apple для 15.8.2. Без этого утверждать что-либо о наличии или удалении компонента нельзя.
Помогает ли переустановка приложения?
Помогает, если ошибка в логе — Library not loaded или приложение линкует отсутствующую библиотеку. Переустановка не затрагивает пользовательские кэши, поэтому её стоит сочетать со Шагом 2.
Как проверить, что приложение использует GPU, а не программный рендер?
Запустите его с логированием (Шаг 3) и поищите в журнале строки с GL_RENDERER или названием графического чипа из system_profiler SPDisplaysDataType. Если в логе указан программный рендерер — контекст не аппаратный. Если macOS-версии приложения нет вовсе, альтернативой может стать запуск Android-сборки через эмулятор — разбор способов в гайде Как запускать Android-приложения и игры на ПК: эмуляторы, Waydroid и облачные сервисы.