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后遇到了相同问题,以下方法可解决该异常:
禁用异步调试选项
- 打开项目的
Edit Scheme(快捷键Cmd+<) - 切换到
Run菜单下的Info标签页 - 取消勾选
Debug Process Asynchronously - 重新编译运行程序
- 打开项目的
更新SDL2版本
旧版SDL2与Xcode16的调试机制存在兼容性问题,建议升级到SDL2 2.30.x及以上的稳定版本,适配新的Xcode环境。确认Scheme的可执行目标
- 进入
Edit Scheme的Run->Info页面 - 检查
Executable选项是否选中当前项目的主程序,避免启动额外进程
- 进入
问题根源
Xcode16对调试进程的异步启动机制进行了调整,SDL2的窗口初始化逻辑与该新机制冲突,导致程序被重复启动,进而出现多窗口、多终端及相关错误日志。禁用异步调试可规避这一冲突,确保进程仅启动一次。
内容的提问来源于stack exchange,提问作者young
相关产品推荐
相关产品推荐

