Xcode 16 создает ненужное окно SDL2 при нажатии на кнопку воспроизведения

Вопрос или проблема

Я написал простую программу, которая использует библиотеки 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.

Вот несколько шагов, которые могут помочь вам решить эту проблему:

  1. Проверьте настройки схемы сборки: Откройте меню "Product" -> "Scheme" -> "Edit Scheme" и убедитесь, что параметр "Executable" настроен правильно. Иногда Xcode может использовать неправильный исполняемый файл.

  2. Создание капсульных приложений: V Xcode 16 был введен новый способ упаковки приложений, который может вызывать подобные проблемы. Убедитесь, что ваше приложение запускается без встроенных дополнительных сервисов и с использованием правильной схемы.

  3. Использование консольного приложения: Если вы разрабатываете только графическое приложение, попробуйте изменить тип вашего проекта с "App" на "Command Line Tool" в настройках проекта. Это может помочь избежать создания дополнительных окон.

  4. Обновление библиотек SDL2 и OpenGL: Убедитесь, что у вас установлены последние версии SDL2 и OpenGL. Иногда обновления библиотек содержат исправления для совместимости с новыми версиями Xcode.

  5. Использование предопределенных флагов: Возможно, возникла необходимость добавить предопределенные флаги компиляции для того, чтобы код выполнялся так, как вы ожидаете. Например, используйте -DDEBUG или сравните с решениями других пользователей на форумах разработчиков.

  6. Проверка на наличие дополнительных вызовов: Ограничьте количество окон, создаваемых вашим кодом, и убедитесь, что ваш код действительно выполняется только один раз. Возможно, какие-то дополнительные вызовы функций внутри вашего кода могут инициировать создание еще одного окна.

  7. Ошибка "CLIENT ERROR": Это сообщение указывает на проблемы с удаленным видом пользователя, которые могут быть связаны с вашим проектом, но не обязательно затрагивают функциональность. Попробуйте игнорировать это предупреждение, если ваше приложение работает корректно, и значение имеет только поведение интерфейса.

Если ни один из вышеуказанных шагов не помог устранить проблему, рассмотрите возможность отката к Xcode 15 до тех пор, пока не появится обновление Xcode 16, которое может решить эту проблему. Это даст вам возможность продолжить разработку без сбоев и проблем с интерфейсом.

Если проблема сохраняется, вы можете также обратиться на форумы разработчиков Apple и SDL2, где другие пользователи могли столкнуться с этой же проблемой и могут предложить способы решения.

Оцените материал
Добавить комментарий

Капча загружается...