From e7fabddf9862ebb6e104e83358fb3ee0d550f43c Mon Sep 17 00:00:00 2001 From: Mattin Abdollahi Date: Tue, 11 Jan 2022 15:34:23 +0330 Subject: [PATCH 1/3] fix: Spelling of the swizzle method --- .../Extension/URLSessionConfiguration+Extension.swift | 6 +++--- Sources/NetShears/NetworkRequestInterceptor.swift | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) 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/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) } From 836c817472b73f58a666f74ceda7c646b941d7b2 Mon Sep 17 00:00:00 2001 From: Mattin Abdollahi Date: Tue, 11 Jan 2022 15:41:43 +0330 Subject: [PATCH 2/3] Broadcast the new request to multiple delegates --- .../Observable/RequestBroadcast.swift | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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) } } } } From a62c694d6152257a8f88649e675d887adcca54ea Mon Sep 17 00:00:00 2001 From: Mattin Abdollahi Date: Tue, 11 Jan 2022 16:42:29 +0330 Subject: [PATCH 3/3] Code cleanup --- Sources/NetShears/NetworkInterceptor.swift | 25 ------------------- .../NetworkInterceptorUrlProtocol.swift | 10 ++++++-- 2 files changed, 8 insertions(+), 27 deletions(-) delete mode 100644 Sources/NetShears/NetworkInterceptor.swift 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/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 }