Я хочу перехватить все сетевые вызовы (запрос и ответ) в приложении, поэтому я реализую конкретный URLProtocol
подкласс.
В большинстве онлайн-примеров просто создается новый URLSession
со значением по умолчаниюКонфигурация для каждой задачи.Это означает, что любая конфигурация из исходного сеанса потеряна.
Один из подходов - сохранить задачу из init(task: URLSessionTask, cachedResponse: CachedURLResponse?, client: URLProtocolClient?)
и возобновить ее в startLoading()
, но тогда нет способа получить уведомление о результатах задачи..
Кажется, я могу либо создать новый сеанс и потерять конфигурацию, либо повторно использовать сеанс, но не получать уведомления о событиях задачи, но не обоими.
Вопрос: как мне реализовать URLProtocol
, точнее startLoading()
, чтобы конфигурация сеанса не была потеряна, и я все еще получал обратные вызовы делегата задачи?
Идеи:
- Извлечение сеанса (и конфигурации) из задачи.Минусы: разоблачение частной собственности, которая не гарантируется.
- Откажитесь от
URLProtocol
и пошлите кучу методов URLSession
и URLSessionTask
.Минусы: требуется много алкоголя. - ?