2013-02-12 21 views
8

Ho una nuova app, che è stata respinta da App Store con questo messaggio:iOS - Come posso decodificare il rapporto di arresto anomalo simbolizzato da iTunes Connect?

We found that your app crashed on an iPhone 5 and iPad 3rd Gen running iOS 6.1, which is not in compliance with the App Store Review Guidelines. 

Your app crashed when we: 

1) Launched the app 

This occurred when your app was used: 

- On Wi-Fi 
- On cellular network 

Ma il mio obiettivo costruire le impostazioni per l'applicazione sono stati dispositivi: iPhone bersaglio Distribuzione: 6.0

E il mio impostazioni plist sono: obiettivo dispositivo famiglia: iPhone iOS destinazione della distribuzione: 6,0

Ecco i resoconti di blocco che ho ottenuto da Apple:

Incident Identifier: 9CA0955F-F59D-486C-8D73-8B3B61403EE4 
CrashReporter Key: aca1b4fd3ac58a223f67f43ce5c768e6e94616f0 
Hardware Model:  xxx 
Process:   Fundraising [13707] 
Path:   /var/mobile/Applications/E4F866A6-D1B2-48F0-B471-913FAC78B0E3/Fundraising.app/Fundraising 
Identifier:  Fundraising 
Version:   ??? (???) 
Code Type:  ARM (Native) 
Parent Process: launchd [1] 

Date/Time:  2013-02-02 10:13:13.282 -0800 
OS Version:  iOS 6.1 (10B141) 
Report Version: 104 

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x0000000000000000, 0x0000000000000000 
Crashed Thread: 0 

Last Exception Backtrace: 
(0x3445029e 0x3c2e997a 0x365e537c 0x3642758e 0x362b079c 0x36258c34 0x362586c8 0x36258116 0x37f4a59e 0x37f4a1ce 0x3442516e 0x34425112 0x34423f94 0x34396eb8 0x34396d44 0x362af480 0x362ac2fc 0x7a3aa 0x3c720b1c) 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x3c7e7350 __pthread_kill + 8 
1 libsystem_c.dylib    0x3c75e11e pthread_kill + 54 
2 libsystem_c.dylib    0x3c79a96e abort + 90 
3 libc++abi.dylib     0x3bd38d4a abort_message + 70 
4 libc++abi.dylib     0x3bd35ff4 default_terminate() + 20 
5 libobjc.A.dylib     0x3c2e9a74 _objc_terminate() + 144 
6 libc++abi.dylib     0x3bd36078 safe_handler_caller(void (*)()) + 76 
7 libc++abi.dylib     0x3bd36110 std::terminate() + 16 
8 libc++abi.dylib     0x3bd37594 __cxa_rethrow + 84 
9 libobjc.A.dylib     0x3c2e99cc objc_exception_rethrow + 8 
10 CoreFoundation     0x34396f1c CFRunLoopRunSpecific + 452 
11 CoreFoundation     0x34396d44 CFRunLoopRunInMode + 100 
12 UIKit       0x362af480 -[UIApplication _run] + 664 
13 UIKit       0x362ac2fc UIApplicationMain + 1116 
14 Fundraising      0x0007a3aa 0x79000 + 5034 
15 libdyld.dylib     0x3c720b1c start + 0 

Thread 1: 
0 libsystem_kernel.dylib   0x3c7e7d98 __workq_kernreturn + 8 
1 libsystem_c.dylib    0x3c735cf6 _pthread_workq_return + 14 
2 libsystem_c.dylib    0x3c735a12 _pthread_wqthread + 362 
3 libsystem_c.dylib    0x3c7358a0 start_wqthread + 4 

Thread 2 name: Dispatch queue: com.apple.libdispatch-manager 
Thread 2: 
0 libsystem_kernel.dylib   0x3c7d7648 kevent64 + 24 
1 libdispatch.dylib    0x3c707974 _dispatch_mgr_invoke + 792 
2 libdispatch.dylib    0x3c707654 _dispatch_mgr_thread$VARIANT$mp + 32 

Thread 3: 
0 libsystem_kernel.dylib   0x3c7e7d98 __workq_kernreturn + 8 
1 libsystem_c.dylib    0x3c735cf6 _pthread_workq_return + 14 
2 libsystem_c.dylib    0x3c735a12 _pthread_wqthread + 362 
3 libsystem_c.dylib    0x3c7358a0 start_wqthread + 4 

Thread 4: 
0 libsystem_kernel.dylib   0x3c7e7d98 __workq_kernreturn + 8 
1 libsystem_c.dylib    0x3c735cf6 _pthread_workq_return + 14 
2 libsystem_c.dylib    0x3c735a12 _pthread_wqthread + 362 
3 libsystem_c.dylib    0x3c7358a0 start_wqthread + 4 

Thread 5 name: WebThread 
Thread 5: 
0 libsystem_kernel.dylib   0x3c7d6eb4 mach_msg_trap + 20 
1 libsystem_kernel.dylib   0x3c7d7048 mach_msg + 36 
2 CoreFoundation     0x34425040 __CFRunLoopServiceMachPort + 124 
3 CoreFoundation     0x34423d9e __CFRunLoopRun + 878 
4 CoreFoundation     0x34396eb8 CFRunLoopRunSpecific + 352 
5 CoreFoundation     0x34396d44 CFRunLoopRunInMode + 100 
6 WebCore       0x3a37c500 RunWebThread(void*) + 440 
7 libsystem_c.dylib    0x3c74030e _pthread_start + 306 
8 libsystem_c.dylib    0x3c7401d4 thread_start + 4 

Thread 0 crashed with ARM Thread State (32-bit): 
    r0: 0x00000000 r1: 0x00000000  r2: 0x00000000  r3: 0x3e2db534 
    r4: 0x00000006 r5: 0x3e2dbb88  r6: 0x208694e4  r7: 0x2fd879f4 
    r8: 0x208694c0 r9: 0x00000300  r10: 0x366ce04b  r11: 0x1fd56aa0 
    ip: 0x00000148 sp: 0x2fd879e8  lr: 0x3c75e123  pc: 0x3c7e7350 
    cpsr: 0x00000010 

sto imparando circa symbolication da queste due pagine: 1) http://www.raywenderlich.com/23704/demystifying-ios-application-crash-logs 2) Symbolicating iPhone App Crash Reports

Sono confuso con un paio di cose: Io ho il vecchio archivio che è stato fatto quando ho caricato l'applicazione su iTunes. Ma loro vogliono che io abbia un file .app. Quale file è? È l'archivio? E quale file è il file myApp.app.dSYM? E devo semplicemente copiare l'intero rapporto di arresto anomalo in un file di testo e salvarlo localmente?

Grazie!

Inoltre, questo è parte del codice che viene eseguito quando l'applicazione si avvia:

- (void)viewDidLoad:(BOOL)animated 
{ 
    UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"building"]]; 
    [self.view addSubview:imgView]; 
} 


- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"building"]]; 
    imgView.frame = self.view.bounds; // to set the frame to your view's size 
    [self.view addSubview:imgView]; 
    [self.view sendSubviewToBack:imgView]; 

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
    { 
     //load iphone image 
     UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"building"]]; 

     imgView.frame = self.view.frame; 

     [self.view addSubview:imgView]; 
     [self.view sendSubviewToBack:imgView]; 
    } 
    else 
    { 
     //load ipad image 
     UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"[email protected]"]]; 
     imgView.frame = self.view.bounds; // to set the frame to your view's size 
     //[self.view addSubview:imgView]; 

     imgView.frame = self.view.frame; 
     [self.view sendSubviewToBack:imgView]; 
    } 


    // Get user data. 
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 

    // First arg is name and second is if not found. 
    NSString *user_id = [standardUserDefaults objectForKey:@"user_id"]; 
    NSString *user_email = [standardUserDefaults objectForKey:@"email"]; 
    BOOL first_time_cookie = [standardUserDefaults boolForKey:@"first_time_cookie"]; 

    [super viewDidAppear:animated]; 

    if(!first_time_cookie) 
    { 
     // First time on the app, so set the user cookie. 
     [standardUserDefaults setBool:YES forKey:@"first_time_cookie"]; 

     EmailUtil *email_new_user = [[EmailUtil alloc] initWithSubject:@"New_Download" body:@"New_iPhone_download"]; 
     [email_new_user send]; 

     // Send to server to make new acount AND send me an email re - new user. 
     [self sendFeedback]; 

     [standardUserDefaults synchronize]; 
    } 
    else 
    {   
     EmailUtil *email = [[EmailUtil alloc] initWithSubject:@"RepeatUser" body:[NSString stringWithFormat: @"User_id: %@, and email: %@" , user_id , user_email]]; 
     [email send]; 
    } 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 



-(void) sendFeedback 
{ 
    NSString *string_url = @"http://www.my_url.php"; 

    NSURL *url = [NSURL URLWithString:string_url]; 
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url ]; 

    NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 

    [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
    { 
     if (error != nil) 
     { 
      // Send me an email that there was an error 
      EmailUtil *email = [[EmailUtil alloc] initWithSubject:@"iCreate_User_Error" body:@"There_was_some_error_creating_user_INVESTIGATE"]; 
      [email send]; 
     } 
     else 
      if (data != nil) 
      { 
       NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

       NSCharacterSet* notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; 

       if ([responseString rangeOfCharacterFromSet:notDigits].location == NSNotFound) 
       { 
        // newString consists only of the digits 0 through 9 
        NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 

        [standardUserDefaults setObject:responseString forKey:@"user_id"]; 
        [standardUserDefaults synchronize]; 
       } 
      } 
    }];  
} 
+0

È necessario symbolicate il crash log in modo da poter vedere dove si blocca. – rmaddy

+0

@rmaddy cosa intendi con symbolicate? :) – Genadinik

+0

Vedere [Comprensione e analisi dei report di crash applicazioni iOS] (https://developer.apple.com/library/ios/#technotes/tn2151/_index.html). – rmaddy

risposta

5

applicazioni per iPhone può essere eseguito su iPad. Corrono in una "finestra" sullo schermo, la stessa dimensione e forma di uno schermo di iPhone.

Detto questo, l'applicazione si è anche arrestata in modo anomalo su un iPhone 5. Quindi non è specifico per l'esecuzione su un iPad. Avrai bisogno di guardare i registri degli arresti anomali per i dettagli.

+0

In realtà non avevo i log degli arresti anomali in quella versione dell'app. Ma non si blocca sul mio emulatore ... non so come eseguire il debug di questo :( – Genadinik

+0

Dovresti aver ricevuto i registri degli arresti con la lettera di rifiuto – duskwuff

+4

@Genadinik È necessario testare i dispositivi reali, non il simulatore – rmaddy

1

Ti stai sbagliando Obiettivi L'iPhone non è una cosa che non può funzionare su iPad. Ma non solo per l'interfaccia utente appropriata per iPad, Schermo intero. Nella mia esperienza, Apple ha testato l'ultimo sistema operativo, Device. Quindi, iPad 3 nel test. I iPhone inviato per Apple. ma anche l'iPad è stato testato.

+0

quindi dovrei avere uno storyboard per iPad pronto anche per questo? O sono errato in qualche modo? – Genadinik

+0

non è necessario. sottomissione, sto sempre testando e iPad –

+0

Ho appena postato qualche errore nella traccia dello stack nella mia domanda originale.Qui c'è qualcosa che potrebbe indicare che cosa è andato storto? Grazie! – Genadinik

1

Un obiettivo non è lo stesso di quello che stai permettendo di eseguire ... L'obiettivo dice semplicemente a xCode su cosa stai per testarlo, non dice a xCode che vuoi che sia solo per eseguire su quel dispositivo ... per questo è necessario esaminare (google) impostazione requirements e Device Capabilities nel tuo plist file! In bocca al lupo! :)

1

Tutti gli altri hanno già menzionato l'ovvio che la tua build verrà eseguita anche su iPad, anche se in una finestra più piccola. quindi passiamo al prossimo passaggio di analisi del registro degli arresti anomali.

Exception Type: EXC_CRASH (SIGABRT) 

significa che un messaggio è stato inviato a un oggetto che non ha risposto ad esso. (Sconosciuto selettore di incidente)

Thread 0: 
14 Fundraising      0x0007a3aa 0x79000 + 5034 

io parto dal presupposto Fundraising è il nome dell'applicazione. Vedete, questa linea qui vi darà il nome del metodo (simboleggiato all'interno di 0x0007a3aa) che è stato eseguito l'ultima volta. a condizione che tu abbia il file .dSYM della build che hai caricato nell'app store.

.dSYM file è quello che viene generato quando si archivia l'app. .sym file generation location

Quindi dico che si ottiene quel file, verificare il metodo in cui è andato storto e :).

Per saperne di più andare a questa pagina: http://www.raywenderlich.com/23704/demystifying-ios-application-crash-logs

+0

grazie che è molto utile.L'unica domanda che ho è come posso inserire effettivamente il codice simbolizzato nell'archivio per decodificarlo? – Genadinik

12

Prima di tutto è necessario per archiviare e salvare il file .dSYM per la compilazione si desidera symbolicate problema per.

  1. copia eseguibile symbolicatecrash da questa posizione per qualche cartella sul desktop per un facile accesso:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/ DTDeviceKit.framework/Versions/A/Resources

  1. copia il crash e il file .dSYM nella stessa cartella.

  2. Passare da terminale a quella cartella ed eseguire il comando indicato di seguito:

./symbolicatecrash .crash .app.dSYM

** ** Symbolicating IPA

se usa IPA per la simbolizzazione - basta rinominare l'estensione .ipa con .zip, estrarlo quindi possiamo ottenere una cartella Payload che contiene app. In questo caso non abbiamo bisogno del file .dSYM. (solo nel caso in cui i simboli di debug in cui non spogliati durante la copia)

Rif: Symbolicating iPhone App Crash Reports

Avete l'IPA che è stata presentata ad Apple o l'archivio che potete vedere sotto Organizer-> Archivio. Se si fa clic con il tasto destro del mouse e si seleziona il contenuto del pacchetto, verrà visualizzata una cartella denominata dSYM in cui è possibile trovare il file dSYM per l'app inviata.

enter image description here enter image description here enter image description here

+1

Questa risposta è parzialmente errata: Sy mbolicazione solo con l'app binario, funziona solo se l'app binario ha simboli non spogliati (di default vengono rimossi, non facendo ciò può aumentare le dimensioni binarie del 30-50%) e simbolizzando manualmente ogni linea nello stack trace e calcolando l'indirizzo corretto per ciascuno. Il processo di simbolizzazione da Apple utilizza sempre il dSYM per la simbolizzazione. – Kerni

+0

@kerni Grazie per averlo indicato e fatto solo nel caso in cui sia selezionato lo schema di rilascio, in quel caso si avrà sicuramente bisogno del dSYM e verrà generato indipendentemente dallo schema, a meno che non venga scelto. La domanda riguardava la simbolizzazione del crash di Apple per il quale è possibile trovare facilmente il file dSYM dall'archivio utilizzato per inviare la build ad Apple. – SAPLogix