Je reçois 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?
Il n'y a rien de mal avec votre code. Il s’agit d’un message de journalisation interne à Apple et vous devez enregistrer un radar à ce sujet.
Il y a deux astuces qui indiquent qu'il s'agit de probablement code d'Apple:
Le trait de soulignement précédant le nom de la méthode _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
est une convention indiquant que la méthode est privée/interne à la classe dans laquelle elle est déclarée. (Voir ce commentaire .)
Il est raisonnable de deviner que le préfixe de deux lettres dans FBSSceneSnapshotAction
est un raccourci pour FrontBoard, qui selon Rene Ritchie dans " iOS 9 Wish-list: Mode Invité" fait partie de la famille entière. de logiciels liés au lancement d'applications:
Avec iOS 8, Apple a restructuré son gestionnaire système, SpringBoard, en plusieurs composants plus petits et plus ciblés. Outre BackBoard, qui était déjà conçu pour gérer les tâches en 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 ne sais pas du tout à quoi sert le préfixe BS
dans BSSettings
, mais une analyse de ce message de journalisation indiquerait que ce n'est pas du tout ce que vous avez fait, et vous devriez enregistrer un radar avec des étapes pour reproduire le message de connexion.
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 dommageable.
EDIT:
Mais nous voulons toujours savoir en quoi consiste cette action. Donc, je mets un point d'arrêt sur -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]
et a commencé à imprimer les valeurs de registre et a trouvé une classe appelée FBSceneImpl
qui contenait de nombreuses informations sur mon application:
Nous sommes en mesure de savoir quelle méthode privée est appelée ensuite (stockée dans le compteur de programme, registre 15).
J'ai essayé de trouver le FBSceneSnapshotAction
non traité référencé dans le journal, mais pas de dés. Ensuite, j'ai sous-classé UIApplication et remplacé _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
. Maintenant, je pouvais me rendre 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 super-classe appelée BSAction
.
Ensuite, j'ai écrit n outil similaire à RuntimeBrowser et j'ai recherché toutes les sous-classes de BSAction. Il se trouve qu'il y en a toute une liste:
Les deux noms de méthode que nous avons (un du journal et un du compteur de programme sur les périphériques) indiquent que ces actions sont utilisées sous le capot pour transmettre des actions au système.
Certaines actions sont probablement envoyées aux rappels du délégué de l'application, tandis que d'autres sont traité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 que le système en prend note. Nous n'étions pas censés le voir, apparemment.