diff --git a/Sources/NetShears/Extension/URLSessionConfiguration+Extension.swift b/Sources/NetShears/Extension/URLSessionConfiguration+Extension.swift index 2584e4a..0d340d3 100644 --- a/Sources/NetShears/Extension/URLSessionConfiguration+Extension.swift +++ b/Sources/NetShears/Extension/URLSessionConfiguration+Extension.swift @@ -9,11 +9,11 @@ import Foundation extension URLSessionConfiguration { - @objc func fakeProcotolClasses() -> [AnyClass]? { - guard let fakeProcotolClasses = self.fakeProcotolClasses() else { + @objc func fakeProtocolClasses() -> [AnyClass]? { + guard let fakeProtocolClasses = self.fakeProtocolClasses() else { return [] } - var originalProtocolClasses = fakeProcotolClasses.filter { + var originalProtocolClasses = fakeProtocolClasses.filter { return $0 != NetworkInterceptorUrlProtocol.self && $0 != NetworkLoggerUrlProtocol.self && $0 != NetwrokListenerUrlProtocol.self } if NetShears.shared.loggerEnable { diff --git a/Sources/NetShears/NetworkInterceptor.swift b/Sources/NetShears/NetworkInterceptor.swift deleted file mode 100644 index 60e40ee..0000000 --- a/Sources/NetShears/NetworkInterceptor.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// NetworkInterceptor.swift -// NetShears -// -// Created by Mehdi Mirzaie on 6/4/21. -// - -import Foundation - - -@objc class NetworkInterceptor: NSObject { - - @objc static let shared = NetworkInterceptor() - let networkRequestInterceptor = NetworkRequestInterceptor() - - func shouldRequestModify(urlRequest: URLRequest) -> Bool { - for modifer in NetShears.shared.config.modifiers { - if modifer.isActionAllowed(urlRequest: urlRequest) { - return true - } - } - return false - } -} - diff --git a/Sources/NetShears/NetworkRequestInterceptor.swift b/Sources/NetShears/NetworkRequestInterceptor.swift index c70232e..ef0cd7f 100644 --- a/Sources/NetShears/NetworkRequestInterceptor.swift +++ b/Sources/NetShears/NetworkRequestInterceptor.swift @@ -14,7 +14,7 @@ import Foundation let uRLSessionConfigurationClass: AnyClass = object_getClass(instance)! let method1: Method = class_getInstanceMethod(uRLSessionConfigurationClass, #selector(getter: uRLSessionConfigurationClass.protocolClasses))! - let method2: Method = class_getInstanceMethod(URLSessionConfiguration.self, #selector(URLSessionConfiguration.fakeProcotolClasses))! + let method2: Method = class_getInstanceMethod(URLSessionConfiguration.self, #selector(URLSessionConfiguration.fakeProtocolClasses))! method_exchangeImplementations(method1, method2) } diff --git a/Sources/NetShears/Observable/RequestBroadcast.swift b/Sources/NetShears/Observable/RequestBroadcast.swift index 81b42a4..eed6e7f 100644 --- a/Sources/NetShears/Observable/RequestBroadcast.swift +++ b/Sources/NetShears/Observable/RequestBroadcast.swift @@ -14,25 +14,25 @@ public protocol RequestBroadcastDelegate: AnyObject { public final class RequestBroadcast: RequestObserverProtocol { static public let shared = RequestBroadcast() - var delegate = ThreadSafe(nil) + private var delegates = ThreadSafe>(.weakObjects()) private init() {} - public func setDelegate(_ newDelegate: RequestBroadcastDelegate) { - delegate.atomically { delegate in - delegate = newDelegate + public func addDelegate(_ newDelegate: RequestBroadcastDelegate) { + delegates.atomically { delegates in + delegates.add(newDelegate) } } - public func removeDelegate() { - delegate.atomically { delegate in - delegate = nil + public func removeDelegate(_ delegateToRemove: RequestBroadcastDelegate) { + delegates.atomically { delegates in + delegates.remove(delegateToRemove) } } func newRequestArrived(_ request: NetShearsRequestModel) { - delegate.atomically { delegate in - delegate?.newRequestArrived(request) + delegates.atomically { delegates in + delegates.allObjects.reversed().forEach { ($0 as! RequestBroadcastDelegate).newRequestArrived(request) } } } } diff --git a/Sources/NetShears/URLProtocol/NetworkInterceptorUrlProtocol.swift b/Sources/NetShears/URLProtocol/NetworkInterceptorUrlProtocol.swift index 4628fa2..fb42d04 100644 --- a/Sources/NetShears/URLProtocol/NetworkInterceptorUrlProtocol.swift +++ b/Sources/NetShears/URLProtocol/NetworkInterceptorUrlProtocol.swift @@ -26,7 +26,13 @@ class NetworkInterceptorUrlProtocol: URLProtocol { } override class func canInit(with request: URLRequest) -> Bool { - guard NetworkInterceptor.shared.shouldRequestModify(urlRequest: request) else { return false } + let shouldRequestModify: (URLRequest) -> Bool = { urlRequest in + for modifer in NetShears.shared.config.modifiers { + if modifer.isActionAllowed(urlRequest: urlRequest) { return true } + } + return false + } + guard shouldRequestModify(request) else { return false } if NetworkInterceptorUrlProtocol.property(forKey: Constants.RequestHandledKey, in: request) != nil { return false @@ -36,7 +42,7 @@ class NetworkInterceptorUrlProtocol: URLProtocol { open override class func canonicalRequest(for request: URLRequest) -> URLRequest { let mutableRequest: NSMutableURLRequest = (request as NSURLRequest).mutableCopy() as! NSMutableURLRequest - URLProtocol.setProperty("YES", forKey: "NetworkInterceptorUrlProtocol", in: mutableRequest) + URLProtocol.setProperty(true, forKey: Constants.RequestHandledKey, in: mutableRequest) return mutableRequest.copy() as! URLRequest }