[iOS 13]: Excepción grave: NSInvalidArgumentException no se puede agregar a sí mismo como subvista ([NSCache init])

9

He visto problemas / preguntas similares sobre Stack Overflow, pero no ayudaron.

Construí la aplicación con Xcode 11 y iOS 13 SDK. El problema es que tengo todos estos bloqueos solo en iOS 13+, aunque mi aplicación es compatible con iOS 10+ y hay ~ 50% de usuarios de iOS 12 entre todos. Además, no puedo depurarlo ni reproducirlo.

De esta información deduje que el problema debe ser específico para iOS 13. ¿Alguien ha encontrado el mismo problema recientemente? Posibles causas, soluciones?

Aquí está el seguimiento de la pila de Crashlytics:

Fatal Exception: NSInvalidArgumentException
0  CoreFoundation                 0x1c25e1c30 __exceptionPreprocess
1  libobjc.A.dylib                0x1c22fc0c8 objc_exception_throw
2  CoreFoundation                 0x1c24d13ac -[NSCache init]
3  UIKitCore                      0x1c6b189a8 -[UIView(Internal) _addSubview:positioned:relativeTo:]
4  UIKitCore                      0x1c6078bb4 __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke_2
5  UIKitCore                      0x1c6b11f60 +[UIView(Animation) performWithoutAnimation:]
6  UIKitCore                      0x1c6078630 __53-[_UINavigationParallaxTransition animateTransition:]_block_invoke
7  UIKitCore                      0x1c6b1784c +[UIView(Internal) _performBlockDelayingTriggeringResponderEvents:forScene:]
8  UIKitCore                      0x1c6078088 -[_UINavigationParallaxTransition animateTransition:]
9  UIKitCore                      0x1c606e2b0 ___UIViewControllerTransitioningRunCustomTransition_block_invoke_2
10 UIKitCore                      0x1c61822f8 +[UIInputResponderController _pinInputViewsForInputResponderController:onBehalfOfResponder:duringBlock:]
11 UIKitCore                      0x1c606e238 ___UIViewControllerTransitioningRunCustomTransition_block_invoke.648
12 UIKitCore                      0x1c6b11c0c +[UIView(Animation) _setAlongsideAnimations:toRunByEndOfBlock:]
13 UIKitCore                      0x1c606e088 _UIViewControllerTransitioningRunCustomTransition
14 UIKitCore                      0x1c5f9d77c -[UINavigationController _startCustomTransition:]
15 UIKitCore                      0x1c5fb0c18 -[UINavigationController _startDeferredTransitionIfNeeded:]
16 UIKitCore                      0x1c5fb20f8 -[UINavigationController __viewWillLayoutSubviews]
17 UIKitCore                      0x1c5f954e0 -[UILayoutContainerView layoutSubviews]
18 UIKitCore                      0x1c6b1fabc -[UIView(CALayerDelegate) layoutSublayersOfLayer:]
19 libobjc.A.dylib                0x1c22f7af0 -[NSObject performSelector:withObject:]
20 QuartzCore                     0x1c90be0f4 -[CALayer layoutSublayers]
21 QuartzCore                     0x1c90be3fc CA::Layer::layout_if_needed(CA::Transaction*)
22 QuartzCore                     0x1c90d1964 CA::Layer::layout_and_display_if_needed(CA::Transaction*)
23 QuartzCore                     0x1c9016c1c CA::Context::commit_transaction(CA::Transaction*, double)
24 QuartzCore                     0x1c9041bd8 CA::Transaction::commit()
25 QuartzCore                     0x1c90427ac CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*)
26 CoreFoundation                 0x1c255c67c __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
27 CoreFoundation                 0x1c255731c __CFRunLoopDoObservers
28 CoreFoundation                 0x1c25578cc __CFRunLoopRun
29 CoreFoundation                 0x1c2557098 CFRunLoopRunSpecific
30 GraphicsServices               0x1cc6c1534 GSEventRunModal
31 UIKitCore                      0x1c66777ac UIApplicationMain

Actualización 1 : El problema es relevante para todos los iPhones que ejecutan iOS 13, no solo para la línea iPhone X (S, R).

Actualización 2 : El problema también es relevante para iOS 12, pero los bloqueos ocurren raramente en comparación con iOS 13. Supongo que el problema está relacionado con la construcción del proyecto con iOS 13 SDK, porque el mismo código creado con iOS 12 SDK no no emite tales bloqueos y la lógica de navegación no se actualizó.

Aleksandr Honcharov
fuente
Tendríamos que ver un código. Supongo que una vista está intentando agregarse como una subvista.
Samuel Noyes
Aquí hay algo a tener en cuenta: stackoverflow.com/a/21226801/2142112
Samuel Noyes
2
Tenemos el mismo error, pero en nuestro caso no se limita a iOS 13. Parece que probablemente se trata de presentar / empujar / descartar / hacer estallar los controladores de vista con animación, pero solo puedo ver una prueba de regresión (tratando de empujar / pop casi simultáneamente) como un método de depuración viable.
EDUsta
1
@EDUsta Hola. En nuestro caso, también tuvimos varios bloqueos en iOS 12 (90% + aún iOS 13). Definitivamente es específico para iOS 13 SDK. Con iOS 12 SDK, el mismo código no emitió ningún error de este tipo y no hemos cambiado la lógica de navegación en la aplicación.
Aleksandr Honcharov
1
@chroman Parece que la aplicación creada con Xcode 11.3 y iOS SDK 13.3 ya no tiene este bloqueo. Supongo que se resolvió en el lado del SDK de Apple.
Aleksandr Honcharov

Respuestas:

2

La aplicación creada con Xcode 11.3 y iOS SDK 13.3 ya no tiene este bloqueo. Supongo que se resolvió en el lado del SDK de iOS.

Aleksandr Honcharov
fuente
Nuestra aplicación continúa viendo informes de este bloqueo cuando se construye con Xcode
11.3.1
@esilver Tal vez en algunos casos sucede. Tal vez su escenario fue ligeramente diferente. Pero en nuestro caso, los accidentes simplemente desaparecieron por completo.
Aleksandr Honcharov