Я использую Apollo iOS 0.8 с Xcode 9.3, Swift 4.1 и iOS 11 и инициализирую экземпляр клиента Apollo следующим образом:
import Apollo
// ... unrelated code skipped
let configuration = URLSessionConfiguration.default
if let token = keychain.accessToken {
// Add additional headers as needed
configuration.httpAdditionalHeaders = [
"Authorization": "Bearer \(token)"
]
}
let graphqlEndpoint = URL("https://sample-server-url/graphql")!
let client = ApolloClient(networkTransport:
HTTPNetworkTransport(url: graphqlEndpoint, configuration: configuration))
Приложение хорошо работает со всеми запросами и мутациями, отправленными на сервер GraphQL без проблем, кроме случаев, когда приложение находится в фоновом режиме. Насколько я знаю, с обычным NSURLSession
экземпляром это можно легко решить, переключив конфигурацию сеанса на URLSessionConfiguration.background(withIdentifier: "your-session-id")
.
Но когда я заменяю строку
let configuration = URLSessionConfiguration.default
с
let configuration = URLSessionConfiguration.background(withIdentifier: "your-session-id")
приложение начинает зависать с этой ошибкой: Terminating app due to uncaught exception 'NSGenericException', reason: 'Completion handler blocks are not supported in background sessions. Use a delegate instead.'
Как лучше всего устранить эту ошибку при использовании Apollo GraphQL или есть какой-либо другой способ связи с сервером GraphQL в фоновом режиме?