You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode16点击运行按钮时生成多余SDL2窗口问题求助

Xcode16下SDL2+OpenGL程序出现重复窗口、终端及TUINSRemoteViewController错误的修复方案

问题现象

使用Xcode16开发基于SDL2和OpenGL的程序时,运行后出现以下异常:

  • 弹出两个窗口(代码仅创建一个)
  • 额外打开控制台终端
  • Xcode控制台输出错误日志:

CLIENT ERROR: TUINSRemoteViewController does not override -viewServiceDidTerminateWithError: and thus cannot react to catastrophic errors beyond logging them

该问题仅在Xcode16中出现,Xcode15环境下程序运行正常,排查确认是创建SDL_Window并处理事件时程序被重复执行导致。

涉事程序代码

#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;
}

已验证的修复方法

不少用户升级Xcode16后遇到了相同问题,以下方法可解决该异常:

  • 禁用异步调试选项

    1. 打开项目的Edit Scheme(快捷键Cmd+<)
    2. 切换到Run菜单下的Info标签页
    3. 取消勾选Debug Process Asynchronously
    4. 重新编译运行程序
  • 更新SDL2版本
    旧版SDL2与Xcode16的调试机制存在兼容性问题,建议升级到SDL2 2.30.x及以上的稳定版本,适配新的Xcode环境。

  • 确认Scheme的可执行目标

    1. 进入Edit Scheme的Run -> Info页面
    2. 检查Executable选项是否选中当前项目的主程序,避免启动额外进程

问题根源

Xcode16对调试进程的异步启动机制进行了调整,SDL2的窗口初始化逻辑与该新机制冲突,导致程序被重复启动,进而出现多窗口、多终端及相关错误日志。禁用异步调试可规避这一冲突,确保进程仅启动一次。

内容的提问来源于stack exchange,提问作者young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:36:10