Ho aperto una segnalazione di bug con Apple: https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/19/wo/WBbbbyopNFW8FFUuNSbk0w/10.66
Per favore fatemi sapere se non potete accedervi.
Riepilogo: il debugger XCode non rilascia la porta del server bootstrap
Passaggi da riprodurre:
durante il debug di un'app per iPhone iOS5 nel simulatore in Xcode 4.2 Build 4D5163b su Lion 10.7.2, a volte un arresto anomalo può comportare l'impossibilità di avviare il bugger. Invece, Xcode produce questo errore:
Impossibile registrare com.MyApp.MyApp con il server bootstrap. Errore: codice di errore sconosciuto. Questo generalmente significa che un'altra istanza di questo processo era già in esecuzione o è appesa al debugger. Il programma ha ricevuto il segnale: "SIGABRT".
Risultati previsti:
dovrebbe essere possibile avviare il debugger dopo un arresto anomalo.
Risultati effettivi:
impossibile avviare il debugger. L'unico modo che ho scoperto per far funzionare di nuovo il simulatore è riavviare Mac OS.
Regressione:
Note:
molte persone stanno riscontrando questo problema:
iPhone - strano errore durante il test sul simulatore
Impossibile registrarsi con il server
bootstrap Errore del
server bootstrap in Xcode IPHONE https://discussions.apple.com/message/10416765?messageID=10416765
Uscire da XCode e dal simulatore (e assicurarsi che ps -Al | egrep "Xcode | Simulator" non restituisca nulla) non risolve il problema.
L'esecuzione di "launchtl bslist | grep MyApp" rivela che com.MyApp è ancora registrato con il server bootstrap:
$ launchctl bslist | grep MyApp
A com.MyApp.MyApp.UIKit.migserver
A com.MyApp.MyApp
Ho scritto del codice per trovare la porta e invalidarla, ma anche questo fallisce:
NSMachBootstrapServer *bsserver = [NSMachBootstrapServer sharedInstance];
NSMachPort *port = (NSMachPort *)[bsserver portForName:@"com.MyApp.MyApp"];
[port removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:<#(NSString *)#>
NSLog(@"port = %@",port);
NSLog(@"port.isValid=%d",[port isValid]);
[port invalidate];
NSLog(@"port.isValid=%d",[port isValid]);