App freezes and UI blocked when download task is running in background session
I have a background session as below
-(NSURLSession *)backgroundSession
{
if (session==nil) {
NSURLSessionConfiguration *configuration;
// configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
if ([NSURLSessionConfiguration respondsToSelector:@selector(backgroundSessionConfigurationWithIdentifier:)]) {
configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.xxx.xxx.BackgroundSession"];
} else
{
configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.xxx.xxx.BackgroundSession"];
}
[configuration setSessionSendsLaunchEvents:YES];
configuration.HTTPMaximumConnectionsPerHost = 1;
session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
}
return session;
}
[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
if ([downloadTasks count] > 0 ) {
NSArray *filtered = [downloadTasks filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(self.taskDescription MATCHES %@)", [NSString stringWithFormat:@"SONGDATA_DOWNLOAD %@",songID]]];
if([filtered count]>0)
{
for(NSURLSessionDownloadTask *PreviousDownloadTask in filtered)
{
if(PreviousDownloadTask.state != NSURLSessionTaskStateRunning && PreviousDownloadTask.state != NSURLSessionTaskStateCompleted)
{
[PreviousDownloadTask resume];
NSLog(@"SONGDATA_DOWNLOAD already in queue %@ task Description %@",filtered,[NSString stringWithFormat:@"SONGDATA_DOWNLOAD %@",songID]);
}
return ;
}
}
}
}];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
self.downloadTask = [[self backgroundSession] downloadTaskWithRequest:request];
downloadTask.taskDescription=[NSString stringWithFormat:@"SONGDATA_DOWNLOAD %@",songID];
[self.downloadTask resume];
But when request sends it fails and gets result
An error occurred on the xpc connection to setup the background session:
Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.apple.nsurlsessiond" UserInfo={NSDebugDescription=connection to service named com.apple.nsurlsessiond}
for few minutes when the appfreezes and no UI action could be done.