Errore: _handleNonLaunchSpecificActions in iOS9


157

Ricevo il seguente errore su iOS 9:

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

Qualcun altro ha riscontrato questo errore o le sue implicazioni? Che c'è?


6
È ancora nelle versioni post beta di iOS9. Sarebbe bello capire qual è il problema e le sue implicazioni.
Roddy,

11
Ho lo stesso problema quando blocco il mio iPhone quando la mia app è in esecuzione. iOS 9.0, XCode 7.0.
NKorotkov,

5
Sembra un bug di Apple poiché un nuovo progetto creato con Xcode 7 ha anche questo esatto problema.
Hongfei,

12
C'è qualcosa di merito mai discusso nei forum degli sviluppatori di Apple? Sembra che qualsiasi tipo di bug venga chiuso con "perché dovresti farlo se Apple non lo vuole?" È l'ultima fermata della disperazione quando si cerca di risolvere i problemi.
Roddy,

11
Fare riferimento alla domanda stackoverflow.com/questions/32658037/… : si tratta dello stesso problema.
iPhone Guy

Risposte:


10

Non c'è niente di sbagliato nel tuo codice. Questo è un messaggio di registrazione interno ad Apple e dovresti presentare un radar al riguardo.

Ci sono due suggerimenti che mostrano che questo è probabilmente il codice di Apple:

  1. Il carattere di sottolineatura che porta il nome del metodo _handleNonLaunchSpecificActions:forScene:withTransitionContext:completionè una convenzione che indica che il metodo è privato / interno alla classe in cui è dichiarato. (Vedi questo commento ).

  2. È ragionevole supporre che il prefisso di due lettere FBSSceneSnapshotActionsia una scorciatoia per FrontBoard, che secondo Rene Ritchie in " Wish-list iOS 9: Modalità ospite" fa parte di tutta la famiglia di software relativi all'avvio di app:

Con iOS 8, Apple ha modificato il proprio gestore di sistema, SpringBoard, in diversi componenti più piccoli e più mirati. Oltre a BackBoard, che era già stato rimosso per gestire le attività in background, hanno aggiunto Frontboard per le attività in primo piano. Hanno anche aggiunto PreBoard per gestire la schermata di blocco in condizioni sicure e crittografate. [...]

Non ho idea a cosa BSserva il prefisso BSSettings, ma un'analisi di questo messaggio di registro indicherebbe che non è qualcosa che hai fatto e che dovresti presentare un radar con i passaggi per riprodurre il messaggio di registrazione.

Se vuoi provare a prendere una traccia dello stack, puoi implementare la categoria collegata qui . Alcuni sosterrebbero che ignorare l'API privata sia una cattiva idea, ma in questo caso un'iniezione temporanea per catturare una traccia dello stack non può essere troppo dannosa.

MODIFICARE:

Ma vogliamo ancora sapere cos'è questa azione. Quindi ho inserito un punto di interruzione -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]e ho iniziato a stampare i valori di registro e ho trovato una classe chiamata FBSceneImplche aveva un sacco di informazioni sulla mia applicazione:

Scena

Siamo in grado di scoprire quale metodo privato verrà chiamato successivamente (memorizzato nel contatore del programma, registro 15.)

Contatore di programma

Ho provato a trovare il FBSceneSnapshotActionriferimento non gestito nel registro, ma nessun dado. Quindi, ho eseguito la sottoclasse di UIApplication e ho superato _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion. Ora sono stato in grado di entrare direttamente in azione, ma ancora non sappiamo cosa sia.

Quindi, ho esaminato di nuovo FBSceneSnapshotAction. Si scopre che ha una superclasse chiamata BSAction.

Quindi ho scritto uno strumento simile a RuntimeBrowser e ho cercato tutte le sottoclassi di BSAction. Si scopre che c'è un bel elenco di loro:

Lista di azioni

I due nomi dei metodi che abbiamo (uno dal registro e uno dal contatore dei programmi sui dispositivi) indicano che queste azioni vengono utilizzate sotto il cofano per passare azioni nel sistema.

Alcune azioni vengono probabilmente inviate ai callback del delegato dell'app, mentre altre vengono gestite internamente.

Quello che sta succedendo qui è che c'è un'azione che non è stata gestita correttamente e che il sistema sta notando. Apparentemente non dovevamo vederlo.


Scusa ma questa non è davvero una risposta; più di un commento seguente. Il codice è molto l'errore interno di Apple, questo non è in discussione. Le ipotesi non sono in realtà una risoluzione e la spiegazione di iOS8 fornita non è rilevante poiché l'errore è apparso solo in iOS9 (ciò non accade in iOS8).
Roddy,

2
La risposta a "cosa c'è che non va" è che qualcosa all'interno di SpringBoard non ha gestito un'azione di istantanea. Questo è ciò che dice il messaggio di registrazione. C'è poco altro che qualcuno al di fuori di Apple può dirti.
Moshe,

Il fatto che questo messaggio di registrazione non sia apparso su iOS 8 non è tuttavia rilevante. È un messaggio di registrazione vagante che dovrebbe essere archiviato con il radar.
Moshe,

Stamattina ho notato che qualcuno ha aggiornato la mia domanda e non era quello che avevo chiesto inizialmente, motivo per cui c'è un po 'di disconnessione. Non sapevo nemmeno che fosse possibile che una domanda fosse aggiornata da chiunque altro.
Roddy,

Per rispondere alla tua domanda originale: non ci sono implicazioni oltre a presentare un radar.
Moshe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.