2017-01-11 2 views
1

Я испытываю странное поведение, отлаживающее мое приложение.Что вызывает странные различия с фоном URLSession между ios 8.1 и ios 10.2 на симуляторе?

У меня есть прямой вперед URLSession с фоновой конфигурацией:

 let backgroundSessionConfiguration = URLSessionConfiguration.background(withIdentifier: (prefix + postfix)) 
     let backgroundSession = Foundation.URLSession(configuration: backgroundSessionConfiguration, delegate: self, delegateQueue: OperationQueue.main) 

     progressView.setProgress(0.0, animated: false) 

     var request = URLRequest(url: dlUrl) 
     request.httpMethod = "GET" 
     request.cachePolicy = NSMutableURLRequest.CachePolicy.reloadIgnoringCacheData 

     let task = backgroundSession.downloadTask(with: request) 

     task.resume() 

Моего тестом IST следующим образом:

  1. начала загрузки в приложении.
  2. Принесите приложение на задний план.
  3. уведомлять о завершении загрузки фона.
  4. После нажатия на приложении уведомлений появляется на передний план

Когда я попробовать это с симулятором под ИОСОМ 10.2 приложение приостанавливает загрузку после шага 2, а загрузка не заканчивается - нет никаких дальнейших ошибок сообщений или предупреждений. Когда я приношу приложение на передний план, загрузка возобновляется и заканчивается.

Но когда я пробую то же самое с симулятором и ios 8.1 все работает должным образом.

И теперь лучшая часть:

На устройства с прошивкой 10,2 все работает также, как и следовало ожидать, так что теперь возникает вопрос, почему не на тренажере? Может ли это быть связано с некоторыми ограничениями ресурсов, применяемыми в симуляторе?

ответ

1

Похоже, вы нашли ошибку с симулятором 10.2. Это не удивительно. Симулятор фактически написан поверх фреймворков OS X, с кодом клей, чтобы заставить его действовать как iOS.

Я обнаружил, что проблемы возникают в частях симулятора, которые взаимодействуют с OSX или с пользовательским оборудованием на устройствах iOS.

В файловой системе существуют различные несоответствия, и такие вещи, как GPS и ацеллерометр, не полностью поддерживаются.

Не удивительно, что симулятор не справляется с нормальной работой NSURLSession. Для управления загрузкой файлов извне вашего приложения и повторным запуском приложения при завершении требуется взаимодействие с планированием задач низкого уровня.

Я предлагаю подать ошибку Radar с Apple.

+0

Спасибо Duncan C за разъяснение. Мне было бы любопытно, если кто-нибудь столкнется с одной и той же проблемой ... –

Смежные вопросы