iOS 10 скоро будет выпущен, поэтому стоит попробовать приложения для совместимости с ним. Во время такого теста мы обнаружили, что наше приложение не может возобновить загрузку фонограмм на iOS10. Код, который хорошо работал на предыдущих версиях, не работает на новом, как на эмуляторе, так и на устройстве.
Вместо того, чтобы сократить наш код до минимального рабочего теста, я искал интернет для учебных материалов NSUrlSession и тестировал их. Поведение одно и то же: возобновление работы над версиями iOS предыдущих версий, но разрыв 10-го.
Шаги по воспроизведению:
- Загрузить проектную форму. Учебное пособие NSUrlSession https://www.raywenderlich.com/110458/nsurlsession-tutorial-getting-started
- Прямая ссылка: http://www.raywenderlich.com/wp-content/uploads/2016/01/HalfTunes-Final.zip
- Создайте его и запустите в iOS 10. Найдите что-нибудь, например "Быстрый". Начните загрузку, а затем нажмите "Пауза", а затем "Возобновить"
Ожидаемые результаты:
Загрузка возобновляется. Вы можете проверить, как это работает с версиями до iOS10.
Фактические результаты:
Загрузка не удалась. В консоли xcode вы можете увидеть:
2016-09-02 16:11:24.913 HalfTunes[35205:2279228] *** -[NSKeyedUnarchiver initForReadingWithData:]: data is NULL
2016-09-02 16:11:24.913 HalfTunes[35205:2279228] *** -[NSKeyedUnarchiver initForReadingWithData:]: data is NULL
2016-09-02 16:11:24.913 HalfTunes[35205:2279228] Invalid resume data for background download. Background downloads must use http or https and must download to an accessible file.
Другие сценарии:
Если вы активируете автономный режим, когда файл загружен, вы получаете
Url session completed with error: Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo={NSLocalizedDescription=unsupported URL} {
NSLocalizedDescription = "unsupported URL";
}
когда сеть отключена, и загрузка никогда не восстанавливается, когда сеть снова работает. Другие варианты использования с паузой, такие как перезагрузка, также не работают.
Дополнительное исследование:
Я попытался проверить, вернётся ли возвращаемое resumeData с использованием кода, предложенного в
Как я могу проверить, что кадр NSData действителен как resumeData для NSURLSessionDownloadTask?
но файл цели находится на месте. Хотя формат resumeData был изменен, и теперь имя файла хранится в NSURLSessionResumeInfoTempFileName, и вам нужно добавить NSTemporaryDirectory() к нему.
Кроме того, я заполнил отчет об ошибке для apple, но они еще не ответили.
Вопрос (Жизни, Вселенной и всего):
Продолжается ли возобновление NSUrlSession во всех других приложениях? Может ли он быть исправлен на стороне приложения?