Error: _handleNonLaunchSpecificActions en iOS9

157

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?

Roddy
fuente
66
Todavía está en las versiones beta posteriores a iOS9. Sería bueno entender cuál es el problema y las implicaciones del mismo.
Roddy
11
Tengo el mismo problema cuando bloqueo mi iPhone cuando mi aplicación se está ejecutando. iOS 9.0, XCode 7.0.
NKorotkov
55
Parece un error de Apple ya que un nuevo proyecto creado con Xcode 7 también tiene este problema exacto.
Hongfei
12
¿Se ha discutido algo de mérito en los foros de desarrolladores de Apple? Parece que cualquier tipo de error se cierra con "¿por qué querrías hacer eso si Apple no quiere que lo hagas?" Es la última parada de la desesperación cuando se busca resolver problemas.
Roddy
11
Consulte la pregunta stackoverflow.com/questions/32658037/… : se trata el mismo problema.
iPhone Guy

Respuestas:

10

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 del nombre del método _handleNonLaunchSpecificActions:forScene:withTransitionContext:completiones 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 suponer que el prefijo de dos letras FBSSceneSnapshotActiones una abreviatura de FrontBoard, que según Rene Ritchie en " Lista de deseos de iOS 9: Modo de invitado" 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 se separó 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é sirve el BSprefijo 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 la 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 dañino.

EDITAR:

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

Escena

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

Contador de programa

Traté de encontrar el no manejado FBSceneSnapshotActionreferenciado en el registro, pero no dados. Luego, subclasifiqué la aplicación UIA y la anulé _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:

Lista de Acción

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.

Moshe
fuente
Lo siento, pero esto no es realmente una respuesta; más de un siguiente comentario. El código es en gran medida un error interno de Apple, esto no está en duda. Las conjeturas no son realmente una resolución y la explicación de iOS8 proporcionada no es relevante ya que el error solo apareció en iOS9 (esto no sucede en iOS8).
Roddy
2
La respuesta a "lo que está mal" es que algo dentro de SpringBoard no ha manejado una acción instantánea. Eso es lo que dice el mensaje de registro. Hay poco más que alguien fuera de Apple pueda decirte.
Moshe
Sin embargo, el hecho de que este mensaje de registro no haya aparecido en iOS 8 no es realmente relevante. Es un mensaje de registro perdido que debe archivarse con el radar.
Moshe
Me di cuenta esta mañana de que alguien ha actualizado mi pregunta y eso no fue lo que pregunté originalmente, por lo que hay un poco de desconexión. Ni siquiera sabía que alguien más podía actualizar una pregunta.
Roddy
Para responder a su pregunta original: no hay otras implicaciones que no sean archivar un radar.
Moshe