[iOS] RCTLogBoxView crashes on dealloc when app uses SceneDelegate because it still assumes AppDelegate.window exists
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- C++
- Estrellas
- 127k
- Forks
- 25.3k
- Merge medio
- 1 d 23 h
- PR fusionados (30 d)
- 4
Descripción
Description
When using a SceneDelegate-based iOS app lifecycle, React Native crashes in RCTLogBoxView during deallocation because it still accesses RCTSharedApplication().delegate.window.
The following code in RCTLogBoxView is problematic:
- (void)dealloc
{
#if !TARGET_OS_MACCATALYST // sharedApplication.delegate is not available on Mac Catalyst
[RCTSharedApplication().delegate.window makeKeyWindow];
#endif
}
In a SceneDelegate setup, the app’s main window is typically owned by the active UIWindowScene, not exposed as AppDelegate.window. As a result, this code can crash with an unrecognized selector / invalid access depending on how the app delegate is implemented.
This looks like the same broader class of SceneDelegate compatibility issues as other places in React Native that still assume application.delegate.window exists.
Steps to reproduce
- Create a React Native app on iOS
- Adopt SceneDelegate / UIScene lifecycle
- Ensure the app delegate does not expose a window property
- Trigger LogBox presentation and dismissal / teardown in development
- Observe crash when RCTLogBoxView is deallocated
React Native Version
0.83.0
Output of npx @react-native-community/cli info
npx @react-native-community/cli info
Screenshots and Videos
RCTLogBoxView
- (void)dealloc
{
#if !TARGET_OS_MACCATALYST
[RCTSharedApplication().delegate.window makeKeyWindow];
#endif
}
Guía de contribución
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.
Línea de trabajo
Comienza localizando RCTLogBoxView y leyendo su implementación de dealloc, especialmente el acceso a RCTSharedApplication().delegate.window. Reproduce el flujo de teardown con una app basada en SceneDelegate y, a continuación, verifica que el cierre y la desasignación de LogBox ya no provoquen un crash mientras el comportamiento existente se mantiene intacto.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- ios, objective-c, react-native
- Área
- mobile-dev
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 58/100