[iOS] TUIGradientView 与系统私有框架 TextInputUI.framework 类名冲突,导致英文键盘卡死闪退
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- ios, objective-c
- Área
- mobile-dev
Línea de trabajo
Comienza con iOS/Source/UI/Common/TUIGradientView.h y busca en el pod de Objective-C referencias a TUIGradientView y TUIGradientViewDirection. Verifica el pod TUICalling afectado, ya sea vendored o publicado, y compara sus nombres de clase con TextInputUI.framework tal como se describe. Se considera terminado cuando la clase en conflicto se haya renombrado de forma coherente sin cambiar el comportamiento público ni el enum.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
问题概述
ObjC 版 TUICalling pod 里的 TUIGradientView,与 Apple 私有框架 TextInputUI.framework(系统键盘的 UI 框架,TUI = Text Input UI)中的一个类同名。
ObjC 运行时同名类只会保留一个,App 静态链接的 TUICalling 版本覆盖了系统那个。系统键盘随后向它认为是自己的类发消息,直接崩溃:
-[TUIGradientView setLightConfiguration:]: unrecognized selector sent to instance
现象
任何链接了 TUICalling 的 App 都会中招,不需要用到音视频通话功能,只要 pod 被链接进去就会触发:
- 使用英文键盘时,输入即卡死,键盘无法收起,随后闪退。
- 中文拼音键盘不受影响,它不走这条渲染路径。
已在 iPhone 13 Pro 和 iPhone 17 Pro 真机复现;两台设备在重命名该类后都恢复正常。
证据
Apple 的框架确实声明了同名类,也确实使用该选择子(在 iOS 26.3 / 26.4 / 26.5 三个模拟器 runtime 上验证):
$ nm -a .../PrivateFrameworks/TextInputUI.framework/TextInputUI | grep TUIGradientView
0000000000153870 S _OBJC_CLASS_$_TUIGradientView
0000000000153848 S _OBJC_METACLASS_$_TUIGradientView
$ strings -a .../PrivateFrameworks/TextInputUI.framework/TextInputUI | grep -x setLightConfiguration:
setLightConfiguration:
TUICalling 一侧 —— iOS/Source/UI/Common/TUIGradientView.h:
@interface TUIGradientView : UIView
影响版本
已发布的 TUICalling pod 中一直存在,包括最新的 9.6.4(tencentyun/TUICalling,tag v9.6.4)。
需要说明的是:本仓库 main 分支已经重构为 TUICallKit_Swift,其中并无此类,所以直接看主干会以为问题不存在。受影响的是 CocoaPods 目前仍在分发的旧版 Objective-C pod,而不是当前的 Swift 代码库。
修复建议
把类名改成带命名空间前缀的形式,例如 TUICallingGradientView。
在我们 vendored 的 9.5.1 源码中,该类在 pod 内部没有任何其他引用,因此改名是自包含的、不会波及调用方。TUIGradientViewDirection 是普通枚举,不参与运行时注册,可以保持不变。
我们目前是在自己的 Podfile 里用 post_install 打补丁绕过。
建议顺带自查整个 TUI* 命名面
TextInputUI.framework 注册了约 322 个类。由于两边都在用 TUI 前缀,建议不要只改这一个类,而是把整个命名面交叉比对一遍。我们就是这样确认了 TUIGradientView 是我们这侧唯一的冲突:
nm -a "<simruntime>/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/TextInputUI.framework/TextInputUI" \
| grep -F '_OBJC_CLASS_$_' \
| sed 's/.*_OBJC_CLASS_\$_//' \
| sort -u
- Lenguaje dominante
- Swift
- Estrellas
- 251
- Forks
- 170
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Tencent-RTC/TUICallKit
-
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
Tencent-RTC/TUICallKit#495 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
Tencent-RTC/TUICallKit#489 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Tencent-RTC/TUICallKit#469 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 28/100
Tencent-RTC/TUICallKit#449 · 1 comentario ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
Tencent-RTC/TUICallKit#440 ·
Todos los issues de Tencent-RTC/TUICallKit
Issues similares
-
UI: "Block Music launches" toggle is dangerously easy to confuse with "Turn off Apple Music"Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
omlahore/RemoveMacAI#67 ·
Los mantenedores suelen responder en 1 día
-
[quality] macOSScreenshotLocation(): configured-location branch (ScreenshotFiles.swift:30) never executes under swift testPosiblemente ocupada @arteeh la tomó hoy. Abiertoagent/quality agent/reviewer help wanted kind/test stage/040-covered-by-pr testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
hivecommons/hotshot#249 · 4 comentarios ·
Los mantenedores suelen responder en 1 día
-
documentation good first issue windows
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Broken links in the docsAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
deltachat/deltachat-ios#3388 ·
Los mantenedores suelen responder en 1 día
-
desktop-app
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
raullenchai/Rapid-MLX#4975 ·
Los mantenedores suelen responder en 1 día