Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does connecting back to an iOS background NSURLSession take too long waiting on a lock, crashing the app?

Why would connecting with an NSURLSession through its configuration take so long that it would crash the app on start up: 'failed to launch in time'?

I've seen similar crash dumps in many iOS apps including NY Times iOS app and Evernote app.

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

Here's the stack trace:

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
like image 875
Rayyan Avatar asked Sep 05 '14 05:09

Rayyan


1 Answers

See Application Specific Information: Application failed to launch in time (iOS)? .

Basically there are 2 things to keep in mind:

  1. Upon startup, you only have a few seconds to finish the startup procedure. Any longer running code should be called asynchronously after the app has started.

  2. Make absolutely sure that any UI code in your callbacks/blocks/closures/etc... is called on the main thread. You must force it to do so.

like image 179
Rikkles Avatar answered Nov 03 '22 20:11

Rikkles