Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to use NSURLProtocol in a NSURLSession with custom config?

I have a NSURLSession that runs in a background queue. I'm adding my NSURLProtocol subclass to the NSURLsessionConfiguration.protocolClases but the override class func canInitWithRequest(request: NSURLRequest) -> Bool never gets called.

This is how I'm adding my NSURLProtocol

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.protocolClasses!.append(MockNetwork)
urlSession = NSURLSession(configuration: configuration, delegate: self, delegateQueue: operationQueue)

Also I tried with the session not running on background doing but also didn't work:

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.protocolClasses!.append(MockNetwork)
urlSession = NSURLSession(configuration: configuration)

As this was not working I just tried:

urlSession = NSURLSession.sharedSession()

And calling this in my AppDelegate

NSURLProtocol.registerClass(MockNetwork)

This does work, what am I doing wrong?!

like image 552
Andres Avatar asked Feb 24 '15 20:02

Andres


1 Answers

After spending some more hours trying to find out why this wasn't working I found the way of doing it.

Instead of:

configuration.protocolClasses?.append(MockNetwork.self)

Do:

var protocolClasses = [AnyClass]()
protocolClasses.append(MockNetwork.self)

let configuration = URLSessionConfiguration.default
configuration.protocolClasses = protocolClasses

After that change everything worked and not necessary to URLProtocol.registerClass(MockNetwork.self)

like image 65
Andres Avatar answered Oct 13 '22 21:10

Andres