- [UIThreadSafeNode canPerformAction: withSender:]: sélecteur non reconnu envoyé à l'instance

9

Je suis confronté à ce plantage dans mon application iOS.

Fatal Exception: NSInvalidArgumentException
0  CoreFoundation                 0x1b9079c30 __exceptionPreprocess
1  libobjc.A.dylib                0x1b8d940c8 objc_exception_throw
2  CoreFoundation                 0x1b8f77fc0 -[NSOrderedSet initWithSet:copyItems:]
3  CoreFoundation                 0x1b907e3d4 ___forwarding___
4  CoreFoundation                 0x1b9080570 _CF_forwarding_prep_0
5  UIKitCore                      0x1bcf33444 -[UIKeyboardImpl deleteForwardAndNotify:]
6  UIKitCore                      0x1bcf39154 __57-[UIKeyboardImpl acceptPredictiveInput:executionContext:]_block_invoke
7  UIKitCore                      0x1bcf5b0c8 -[UIKeyboardTaskExecutionContext returnExecutionToParentWithInfo:]
8  UIKitCore                      0x1bcf366ec __100-[UIKeyboardImpl addWordTerminator:afterSpace:afterAcceptingCandidate:elapsedTime:executionContext:]_block_invoke
9  UIKitCore                      0x1bcf5b0c8 -[UIKeyboardTaskExecutionContext returnExecutionToParentWithInfo:]
10 UIKitCore                      0x1bcf2bdc0 __55-[UIKeyboardImpl handleKeyboardInput:executionContext:]_block_invoke_2
11 UIKitCore                      0x1bcf5cd70 -[UIKeyboardTaskEntry execute:]
12 UIKitCore                      0x1bcf5b6d4 -[UIKeyboardTaskQueue continueExecutionOnMainThread]
13 libobjc.A.dylib                0x1b8d8faf0 -[NSObject performSelector:withObject:]
14 Foundation                     0x1b946ec10 __NSThreadPerformPerform
15 CoreFoundation                 0x1b8ff5260 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
16 CoreFoundation                 0x1b8ff51b4 __CFRunLoopDoSource0
17 CoreFoundation                 0x1b8ff4920 __CFRunLoopDoSources0
18 CoreFoundation                 0x1b8fef7ec __CFRunLoopRun
19 CoreFoundation                 0x1b8fef098 CFRunLoopRunSpecific
20 GraphicsServices               0x1c3159534 GSEventRunModal
21 UIKitCore                      0x1bd10f7ac UIApplicationMain
22 Haraj                          0x102fc6058 main + 15 (main.m:15)
23 libdyld.dylib                  0x1b8e6ef30 <redacted>

Jusqu'à présent, plus de 100 accidents ont été signalés. Cela se produit uniquement dans iOS 12 et iOS 13.

Je ne suis pas en mesure de trouver comment cela se produit et comment le reproduire.

La trace de la pile n'affiche aucun code de mon application.

J'ai téléchargé le rapport de plantage complet ici .

Toute aide serait très appréciée.

Abdullah Umer
la source

Réponses:

10

Cela semble être une régression d'un ancien bug lié à la "suppression avant" sur l'entrée de texte iOS: http://www.openradar.me/15114422

Je pense qu'il a régressé à cause du nouveau clavier "glisser pour taper".

Vous avez 2 options à corriger:

  1. Mettez à niveau votre UIWebView obsolète vers un WKWebView
  2. Solution Hacky: insérez le sélecteur manquant UIThreadSafeNodelors de l'exécution.

Voici un exemple de code expliquant comment insérer le sélecteur manquant:

BOOL canPerformAction(id withSender) {
    return false;
} 

- (void)viewDidLoad {
   [super viewDidLoad];

   Class class = NSClassFromString(@"UIThreadSafeNode");
   class_addMethod(class, @selector(canPerformAction:withSender:), (IMP)canPerformAction, "@@:");
}

Vous devriez probablement placer l'insertion de méthode quelque part qui ne se charge qu'une seule fois, comme dans AppDelegate.

Voici l'exemple de projet complet si vous en avez besoin: https://github.com/elliotfiske/UIWebView-TextEntry-CrashFix/tree/master

Comment reproduire:

Créez un formulaire de saisie de texte dans une UIWebView, tapez quelques mots, puis déplacez le curseur jusqu'à la FIN exacte d'un mot au milieu de la phrase.

Ensuite, choisissez l'une des suggestions de texte prédictif. Voir le bug en action ici:Enregistrement d'écran de la reproduction du crash

Elliot Fiske
la source
2
J'utilise WKWebView. J'aime votre solution de piratage. J'espère que ca fonctionne! :)
Abdullah Umer
Je ne suis pas en mesure de reprocher l'accident sur UIWebView sur iOS13.2.2 développeur beta
harshith7823