[iOS 13]: Exceção fatal: NSInvalidArgumentException Não é possível adicionar a si mesmo como subvisão ([NSCache init])

9

Vi problemas / perguntas semelhantes no Stack Overflow, mas eles não ajudaram.

Criei o aplicativo com o Xcode 11 e o iOS 13 SDK. O problema é que eu recebo todas essas falhas apenas no iOS 13+, mesmo que meu aplicativo ofereça suporte ao iOS 10+ e haja ~ 50% de usuários do iOS 12 entre todos. Além disso, não consigo depurar ou reproduzi-lo.

A partir dessas informações, deduzi que o problema deve ser específico ao iOS 13. Alguém já se deparou com o mesmo problema recentemente? Possíveis causas, soluções?

Aqui está o rastreamento de pilha do 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

Atualização 1 : o problema é relevante para todos os iPhones com iOS 13, não apenas para a linha iPhone X (S, R).

Atualização 2 : o problema também é relevante para o iOS 12, mas as falhas ocorrem raramente em comparação com o iOS 13. Meu palpite é que o problema está relacionado à criação do projeto com o iOS 13 SDK, porque o mesmo código criado com o iOS 12 SDK não emite essas falhas e a lógica de navegação não foi atualizada.

Aleksandr Honcharov
fonte
Teríamos que ver algum código. Eu acho que uma visão está tentando se adicionar como uma subvisão.
Samuel Noyes 10/10
Aqui está algo para analisar: stackoverflow.com/a/21226801/2142112
Samuel Noyes 10/10
2
Temos o mesmo erro, mas, no nosso caso, não se limita ao iOS 13. Parece que provavelmente se trata de apresentar / empurrar / dispensar / abrir controladores de exibição com animação, mas só consigo ver um teste de regressão (tentando empurrar / pop quase simultaneamente) como um método viável de depuração.
EDUsta
11
@EDUsta Hi. No nosso caso, também tivemos várias falhas no iOS 12 (90% + ainda no iOS 13). É definitivamente específico para o iOS 13 SDK. Com o iOS 12 SDK, o mesmo código não emitiu erros desse tipo e não alteramos a lógica de navegação no aplicativo.
Aleksandr Honcharov
11
@chroman Parece que o aplicativo criado com o Xcode 11.3 e o iOS SDK 13.3 não tem mais esse problema. Eu acho que foi resolvido no lado do Apple SDK.
Aleksandr Honcharov

Respostas:

2

O aplicativo criado com o Xcode 11.3 e o iOS SDK 13.3 não tem mais essa falha. Eu acho que foi resolvido no lado do SDK do iOS.

Aleksandr Honcharov
fonte
Nosso aplicativo continua a ver relatórios desse travamento quando construído com o Xcode 11.3.1
esilver 31/01
@esilver Talvez em alguns casos isso aconteça. Talvez o seu cenário tenha sido um pouco diferente. Mas, no nosso caso, os acidentes desapareceram completamente.
Aleksandr Honcharov 31/01