2015-03-07 3 views
5

Ho visto rapporti per errori 4 ma non per 5. Ho ricevuto questo messaggio di console quando sto provando a utilizzare una richiesta "openParentApplication: reply". Non ci sono abbastanza informazioni nel log per sapere se il problema è nel codice iOS, nel codice WK o nel simulatore. Ho riavviato il sim e pulito il progetto. Qualche idea?Errore iOS: errore FBSOpenApplicationErrorDomain 5. Che cosa significa?

Codice WK:

- (IBAction)sendRequest { 

    NSDictionary *request = @{@"request":@"Request1"}; 

    [InterfaceController openParentApplication:request reply:^(NSDictionary *replyInfo, NSError *error) { 

     if (error) { 
      NSLog(@"%@", error); 
     } else { 

      [self.label1 setText:[replyInfo objectForKey:@"response1"]]; 
      [self.label2 setText:[replyInfo objectForKey:@"response2"]]; 
      [self.label3 setText:[replyInfo objectForKey:@"response3"]]; 
     } 

    }]; 
} 

iOS Codice:

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply{ 

    NSLog(@"%s", __FUNCTION__); 
    //([max intValue] - [min intValue]) + [min intValue] 

    int randNum1 = arc4random_uniform(16); 
    int randNum2 = arc4random_uniform(16); 
    int randNum3 = arc4random_uniform(16); 


    NSString *num1 = [NSString stringWithFormat:@"Test%d", randNum1]; 
    NSString *num2 = [NSString stringWithFormat:@"Test%d", randNum2]; 
    NSString *num3 = [NSString stringWithFormat:@"Test%d", randNum3]; 

    if ([[userInfo objectForKey:@"request"] isEqualToString:@"Request1"]) { 

     NSLog(@"containing app received message from watch: Request1"); 


     NSDictionary *response = @{@"response1" : num1, @"response2" : num2, @"response3" : num3}; 
     reply(response); 
    } 

} 

L'unico log della console è:

WatchKit Extension[48954:9523373] Error Domain=FBSOpenApplicationErrorDomain Code=5 "The operation couldn’t be completed. (FBSOpenApplicationErrorDomain error 5.) 
+2

OK. Come promesso, la risposta è la seguente: Nel file info.plist, "L'applicazione non viene eseguita in background" è impostata su SÌ. Questo ha causato il problema. Cambiando l'impostazione su NO, l'hai riparata. Grazie a Faber nei forum AppleDev. –

risposta

1

vorrei suggerire si tenta di semplificare. Ho risposto a un problema molto simile here presente in Swift. Vorrei semplificare la logica al seguente:

Codice WK

- (IBAction)sendRequest { 
    [InterfaceController openParentApplication:request reply:^(NSDictionary *replyInfo, NSError *error) { 
     NSLog(@"Reply Info: %@", replyInfo); 
     NSLog(@"Error: %@", error); 
    }]; 
} 

codice iOS

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply { 
    NSDictionary *response = @{@"replyKey" : @"replyValue"}; 
    reply(response); 
} 

Una volta fatto questo lavoro, quindi iniziare ad aggiungere l'analisi aggiuntiva di un passo alla un tempo. È inoltre possibile collegare il debugger all'app iOS per eseguire la chiamata seguendo le istruzioni these. Potresti non chiamare il reply block sull'app iOS e non lo sai nemmeno.

+0

Grazie per aver risposto. Mi sono trasferito in quella direzione. Credo di arrivare al blocco di risposta perché ho registrato l'errore.Si verifica lì. Ma esaminerò le tue idee con più attenzione. –

+0

È interessante, la risposta di NSLog (@ "Informazioni di risposta:% @", replyInfo); è nullo .. Mi chiedo se mi sia sfuggito qualcosa .. Ho la connessione che funziona in un piccolo progetto di test, e non vedo alcuna differenza-- tranne- che l'altra app ha installato WK fin dall'inizio, non imbullonato. Pensi che questo abbia qualcosa a che fare con questo problema? –

+0

Ho paura di non capire bene cosa intendi. Direi che se si lavora su un progetto più piccolo e non su quello più grande, allora si ha un problema di configurazione del progetto con quello più grande. In tal caso, suggerirei di aprire una domanda diversa per chiuderla come risolta. – cnoon

5

Ho anche affrontato lo stesso problema oggi.

  • app eliminata dal simulatore
  • reset simulatore
  • Restarted XCode
  • modifiche apportate in info.plist

ma quando mi sono imbattuto in applicazione Production, ha funzionato. L'app funzionava bene in modalità di produzione con il simulatore.

enter image description here

Successivamente, ho cancellato dev schema modalità esistenti e ha creato un altro schema modalità dev e ha funzionato. Poi mi ha ricordato che mentre implementavo la funzionalità di recupero in background nell'app, ho controllato l'opzione Launch due to a background fetch event in quello schema Dev. Più tardi ho rinunciato allo Background Fetch ma ho dimenticato di deselezionare questa opzione.

enter image description here

+0

Penso che sia necessario impostare un'autorizzazione per poterlo utilizzare. In ogni caso, Xcode dovrebbe riportare PERCHÉ non può avviare l'app, oppure segnalare "errore 5". Mi sono imbattuto in questo oggi con Xcode 7.3 perché avevo controllato questa opzione di schema. –

1

Nel mio caso solo smettere simulatore ha risolto il problema.