ios objective-c xcode ios9

Error:_handleNonLaunchSpecificActions en iOS9



objective-c xcode (1)

Recibo el siguiente error en iOS 9:

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

¿Alguien más ha encontrado este error o sus implicaciones? ¿Qué está mal?


No hay nada malo con tu código. Este es un mensaje de registro interno de Apple, y debe archivar un radar al respecto.

Hay dos pistas que muestran que este es probablemente el código de Apple:

  1. El guión bajo que lleva el nombre del método _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion es una convención que indica que el método es privado / interno para la clase en la que se declara. (Vea este comentario ).

  2. Es razonable adivinar que el prefijo de dos letras en FBSSceneSnapshotAction es la abreviatura de FrontBoard, que según Rene Ritchie en " iOS 9 wish-list: Guest Mode" es parte de toda la familia de software relacionado con el lanzamiento de aplicaciones:

Con iOS 8, Apple refactorizó su administrador de sistema, SpringBoard, en varios componentes más pequeños y más enfocados. Además de BackBoard, que ya estaba listo para manejar tareas en segundo plano, agregaron Frontboard para tareas en primer plano. También agregaron PreBoard para manejar la pantalla de bloqueo en condiciones seguras y encriptadas. [...]

No tengo idea de para qué BSSettings prefijo BS en BSSettings , pero un análisis de este mensaje de registro indicaría que no es algo que hiciste, y debes archivar un radar con pasos para reproducir el mensaje de registro.

Si desea probar y obtener un seguimiento de pila, puede implementar la categoría vinculada aquí . Algunos argumentarían que anular la API privada es una mala idea, pero en este caso una inyección temporal para obtener un seguimiento de la pila no puede ser demasiado perjudicial.

EDITAR:

Pero, todavía queremos saber qué es esta acción. Así que puse un punto de interrupción en -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion] y comencé a imprimir valores de registro y encontré una clase llamada FBSceneImpl que tenía FBSceneImpl información sobre mi aplicación:

Podemos averiguar qué método privado se llama a continuación (almacenado en el contador del programa, registro 15.)

Traté de encontrar la FBSceneSnapshotAction manejada a la que se FBSceneSnapshotAction referencia en el registro, pero sin dados. Luego, subclasifiqué UIApplication y _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion . Ahora pude llegar a la acción directamente, pero aún así, no sabemos qué es.

Luego, volví a mirar la FBSceneSnapshotAction. Resulta que tiene una superclase llamada BSAction .

Luego escribí una herramienta similar a RuntimeBrowser y busqué todas las subclases de BSAction. Resulta que hay una gran lista de ellos:

Los dos nombres de métodos que tenemos (uno del registro y otro del contador del programa en los dispositivos) indican que estas acciones se utilizan debajo del capó para pasar acciones por el sistema.

Algunas acciones probablemente se envían a las devoluciones de llamada del delegado de la aplicación, mientras que otras se manejan internamente.

Lo que sucede aquí es que hay una acción que no se manejó correctamente y el sistema lo está notando. No se suponía que lo viéramos, al parecer.