Я использую NSURLSession, настроенный как фоновый сеанс, для загрузки нескольких изображений в корзину в GCS. Для одного теста использовалось 26 изображений, каждое размером около 10 МБ. Тесты выполняются при сильном подключении к Wi-Fi и при приближении батареи к 100%, если она не заряжается активно. Я создаю этот NSURLSession в тот момент, когда приложение является фоновым и уведомляется через обработчик истечения срока фоновой задачи.
NSURLSession код:
let config = URLSessionConfiguration.background(withIdentifier: identifier)
config.waitsForConnectivity = true
config.allowsCellularAccess = true
config.isDiscretionary = false
let session = URLSession(configuration: config, delegate: self, delegateQueue: nil)
session.sessionDescription = identifier
Создание запросов на загрузку:
for (signedGCSURLDestination, image) in images {
let request = URLRequest(url: signedGCSURLDestination, method: .put)
request.headers.add(name: "Content-Type", value: "image/jpeg")
let task = session.uploadTask(with: request, fromFile: file)
task.taskDescription = identifier
task.resume()
}
В конечном итоге все изображения в GCS Bucket имеют размер 0B. Перед переходом на фоновую NSURLSession мы используем Alamofire на переднем плане приложения, и эти изображения прекрасно загружаются в сегменты.
Я начинаю исследовать использование задачи фоновой обработки, чтобы потенциально продолжать использовать код Alamofire, пока приложение свернуто, но это отдельная проблема от NSURLSession, просто не работающего.