¿Por qué la connection a un background iOS NSURLSession tarda demasiado time en un locking y bloquea la aplicación?

¿Por qué la connection con un NSURLSession a través de su configuration tomaría tanto time que bloquearía la aplicación al iniciarse: 'no se pudo iniciar a time'?

He visto vuelcos similares en muchas aplicaciones de iOS, incluyendo la aplicación NY Times iOS y la aplicación Evernote.

[NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:queue] 

Aquí está el seguimiento de stack:

 Thread 0: 0 libsystem_kernel.dylib 0x3afb7aa0 semaphore_wait_trap + 8 1 libdispatch.dylib 0x3af04d3d _dispatch_semaphore_wait_slow + 173 2 CFNetwork 0x2febd8e3 -[__NSCFBackgroundSessionBridge setupBackgroundSession] + 379 3 CFNetwork 0x2fef18a1 +[__NSCFSessionBridge bridgeForConfiguration:session:queue:] + 153 4 CFNetwork 0x2fef6497 -[__NSCFURLSession initWithConfiguration:delegate:delegateQueue:] + 395 5 CFNetwork 0x2fef6eb7 +[__NSCFURLSession sessionWithConfiguration:delegate:delegateQueue:] + 295 

Ver información específica de la aplicación: ¿La aplicación no se ejecutó a time (iOS)? .

Básicamente hay 2 cosas a tener en count:

  1. Al iniciar, solo tiene unos segundos para finalizar el procedimiento de inicio. Cualquier código de ejecución más largo debería llamarse de forma asíncrona después de que la aplicación haya comenzado.

  2. Asegúrese de que cualquier código UI en sus callbacks / blocks / closures / etc … se llame al hilo principal. Debes forzarlo a hacerlo.