2017-02-10 6 views
0

Ich habe versucht, NSURLProtocol verwenden, um alle Anfragen in einem Swift 2.3-Projekt zu protokollieren. Es werden jedoch nicht alle URL-Anfragen protokolliert. Insbesondere werden alle Alamofire-Anfragen nicht aufgezeichnet.Swift - Log alle Anfragen in Mac App

Beispielcode

class AppDelegate: NSObject, NSApplicationDelegate{ 
    func applicationDidFinishLaunching(aNotification: NSNotification) { 
     NSURLProtocol.registerClass(TestURLProtocol) 
     Alamofire.request(.GET, SomeURL).responseSwiftyJSON({ (request, response, json, error) in }) 
    } 
} 

class TestURLProtocol: NSURLProtocol { 
    override class func canInitWithRequest(request: NSURLRequest) -> Bool { 
     print("request \(request.URL!)") // never called 
     return false 
    } 
} 

Antwort

0

Ich denke, das liegt daran, dass der neuen Alamofire URLSession API verwendet, die nicht von dem NSURLProtocol.registerProtocol Aufruf betroffen ist.

Sie müssen erstellen URLSession mit URLSessionConfiguration, die seine protocolClasses Array [TestURLProtocol.self] gesetzt.

Aber mit diesem müssten Sie eine benutzerdefinierte SessionManager überall verwenden, um die Anforderungen zu protokollieren, anstatt die implizite Alamofire.request ich denke zu verwenden.

+0

Ich habe versucht, die Methode aus dieser Antwort zu verwenden, und es hat nicht funktioniert. http://StackOverflow.com/A/28720198/1449607 – datinc

+0

Ja, aber Sie müssen die Konfiguration in den Sitzungsmanager injizieren und dann anstelle von 'Alamofire.request' verwenden – Alistra

+0

Ich versuche, auch Drittanbieter-Dienste zu überwachen. Ich bin auf der Suche nach einer Lösung, mit der ich diese Anfragen ohne Änderung ihres Codes überwachen kann. – datinc

0

Was ich am Ende benutzt habe, war der Pod OHHTTPStubs. Ich habe meinem App-Delegaten den folgenden Code hinzugefügt, um jeden verwendeten Host zu protokollieren.

func applicationDidFinishLaunching(aNotification: NSNotification) { 
    var hosts = [String: Int]() 

    stub({ req in 
     if let url = req.URL, let host = url.host{ 
      var count = 1 
      if let c = hosts[host]{ 
       count = c + 1 
      } 
      hosts[host] = count 

      print("Request #\(count): Host = \(host)") 
     } 
     return false 
     }, 
     response:{_ in return OHHTTPStubsResponse()} 
    ); 
}