Erreur: _handleNonLaunchSpecificActions dans iOS9

157

J'obtiens l'erreur suivante sur iOS 9:

    -[UIApplication_handleNonLaunchSpecificActions:
      forScene:
      withTransitionContext:
      completion:] unhandled action -> 
      <FBSSceneSnapshotAction: 0x150b2aef0> 
       {
            handler          = remote;
            info = <BSSettings: 0x15333f650> 
            {
                (1) = 5;
            };
        }

Quelqu'un d'autre a-t-il rencontré cette erreur ou ses implications? Qu'est-ce qui ne va pas?

Roddy
la source
6
Est toujours dans les versions bêta d'iOS9. Il serait bon de comprendre quel est le problème et ses implications.
Roddy
11
J'ai le même problème lorsque je verrouille mon iPhone lorsque mon application est en cours d'exécution. iOS 9.0, XCode 7.0.
NKorotkov
5
Cela semble être un bogue Apple car un tout nouveau projet créé avec Xcode 7 a également ce problème exact.
Hongfei
12
Y a-t-il des discussions sur les forums des développeurs Apple? Il semble que tout type de bogue se ferme avec "pourquoi voudriez-vous faire ça si Apple ne le veut pas?" Est le dernier arrêt du désespoir lorsqu'on cherche à résoudre des problèmes.
Roddy
11
Reportez-vous à la question stackoverflow.com/questions/32658037/… - cela traite du même problème.
iPhone Guy

Réponses:

10

Il n'y a rien de mal avec votre code. Il s'agit d'un message de journalisation interne à Apple, et vous devez déposer un radar à ce sujet.

Il y a deux indices qui montrent qu'il s'agit probablement du code d'Apple:

  1. Le trait de soulignement précédant le nom de la méthode _handleNonLaunchSpecificActions:forScene:withTransitionContext:completionest une convention indiquant que la méthode est privée / interne à la classe dans laquelle elle est déclarée. (Voir ce commentaire .)

  2. Il est raisonnable de supposer que le préfixe à deux lettres FBSSceneSnapshotActionest un raccourci pour FrontBoard, qui, selon René Ritchie dans " iOS 9 wish-list: Guest Mode" fait partie de toute la famille de logiciels liés au lancement d'applications:

Avec iOS 8, Apple a remanié son gestionnaire de système, SpringBoard, en plusieurs composants plus petits et plus ciblés. En plus de BackBoard, qui était déjà conçu pour gérer les tâches d'arrière-plan, ils ont ajouté Frontboard pour les tâches de premier plan. Ils ont également ajouté PreBoard pour gérer l'écran de verrouillage dans des conditions sécurisées et cryptées. [...]

Je n'ai aucune idée de ce à quoi sert le BSpréfixe BSSettings, mais une analyse de ce message de journal indiquerait que ce n'est rien de ce que vous avez fait, et vous devez déposer un radar avec des étapes pour reproduire le message de journalisation.

Si vous voulez essayer de récupérer une trace de pile, vous pouvez implémenter la catégorie liée ici . Certains diront que remplacer l'API privée est une mauvaise idée, mais dans ce cas, une injection temporaire pour récupérer une trace de pile ne peut pas être trop nuisible.

ÉDITER:

Mais, nous voulons toujours savoir ce qu'est cette action. J'ai donc mis un point d'arrêt -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]et commencé à imprimer les valeurs de registre et j'ai trouvé une classe appelée FBSceneImplqui contenait tout un tas d'informations sur mon application:

Scène

Nous sommes en mesure de savoir quelle méthode privée est appelée ensuite (stockée dans le compteur de programmes, registre 15.)

Compteur de programme

J'ai essayé de trouver le non géré FBSceneSnapshotActionréférencé dans le journal, mais pas de dés. Ensuite, j'ai sous-classé UIApplication et j'ai remplacé _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion. Maintenant, j'ai pu accéder directement à l'action, mais nous ne savons toujours pas ce que c'est.

Ensuite, j'ai regardé à nouveau le FBSceneSnapshotAction. Il s'avère qu'il a une superclasse appelée BSAction.

Ensuite, j'ai écrit un outil similaire à RuntimeBrowser et j'ai recherché toutes les sous-classes de BSAction. Il s'avère qu'il y en a toute une liste:

Liste d'action

Les deux noms de méthode que nous avons (un du journal et un du compteur de programme sur les appareils) indiquent que ces actions sont utilisées sous le capot pour transmettre des actions dans le système.

Certaines actions sont probablement envoyées aux rappels du délégué d'application, tandis que d'autres sont gérées en interne.

Ce qui se passe ici, c'est qu'il y a une action qui n'a pas été gérée correctement et le système la note. Nous n'étions pas censés le voir, apparemment.

Moshe
la source
Désolé mais ce n'est pas vraiment une réponse; plus d'un commentaire suivant. Le code est en grande partie l'erreur interne d'Apple, ce n'est pas en question. Les suppositions ne sont pas vraiment une résolution et l'explication fournie pour iOS8 n'est pas pertinente car l'erreur n'est apparue que dans iOS9 (cela ne se produit pas dans iOS8).
Roddy
2
La réponse à «ce qui ne va pas» est que quelque chose à l'intérieur de SpringBoard n'a pas géré une action d'instantané. C'est ce que dit le message de journalisation. Personne d'autre en dehors d'Apple ne peut vous le dire.
Moshe
Le fait que ce message de journalisation ne soit pas apparu sur iOS 8 n'est cependant pas vraiment pertinent. C'est un message de journalisation errant qui devrait être classé avec le radar.
Moshe
J'ai remarqué ce matin que quelqu'un a mis à jour ma question et que ce n'était pas ce que j'avais demandé au départ, c'est pourquoi il y a un peu de déconnexion. Je ne savais même pas qu'il était possible qu'une question soit mise à jour par quelqu'un d'autre.
Roddy
Pour répondre à votre question initiale: il n'y a pas d'autres implications que de déposer un radar.
Moshe