Вопрос или проблема
Я написал простую программу, которая использует библиотеки OpenGL и SDL2 с редактором Xcode16:
#define GL_SILENCE_DEPRECATION
#include <iostream>
#include <SDL.h>
#include <OpenGL/gl3.h>
int main(int argc, const char * argv[]) {
// вставьте код здесь...
SDL_Init(SDL_INIT_VIDEO);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_Window* window = NULL;
const int InitialWidth = 640;
const int InitialHeight = 480;
window = SDL_CreateWindow("Shader", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, InitialWidth, InitialHeight, SDL_WINDOW_OPENGL);
SDL_GLContext glContext = SDL_GL_CreateContext(window);
int quit = 0;
while (!quit) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
quit = 1;
}
}
glClearColor(0.0f, 0.2f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
SDL_GL_SwapWindow(window);
}
SDL_GL_DeleteContext(glContext);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
Когда я собираю и запускаю программу, нажав на кнопку воспроизведения (в форме треугольника), открываются два окна с дополнительным консольным терминалом:
Кроме того, консоль Xcode отображает следующую ошибку:
CLIENT ERROR: TUINSRemoteViewController не переопределяет -viewServiceDidTerminateWithError: и, следовательно, не может реагировать на катастрофические ошибки, кроме как их логировать
Это не то, чего я ожидал, потому что мой код создает только одно окно.
Эта проблема возникла после обновления версии редактора Xcode с 15 до 16. Она не происходила, когда я использовал Xcode15. Есть ли у кого-то аналогичная проблема со мной?
На самом деле моя оригинальная программа была более сложной, чем программа выше. Я переписал программу с нуля, чтобы найти точку, где возникает проблема. Я обнаружил, что создание SDL_Window и обработка событий заставляли Xcode16 запускать программу дважды.
Ответ или решение
Проблема, которую вы описываете, связана с изменениями в поведении Xcode 16 по сравнению с предыдущими версиями, такими как Xcode 15. Когда вы нажимаете кнопку "Запуск", Xcode создает два окна: одно для вашего приложения и еще одно для отладки. Это может быть связано с тем, как Xcode обрабатывает мультимедийные приложения, использующие библиотеки, такие как SDL2.
Вот несколько шагов, которые могут помочь вам решить эту проблему:
-
Проверьте настройки схемы сборки: Откройте меню "Product" -> "Scheme" -> "Edit Scheme" и убедитесь, что параметр "Executable" настроен правильно. Иногда Xcode может использовать неправильный исполняемый файл.
-
Создание капсульных приложений: V Xcode 16 был введен новый способ упаковки приложений, который может вызывать подобные проблемы. Убедитесь, что ваше приложение запускается без встроенных дополнительных сервисов и с использованием правильной схемы.
-
Использование консольного приложения: Если вы разрабатываете только графическое приложение, попробуйте изменить тип вашего проекта с "App" на "Command Line Tool" в настройках проекта. Это может помочь избежать создания дополнительных окон.
-
Обновление библиотек SDL2 и OpenGL: Убедитесь, что у вас установлены последние версии SDL2 и OpenGL. Иногда обновления библиотек содержат исправления для совместимости с новыми версиями Xcode.
-
Использование предопределенных флагов: Возможно, возникла необходимость добавить предопределенные флаги компиляции для того, чтобы код выполнялся так, как вы ожидаете. Например, используйте
-DDEBUG
или сравните с решениями других пользователей на форумах разработчиков. -
Проверка на наличие дополнительных вызовов: Ограничьте количество окон, создаваемых вашим кодом, и убедитесь, что ваш код действительно выполняется только один раз. Возможно, какие-то дополнительные вызовы функций внутри вашего кода могут инициировать создание еще одного окна.
-
Ошибка "CLIENT ERROR": Это сообщение указывает на проблемы с удаленным видом пользователя, которые могут быть связаны с вашим проектом, но не обязательно затрагивают функциональность. Попробуйте игнорировать это предупреждение, если ваше приложение работает корректно, и значение имеет только поведение интерфейса.
Если ни один из вышеуказанных шагов не помог устранить проблему, рассмотрите возможность отката к Xcode 15 до тех пор, пока не появится обновление Xcode 16, которое может решить эту проблему. Это даст вам возможность продолжить разработку без сбоев и проблем с интерфейсом.
Если проблема сохраняется, вы можете также обратиться на форумы разработчиков Apple и SDL2, где другие пользователи могли столкнуться с этой же проблемой и могут предложить способы решения.