FLEXNetworkLib to SKFLEXNetworkLib
Summary: rename FLEXNetworkLib to SKFLEXNetworkLib so it doesnt clash with Stock FLEX if embedded in the app too also 'fix' 3 warnings by adding explicit casts Reviewed By: lblasa Differential Revision: D35200011 fbshipit-source-id: 82bdecc5076b86958ea0cb80260584c012940045
This commit is contained in:
committed by
Facebook GitHub Bot
parent
fd23a9d626
commit
8cbb5c4d46
@@ -38,13 +38,13 @@
|
|||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
FOUNDATION_EXTERN NSString* const
|
FOUNDATION_EXTERN NSString* const
|
||||||
kFLEXNetworkObserverEnabledStateChangedNotification;
|
kSKFLEXNetworkObserverEnabledStateChangedNotification;
|
||||||
|
|
||||||
/// This class swizzles NSURLConnection and NSURLSession delegate methods to
|
/// This class swizzles NSURLConnection and NSURLSession delegate methods to
|
||||||
/// observe events in the URL loading system. High level network events are sent
|
/// observe events in the URL loading system. High level network events are sent
|
||||||
/// to the default FLEXNetworkRecorder instance which maintains the request
|
/// to the default SKFLEXNetworkRecorder instance which maintains the request
|
||||||
/// history and caches response bodies.
|
/// history and caches response bodies.
|
||||||
@interface FLEXNetworkObserver : NSObject
|
@interface SKFLEXNetworkObserver : NSObject
|
||||||
|
|
||||||
+ (void)start;
|
+ (void)start;
|
||||||
|
|
||||||
@@ -35,38 +35,38 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#import "FLEXNetworkObserver.h"
|
#import "SKFLEXNetworkObserver.h"
|
||||||
|
|
||||||
#import <objc/message.h>
|
#import <objc/message.h>
|
||||||
#import <objc/runtime.h>
|
#import <objc/runtime.h>
|
||||||
|
|
||||||
#import <dispatch/queue.h>
|
#import <dispatch/queue.h>
|
||||||
|
|
||||||
#import "FLEXNetworkRecorder.h"
|
#import "SKFLEXNetworkRecorder.h"
|
||||||
#import "FLEXUtility.h"
|
#import "SKFLEXUtility.h"
|
||||||
|
|
||||||
NSString* const kFLEXNetworkObserverEnabledStateChangedNotification =
|
NSString* const kSKFLEXNetworkObserverEnabledStateChangedNotification =
|
||||||
@"kFLEXNetworkObserverEnabledStateChangedNotification";
|
@"kSKFLEXNetworkObserverEnabledStateChangedNotification";
|
||||||
static NSString* const kFLEXNetworkObserverEnabledDefaultsKey =
|
static NSString* const kSKFLEXNetworkObserverEnabledDefaultsKey =
|
||||||
@"com.flex.FLEXNetworkObserver.enableOnLaunch";
|
@"com.skflex.SKFLEXNetworkObserver.enableOnLaunch";
|
||||||
|
|
||||||
typedef void (^NSURLSessionAsyncCompletion)(
|
typedef void (^NSURLSessionAsyncCompletion)(
|
||||||
id fileURLOrData,
|
id fileURLOrData,
|
||||||
NSURLResponse* response,
|
NSURLResponse* response,
|
||||||
NSError* error);
|
NSError* error);
|
||||||
|
|
||||||
@interface FLEXInternalRequestState : NSObject
|
@interface SKFLEXInternalRequestState : NSObject
|
||||||
|
|
||||||
@property(nonatomic, copy) NSURLRequest* request;
|
@property(nonatomic, copy) NSURLRequest* request;
|
||||||
@property(nonatomic, strong) NSMutableData* dataAccumulator;
|
@property(nonatomic, strong) NSMutableData* dataAccumulator;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation FLEXInternalRequestState
|
@implementation SKFLEXInternalRequestState
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface FLEXNetworkObserver (NSURLConnectionHelpers)
|
@interface SKFLEXNetworkObserver (NSURLConnectionHelpers)
|
||||||
|
|
||||||
- (void)connection:(NSURLConnection*)connection
|
- (void)connection:(NSURLConnection*)connection
|
||||||
willSendRequest:(NSURLRequest*)request
|
willSendRequest:(NSURLRequest*)request
|
||||||
@@ -90,7 +90,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface FLEXNetworkObserver (NSURLSessionTaskHelpers)
|
@interface SKFLEXNetworkObserver (NSURLSessionTaskHelpers)
|
||||||
|
|
||||||
- (void)URLSession:(NSURLSession*)session
|
- (void)URLSession:(NSURLSession*)session
|
||||||
task:(NSURLSessionTask*)task
|
task:(NSURLSessionTask*)task
|
||||||
@@ -132,16 +132,16 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface FLEXNetworkObserver ()
|
@interface SKFLEXNetworkObserver ()
|
||||||
|
|
||||||
@property(nonatomic, strong)
|
@property(nonatomic, strong)
|
||||||
NSMutableDictionary<NSString*, FLEXInternalRequestState*>*
|
NSMutableDictionary<NSString*, SKFLEXInternalRequestState*>*
|
||||||
requestStatesForRequestIDs;
|
requestStatesForRequestIDs;
|
||||||
@property(nonatomic, strong) dispatch_queue_t queue;
|
@property(nonatomic, strong) dispatch_queue_t queue;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation FLEXNetworkObserver
|
@implementation SKFLEXNetworkObserver
|
||||||
|
|
||||||
#pragma mark - Public Methods
|
#pragma mark - Public Methods
|
||||||
|
|
||||||
@@ -152,7 +152,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
#pragma mark - Statics
|
#pragma mark - Statics
|
||||||
|
|
||||||
+ (instancetype)sharedObserver {
|
+ (instancetype)sharedObserver {
|
||||||
static FLEXNetworkObserver* sharedObserver = nil;
|
static SKFLEXNetworkObserver* sharedObserver = nil;
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
sharedObserver = [[[self class] alloc] init];
|
sharedObserver = [[[self class] alloc] init];
|
||||||
@@ -237,7 +237,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
for (NSInteger classIndex = 0; classIndex < numClasses; ++classIndex) {
|
for (NSInteger classIndex = 0; classIndex < numClasses; ++classIndex) {
|
||||||
Class className = classes[classIndex];
|
Class className = classes[classIndex];
|
||||||
|
|
||||||
if (className == [FLEXNetworkObserver class]) {
|
if (className == [SKFLEXNetworkObserver class]) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,11 +309,11 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
Class className = [NSURLConnection class];
|
Class className = [NSURLConnection class];
|
||||||
SEL selector = @selector(cancel);
|
SEL selector = @selector(cancel);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
Method originalCancel = class_getInstanceMethod(className, selector);
|
Method originalCancel = class_getInstanceMethod(className, selector);
|
||||||
|
|
||||||
void (^swizzleBlock)(NSURLConnection*) = ^(NSURLConnection* slf) {
|
void (^swizzleBlock)(NSURLConnection*) = ^(NSURLConnection* slf) {
|
||||||
[[FLEXNetworkObserver sharedObserver] connectionWillCancel:slf];
|
[[SKFLEXNetworkObserver sharedObserver] connectionWillCancel:slf];
|
||||||
((void (*)(id, SEL))objc_msgSend)(slf, swizzledSelector);
|
((void (*)(id, SEL))objc_msgSend)(slf, swizzledSelector);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -349,7 +349,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
}
|
}
|
||||||
|
|
||||||
SEL selector = @selector(resume);
|
SEL selector = @selector(resume);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Method originalResume = class_getInstanceMethod(className, selector);
|
Method originalResume = class_getInstanceMethod(className, selector);
|
||||||
|
|
||||||
@@ -362,7 +362,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
// request won't trigger a race to finalize the parser.
|
// request won't trigger a race to finalize the parser.
|
||||||
[slf.currentRequest HTTPBody];
|
[slf.currentRequest HTTPBody];
|
||||||
|
|
||||||
[[FLEXNetworkObserver sharedObserver] URLSessionTaskWillResume:slf];
|
[[SKFLEXNetworkObserver sharedObserver] URLSessionTaskWillResume:slf];
|
||||||
((void (*)(id, SEL))objc_msgSend)(slf, swizzledSelector);
|
((void (*)(id, SEL))objc_msgSend)(slf, swizzledSelector);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -382,7 +382,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
Class className = objc_getMetaClass(class_getName([NSURLConnection class]));
|
Class className = objc_getMetaClass(class_getName([NSURLConnection class]));
|
||||||
SEL selector = @selector(sendAsynchronousRequest:queue:completionHandler:);
|
SEL selector = @selector(sendAsynchronousRequest:queue:completionHandler:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
typedef void (^NSURLConnectionAsyncCompletion)(
|
typedef void (^NSURLConnectionAsyncCompletion)(
|
||||||
NSURLResponse* response, NSData* data, NSError* connectionError);
|
NSURLResponse* response, NSData* data, NSError* connectionError);
|
||||||
@@ -397,28 +397,28 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
NSOperationQueue* queue,
|
NSOperationQueue* queue,
|
||||||
NSURLConnectionAsyncCompletion completion) {
|
NSURLConnectionAsyncCompletion completion) {
|
||||||
NSString* requestID = [self nextRequestID];
|
NSString* requestID = [self nextRequestID];
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordRequestWillBeSentWithRequestID:requestID
|
recordRequestWillBeSentWithRequestID:requestID
|
||||||
request:request
|
request:request
|
||||||
redirectResponse:nil];
|
redirectResponse:nil];
|
||||||
NSString* mechanism = [self mechanismFromClassMethod:selector
|
NSString* mechanism = [self mechanismFromClassMethod:selector
|
||||||
onClass:className];
|
onClass:className];
|
||||||
[[FLEXNetworkRecorder defaultRecorder] recordMechanism:mechanism
|
[[SKFLEXNetworkRecorder defaultRecorder] recordMechanism:mechanism
|
||||||
forRequestID:requestID];
|
forRequestID:requestID];
|
||||||
NSURLConnectionAsyncCompletion completionWrapper = ^(
|
NSURLConnectionAsyncCompletion completionWrapper = ^(
|
||||||
NSURLResponse* response, NSData* data, NSError* connectionError) {
|
NSURLResponse* response, NSData* data, NSError* connectionError) {
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordResponseReceivedWithRequestID:requestID
|
recordResponseReceivedWithRequestID:requestID
|
||||||
response:response];
|
response:response];
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordDataReceivedWithRequestID:requestID
|
recordDataReceivedWithRequestID:requestID
|
||||||
dataLength:[data length]];
|
dataLength:[data length]];
|
||||||
if (connectionError) {
|
if (connectionError) {
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordLoadingFailedWithRequestID:requestID
|
recordLoadingFailedWithRequestID:requestID
|
||||||
error:connectionError];
|
error:connectionError];
|
||||||
} else {
|
} else {
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordLoadingFinishedWithRequestID:requestID
|
recordLoadingFinishedWithRequestID:requestID
|
||||||
responseBody:data];
|
responseBody:data];
|
||||||
}
|
}
|
||||||
@@ -432,7 +432,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
slf, swizzledSelector, request, queue, completionWrapper);
|
slf, swizzledSelector, request, queue, completionWrapper);
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfKnownSelector:selector
|
[SKFLEXUtility replaceImplementationOfKnownSelector:selector
|
||||||
onClass:className
|
onClass:className
|
||||||
withBlock:asyncSwizzleBlock
|
withBlock:asyncSwizzleBlock
|
||||||
swizzledSelector:swizzledSelector];
|
swizzledSelector:swizzledSelector];
|
||||||
@@ -444,7 +444,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
Class className = objc_getMetaClass(class_getName([NSURLConnection class]));
|
Class className = objc_getMetaClass(class_getName([NSURLConnection class]));
|
||||||
SEL selector = @selector(sendSynchronousRequest:returningResponse:error:);
|
SEL selector = @selector(sendSynchronousRequest:returningResponse:error:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
NSData* (
|
NSData* (
|
||||||
^syncSwizzleBlock)(Class, NSURLRequest*, NSURLResponse**, NSError**) =
|
^syncSwizzleBlock)(Class, NSURLRequest*, NSURLResponse**, NSError**) =
|
||||||
@@ -455,31 +455,31 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
NSError** error) {
|
NSError** error) {
|
||||||
NSData* data = nil;
|
NSData* data = nil;
|
||||||
NSString* requestID = [self nextRequestID];
|
NSString* requestID = [self nextRequestID];
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordRequestWillBeSentWithRequestID:requestID
|
recordRequestWillBeSentWithRequestID:requestID
|
||||||
request:request
|
request:request
|
||||||
redirectResponse:nil];
|
redirectResponse:nil];
|
||||||
NSString* mechanism = [self mechanismFromClassMethod:selector
|
NSString* mechanism = [self mechanismFromClassMethod:selector
|
||||||
onClass:className];
|
onClass:className];
|
||||||
[[FLEXNetworkRecorder defaultRecorder] recordMechanism:mechanism
|
[[SKFLEXNetworkRecorder defaultRecorder] recordMechanism:mechanism
|
||||||
forRequestID:requestID];
|
forRequestID:requestID];
|
||||||
NSError* temporaryError = nil;
|
NSError* temporaryError = nil;
|
||||||
NSURLResponse* temporaryResponse = nil;
|
NSURLResponse* temporaryResponse = nil;
|
||||||
data =
|
data =
|
||||||
((id(*)(id, SEL, id, NSURLResponse**, NSError**))
|
((id(*)(id, SEL, id, NSURLResponse**, NSError**))
|
||||||
objc_msgSend)(slf, swizzledSelector, request, &temporaryResponse, &temporaryError);
|
objc_msgSend)(slf, swizzledSelector, request, &temporaryResponse, &temporaryError);
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordResponseReceivedWithRequestID:requestID
|
recordResponseReceivedWithRequestID:requestID
|
||||||
response:temporaryResponse];
|
response:temporaryResponse];
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordDataReceivedWithRequestID:requestID
|
recordDataReceivedWithRequestID:requestID
|
||||||
dataLength:[data length]];
|
dataLength:[data length]];
|
||||||
if (temporaryError) {
|
if (temporaryError) {
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordLoadingFailedWithRequestID:requestID
|
recordLoadingFailedWithRequestID:requestID
|
||||||
error:temporaryError];
|
error:temporaryError];
|
||||||
} else {
|
} else {
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordLoadingFinishedWithRequestID:requestID
|
recordLoadingFinishedWithRequestID:requestID
|
||||||
responseBody:data];
|
responseBody:data];
|
||||||
}
|
}
|
||||||
@@ -492,7 +492,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
return data;
|
return data;
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfKnownSelector:selector
|
[SKFLEXUtility replaceImplementationOfKnownSelector:selector
|
||||||
onClass:className
|
onClass:className
|
||||||
withBlock:syncSwizzleBlock
|
withBlock:syncSwizzleBlock
|
||||||
swizzledSelector:swizzledSelector];
|
swizzledSelector:swizzledSelector];
|
||||||
@@ -518,9 +518,11 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
for (int selectorIndex = 0; selectorIndex < numSelectors; selectorIndex++) {
|
for (int selectorIndex = 0; selectorIndex < numSelectors; selectorIndex++) {
|
||||||
SEL selector = selectors[selectorIndex];
|
SEL selector = selectors[selectorIndex];
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector =
|
||||||
|
[SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
if ([FLEXUtility instanceRespondsButDoesNotImplementSelector:selector
|
if ([SKFLEXUtility
|
||||||
|
instanceRespondsButDoesNotImplementSelector:selector
|
||||||
class:className]) {
|
class:className]) {
|
||||||
// iOS 7 does not implement these methods on NSURLSession. We actually
|
// iOS 7 does not implement these methods on NSURLSession. We actually
|
||||||
// want to swizzle __NSCFURLSession, which we can get from the class of
|
// want to swizzle __NSCFURLSession, which we can get from the class of
|
||||||
@@ -559,7 +561,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
return task;
|
return task;
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility
|
[SKFLEXUtility
|
||||||
replaceImplementationOfKnownSelector:selector
|
replaceImplementationOfKnownSelector:selector
|
||||||
onClass:className
|
onClass:className
|
||||||
withBlock:asyncDataOrDownloadSwizzleBlock
|
withBlock:asyncDataOrDownloadSwizzleBlock
|
||||||
@@ -585,9 +587,11 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
for (int selectorIndex = 0; selectorIndex < numSelectors; selectorIndex++) {
|
for (int selectorIndex = 0; selectorIndex < numSelectors; selectorIndex++) {
|
||||||
SEL selector = selectors[selectorIndex];
|
SEL selector = selectors[selectorIndex];
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector =
|
||||||
|
[SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
if ([FLEXUtility instanceRespondsButDoesNotImplementSelector:selector
|
if ([SKFLEXUtility
|
||||||
|
instanceRespondsButDoesNotImplementSelector:selector
|
||||||
class:className]) {
|
class:className]) {
|
||||||
// iOS 7 does not implement these methods on NSURLSession. We actually
|
// iOS 7 does not implement these methods on NSURLSession. We actually
|
||||||
// want to swizzle __NSCFURLSession, which we can get from the class of
|
// want to swizzle __NSCFURLSession, which we can get from the class of
|
||||||
@@ -629,7 +633,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
return task;
|
return task;
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility
|
[SKFLEXUtility
|
||||||
replaceImplementationOfKnownSelector:selector
|
replaceImplementationOfKnownSelector:selector
|
||||||
onClass:className
|
onClass:className
|
||||||
withBlock:asyncUploadTaskSwizzleBlock
|
withBlock:asyncUploadTaskSwizzleBlock
|
||||||
@@ -650,9 +654,9 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
completion:(NSURLSessionAsyncCompletion)completion {
|
completion:(NSURLSessionAsyncCompletion)completion {
|
||||||
NSURLSessionAsyncCompletion completionWrapper =
|
NSURLSessionAsyncCompletion completionWrapper =
|
||||||
^(id fileURLOrData, NSURLResponse* response, NSError* error) {
|
^(id fileURLOrData, NSURLResponse* response, NSError* error) {
|
||||||
[[FLEXNetworkRecorder defaultRecorder] recordMechanism:mechanism
|
[[SKFLEXNetworkRecorder defaultRecorder] recordMechanism:mechanism
|
||||||
forRequestID:requestID];
|
forRequestID:requestID];
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordResponseReceivedWithRequestID:requestID
|
recordResponseReceivedWithRequestID:requestID
|
||||||
response:response];
|
response:response];
|
||||||
NSData* data = nil;
|
NSData* data = nil;
|
||||||
@@ -661,15 +665,15 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
} else if ([fileURLOrData isKindOfClass:[NSData class]]) {
|
} else if ([fileURLOrData isKindOfClass:[NSData class]]) {
|
||||||
data = fileURLOrData;
|
data = fileURLOrData;
|
||||||
}
|
}
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordDataReceivedWithRequestID:requestID
|
recordDataReceivedWithRequestID:requestID
|
||||||
dataLength:[data length]];
|
dataLength:[data length]];
|
||||||
if (error) {
|
if (error) {
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordLoadingFailedWithRequestID:requestID
|
recordLoadingFailedWithRequestID:requestID
|
||||||
error:error];
|
error:error];
|
||||||
} else {
|
} else {
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordLoadingFinishedWithRequestID:requestID
|
recordLoadingFinishedWithRequestID:requestID
|
||||||
responseBody:data];
|
responseBody:data];
|
||||||
}
|
}
|
||||||
@@ -684,7 +688,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
+ (void)injectWillSendRequestIntoDelegateClass:(Class)cls {
|
+ (void)injectWillSendRequestIntoDelegateClass:(Class)cls {
|
||||||
SEL selector = @selector(connection:willSendRequest:redirectResponse:);
|
SEL selector = @selector(connection:willSendRequest:redirectResponse:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Protocol* protocol = @protocol(NSURLConnectionDataDelegate);
|
Protocol* protocol = @protocol(NSURLConnectionDataDelegate);
|
||||||
if (!protocol) {
|
if (!protocol) {
|
||||||
@@ -702,7 +706,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
NSURLConnection* connection,
|
NSURLConnection* connection,
|
||||||
NSURLRequest* request,
|
NSURLRequest* request,
|
||||||
NSURLResponse* response) {
|
NSURLResponse* response) {
|
||||||
[[FLEXNetworkObserver sharedObserver] connection:connection
|
[[SKFLEXNetworkObserver sharedObserver] connection:connection
|
||||||
willSendRequest:request
|
willSendRequest:request
|
||||||
redirectResponse:response
|
redirectResponse:response
|
||||||
delegate:slf];
|
delegate:slf];
|
||||||
@@ -731,7 +735,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
return returnValue;
|
return returnValue;
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -741,7 +745,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
+ (void)injectDidReceiveResponseIntoDelegateClass:(Class)cls {
|
+ (void)injectDidReceiveResponseIntoDelegateClass:(Class)cls {
|
||||||
SEL selector = @selector(connection:didReceiveResponse:);
|
SEL selector = @selector(connection:didReceiveResponse:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Protocol* protocol = @protocol(NSURLConnectionDataDelegate);
|
Protocol* protocol = @protocol(NSURLConnectionDataDelegate);
|
||||||
if (!protocol) {
|
if (!protocol) {
|
||||||
@@ -760,7 +764,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
^(id<NSURLConnectionDelegate> slf,
|
^(id<NSURLConnectionDelegate> slf,
|
||||||
NSURLConnection* connection,
|
NSURLConnection* connection,
|
||||||
NSURLResponse* response) {
|
NSURLResponse* response) {
|
||||||
[[FLEXNetworkObserver sharedObserver] connection:connection
|
[[SKFLEXNetworkObserver sharedObserver] connection:connection
|
||||||
didReceiveResponse:response
|
didReceiveResponse:response
|
||||||
delegate:slf];
|
delegate:slf];
|
||||||
};
|
};
|
||||||
@@ -780,7 +784,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -790,7 +794,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
+ (void)injectDidReceiveDataIntoDelegateClass:(Class)cls {
|
+ (void)injectDidReceiveDataIntoDelegateClass:(Class)cls {
|
||||||
SEL selector = @selector(connection:didReceiveData:);
|
SEL selector = @selector(connection:didReceiveData:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Protocol* protocol = @protocol(NSURLConnectionDataDelegate);
|
Protocol* protocol = @protocol(NSURLConnectionDataDelegate);
|
||||||
if (!protocol) {
|
if (!protocol) {
|
||||||
@@ -809,7 +813,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
^(id<NSURLConnectionDelegate> slf,
|
^(id<NSURLConnectionDelegate> slf,
|
||||||
NSURLConnection* connection,
|
NSURLConnection* connection,
|
||||||
NSData* data) {
|
NSData* data) {
|
||||||
[[FLEXNetworkObserver sharedObserver] connection:connection
|
[[SKFLEXNetworkObserver sharedObserver] connection:connection
|
||||||
didReceiveData:data
|
didReceiveData:data
|
||||||
delegate:slf];
|
delegate:slf];
|
||||||
};
|
};
|
||||||
@@ -829,7 +833,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -839,7 +843,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
+ (void)injectDidFinishLoadingIntoDelegateClass:(Class)cls {
|
+ (void)injectDidFinishLoadingIntoDelegateClass:(Class)cls {
|
||||||
SEL selector = @selector(connectionDidFinishLoading:);
|
SEL selector = @selector(connectionDidFinishLoading:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Protocol* protocol = @protocol(NSURLConnectionDataDelegate);
|
Protocol* protocol = @protocol(NSURLConnectionDataDelegate);
|
||||||
if (!protocol) {
|
if (!protocol) {
|
||||||
@@ -852,9 +856,10 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
typedef void (^NSURLConnectionDidFinishLoadingBlock)(
|
typedef void (^NSURLConnectionDidFinishLoadingBlock)(
|
||||||
id<NSURLConnectionDelegate> slf, NSURLConnection* connection);
|
id<NSURLConnectionDelegate> slf, NSURLConnection* connection);
|
||||||
|
|
||||||
NSURLConnectionDidFinishLoadingBlock undefinedBlock = ^(
|
NSURLConnectionDidFinishLoadingBlock undefinedBlock =
|
||||||
id<NSURLConnectionDelegate> slf, NSURLConnection* connection) {
|
^(id<NSURLConnectionDelegate> slf, NSURLConnection* connection) {
|
||||||
[[FLEXNetworkObserver sharedObserver] connectionDidFinishLoading:connection
|
[[SKFLEXNetworkObserver sharedObserver]
|
||||||
|
connectionDidFinishLoading:connection
|
||||||
delegate:slf];
|
delegate:slf];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -871,7 +876,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -881,7 +886,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
+ (void)injectDidFailWithErrorIntoDelegateClass:(Class)cls {
|
+ (void)injectDidFailWithErrorIntoDelegateClass:(Class)cls {
|
||||||
SEL selector = @selector(connection:didFailWithError:);
|
SEL selector = @selector(connection:didFailWithError:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Protocol* protocol = @protocol(NSURLConnectionDelegate);
|
Protocol* protocol = @protocol(NSURLConnectionDelegate);
|
||||||
struct objc_method_description methodDescription =
|
struct objc_method_description methodDescription =
|
||||||
@@ -896,7 +901,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
^(id<NSURLConnectionDelegate> slf,
|
^(id<NSURLConnectionDelegate> slf,
|
||||||
NSURLConnection* connection,
|
NSURLConnection* connection,
|
||||||
NSError* error) {
|
NSError* error) {
|
||||||
[[FLEXNetworkObserver sharedObserver] connection:connection
|
[[SKFLEXNetworkObserver sharedObserver] connection:connection
|
||||||
didFailWithError:error
|
didFailWithError:error
|
||||||
delegate:slf];
|
delegate:slf];
|
||||||
};
|
};
|
||||||
@@ -916,7 +921,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -928,7 +933,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
SEL selector = @selector
|
SEL selector = @selector
|
||||||
(URLSession:
|
(URLSession:
|
||||||
task:willPerformHTTPRedirection:newRequest:completionHandler:);
|
task:willPerformHTTPRedirection:newRequest:completionHandler:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Protocol* protocol = @protocol(NSURLSessionTaskDelegate);
|
Protocol* protocol = @protocol(NSURLSessionTaskDelegate);
|
||||||
|
|
||||||
@@ -950,7 +955,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
NSHTTPURLResponse* response,
|
NSHTTPURLResponse* response,
|
||||||
NSURLRequest* newRequest,
|
NSURLRequest* newRequest,
|
||||||
void (^completionHandler)(NSURLRequest*)) {
|
void (^completionHandler)(NSURLRequest*)) {
|
||||||
[[FLEXNetworkObserver sharedObserver] URLSession:session
|
[[SKFLEXNetworkObserver sharedObserver] URLSession:session
|
||||||
task:task
|
task:task
|
||||||
willPerformHTTPRedirection:response
|
willPerformHTTPRedirection:response
|
||||||
newRequest:newRequest
|
newRequest:newRequest
|
||||||
@@ -969,7 +974,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
[self sniffWithoutDuplicationForObject:session
|
[self sniffWithoutDuplicationForObject:session
|
||||||
selector:selector
|
selector:selector
|
||||||
sniffingBlock:^{
|
sniffingBlock:^{
|
||||||
[[FLEXNetworkObserver sharedObserver] URLSession:session
|
[[SKFLEXNetworkObserver sharedObserver] URLSession:session
|
||||||
task:task
|
task:task
|
||||||
willPerformHTTPRedirection:response
|
willPerformHTTPRedirection:response
|
||||||
newRequest:newRequest
|
newRequest:newRequest
|
||||||
@@ -989,7 +994,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -999,7 +1004,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
+ (void)injectTaskDidReceiveDataIntoDelegateClass:(Class)cls {
|
+ (void)injectTaskDidReceiveDataIntoDelegateClass:(Class)cls {
|
||||||
SEL selector = @selector(URLSession:dataTask:didReceiveData:);
|
SEL selector = @selector(URLSession:dataTask:didReceiveData:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Protocol* protocol = @protocol(NSURLSessionDataDelegate);
|
Protocol* protocol = @protocol(NSURLSessionDataDelegate);
|
||||||
|
|
||||||
@@ -1017,7 +1022,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
NSURLSession* session,
|
NSURLSession* session,
|
||||||
NSURLSessionDataTask* dataTask,
|
NSURLSessionDataTask* dataTask,
|
||||||
NSData* data) {
|
NSData* data) {
|
||||||
[[FLEXNetworkObserver sharedObserver] URLSession:session
|
[[SKFLEXNetworkObserver sharedObserver] URLSession:session
|
||||||
dataTask:dataTask
|
dataTask:dataTask
|
||||||
didReceiveData:data
|
didReceiveData:data
|
||||||
delegate:slf];
|
delegate:slf];
|
||||||
@@ -1039,7 +1044,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -1049,7 +1054,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
+ (void)injectDataTaskDidBecomeDownloadTaskIntoDelegateClass:(Class)cls {
|
+ (void)injectDataTaskDidBecomeDownloadTaskIntoDelegateClass:(Class)cls {
|
||||||
SEL selector = @selector(URLSession:dataTask:didBecomeDownloadTask:);
|
SEL selector = @selector(URLSession:dataTask:didBecomeDownloadTask:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Protocol* protocol = @protocol(NSURLSessionDataDelegate);
|
Protocol* protocol = @protocol(NSURLSessionDataDelegate);
|
||||||
|
|
||||||
@@ -1067,7 +1072,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
NSURLSession* session,
|
NSURLSession* session,
|
||||||
NSURLSessionDataTask* dataTask,
|
NSURLSessionDataTask* dataTask,
|
||||||
NSURLSessionDownloadTask* downloadTask) {
|
NSURLSessionDownloadTask* downloadTask) {
|
||||||
[[FLEXNetworkObserver sharedObserver] URLSession:session
|
[[SKFLEXNetworkObserver sharedObserver] URLSession:session
|
||||||
dataTask:dataTask
|
dataTask:dataTask
|
||||||
didBecomeDownloadTask:downloadTask
|
didBecomeDownloadTask:downloadTask
|
||||||
delegate:slf];
|
delegate:slf];
|
||||||
@@ -1089,7 +1094,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -1100,7 +1105,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
+ (void)injectTaskDidReceiveResponseIntoDelegateClass:(Class)cls {
|
+ (void)injectTaskDidReceiveResponseIntoDelegateClass:(Class)cls {
|
||||||
SEL selector = @selector(URLSession:
|
SEL selector = @selector(URLSession:
|
||||||
dataTask:didReceiveResponse:completionHandler:);
|
dataTask:didReceiveResponse:completionHandler:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Protocol* protocol = @protocol(NSURLSessionDataDelegate);
|
Protocol* protocol = @protocol(NSURLSessionDataDelegate);
|
||||||
|
|
||||||
@@ -1120,7 +1125,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
NSURLSessionDataTask* dataTask,
|
NSURLSessionDataTask* dataTask,
|
||||||
NSURLResponse* response,
|
NSURLResponse* response,
|
||||||
void (^completionHandler)(NSURLSessionResponseDisposition disposition)) {
|
void (^completionHandler)(NSURLSessionResponseDisposition disposition)) {
|
||||||
[[FLEXNetworkObserver sharedObserver] URLSession:session
|
[[SKFLEXNetworkObserver sharedObserver] URLSession:session
|
||||||
dataTask:dataTask
|
dataTask:dataTask
|
||||||
didReceiveResponse:response
|
didReceiveResponse:response
|
||||||
completionHandler:completionHandler
|
completionHandler:completionHandler
|
||||||
@@ -1137,7 +1142,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
[self sniffWithoutDuplicationForObject:session
|
[self sniffWithoutDuplicationForObject:session
|
||||||
selector:selector
|
selector:selector
|
||||||
sniffingBlock:^{
|
sniffingBlock:^{
|
||||||
[[FLEXNetworkObserver sharedObserver] URLSession:session
|
[[SKFLEXNetworkObserver sharedObserver] URLSession:session
|
||||||
dataTask:dataTask
|
dataTask:dataTask
|
||||||
didReceiveResponse:response
|
didReceiveResponse:response
|
||||||
completionHandler:completionHandler
|
completionHandler:completionHandler
|
||||||
@@ -1156,7 +1161,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -1166,7 +1171,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
+ (void)injectTaskDidCompleteWithErrorIntoDelegateClass:(Class)cls {
|
+ (void)injectTaskDidCompleteWithErrorIntoDelegateClass:(Class)cls {
|
||||||
SEL selector = @selector(URLSession:task:didCompleteWithError:);
|
SEL selector = @selector(URLSession:task:didCompleteWithError:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Protocol* protocol = @protocol(NSURLSessionTaskDelegate);
|
Protocol* protocol = @protocol(NSURLSessionTaskDelegate);
|
||||||
struct objc_method_description methodDescription =
|
struct objc_method_description methodDescription =
|
||||||
@@ -1183,7 +1188,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
NSURLSession* session,
|
NSURLSession* session,
|
||||||
NSURLSessionTask* task,
|
NSURLSessionTask* task,
|
||||||
NSError* error) {
|
NSError* error) {
|
||||||
[[FLEXNetworkObserver sharedObserver] URLSession:session
|
[[SKFLEXNetworkObserver sharedObserver] URLSession:session
|
||||||
task:task
|
task:task
|
||||||
didCompleteWithError:error
|
didCompleteWithError:error
|
||||||
delegate:slf];
|
delegate:slf];
|
||||||
@@ -1205,7 +1210,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -1216,7 +1221,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
// Used for overriding AFNetworking behavior
|
// Used for overriding AFNetworking behavior
|
||||||
+ (void)injectRespondsToSelectorIntoDelegateClass:(Class)cls {
|
+ (void)injectRespondsToSelectorIntoDelegateClass:(Class)cls {
|
||||||
SEL selector = @selector(respondsToSelector:);
|
SEL selector = @selector(respondsToSelector:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
// Protocol *protocol = @protocol(NSURLSessionTaskDelegate);
|
// Protocol *protocol = @protocol(NSURLSessionTaskDelegate);
|
||||||
Method method = class_getInstanceMethod(cls, selector);
|
Method method = class_getInstanceMethod(cls, selector);
|
||||||
@@ -1237,7 +1242,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
return ((BOOL(*)(id, SEL, SEL))objc_msgSend)(slf, swizzledSelector, sel);
|
return ((BOOL(*)(id, SEL, SEL))objc_msgSend)(slf, swizzledSelector, sel);
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -1247,7 +1252,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
|
|
||||||
+ (void)injectDownloadTaskDidFinishDownloadingIntoDelegateClass:(Class)cls {
|
+ (void)injectDownloadTaskDidFinishDownloadingIntoDelegateClass:(Class)cls {
|
||||||
SEL selector = @selector(URLSession:downloadTask:didFinishDownloadingToURL:);
|
SEL selector = @selector(URLSession:downloadTask:didFinishDownloadingToURL:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Protocol* protocol = @protocol(NSURLSessionDownloadDelegate);
|
Protocol* protocol = @protocol(NSURLSessionDownloadDelegate);
|
||||||
struct objc_method_description methodDescription =
|
struct objc_method_description methodDescription =
|
||||||
@@ -1265,7 +1270,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
NSURLSessionDownloadTask* task,
|
NSURLSessionDownloadTask* task,
|
||||||
NSURL* location) {
|
NSURL* location) {
|
||||||
NSData* data = [NSData dataWithContentsOfFile:location.relativePath];
|
NSData* data = [NSData dataWithContentsOfFile:location.relativePath];
|
||||||
[[FLEXNetworkObserver sharedObserver] URLSession:session
|
[[SKFLEXNetworkObserver sharedObserver] URLSession:session
|
||||||
task:task
|
task:task
|
||||||
didFinishDownloadingToURL:location
|
didFinishDownloadingToURL:location
|
||||||
data:data
|
data:data
|
||||||
@@ -1288,7 +1293,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -1300,7 +1305,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
SEL selector = @selector(
|
SEL selector = @selector(
|
||||||
URLSession:
|
URLSession:
|
||||||
downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:);
|
downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:);
|
||||||
SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector];
|
SEL swizzledSelector = [SKFLEXUtility swizzledSelectorForSelector:selector];
|
||||||
|
|
||||||
Protocol* protocol = @protocol(NSURLSessionDownloadDelegate);
|
Protocol* protocol = @protocol(NSURLSessionDownloadDelegate);
|
||||||
struct objc_method_description methodDescription =
|
struct objc_method_description methodDescription =
|
||||||
@@ -1321,7 +1326,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
int64_t bytesWritten,
|
int64_t bytesWritten,
|
||||||
int64_t totalBytesWritten,
|
int64_t totalBytesWritten,
|
||||||
int64_t totalBytesExpectedToWrite) {
|
int64_t totalBytesExpectedToWrite) {
|
||||||
[[FLEXNetworkObserver sharedObserver] URLSession:session
|
[[SKFLEXNetworkObserver sharedObserver] URLSession:session
|
||||||
downloadTask:task
|
downloadTask:task
|
||||||
didWriteData:bytesWritten
|
didWriteData:bytesWritten
|
||||||
totalBytesWritten:totalBytesWritten
|
totalBytesWritten:totalBytesWritten
|
||||||
@@ -1359,7 +1364,7 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
[FLEXUtility replaceImplementationOfSelector:selector
|
[SKFLEXUtility replaceImplementationOfSelector:selector
|
||||||
withSelector:swizzledSelector
|
withSelector:swizzledSelector
|
||||||
forClass:cls
|
forClass:cls
|
||||||
withMethodDescription:methodDescription
|
withMethodDescription:methodDescription
|
||||||
@@ -1367,11 +1372,11 @@ typedef void (^NSURLSessionAsyncCompletion)(
|
|||||||
undefinedBlock:undefinedBlock];
|
undefinedBlock:undefinedBlock];
|
||||||
}
|
}
|
||||||
|
|
||||||
static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
static char const* const kSKFLEXRequestIDKey = "kSKFLEXRequestIDKey";
|
||||||
|
|
||||||
+ (NSString*)requestIDForConnectionOrTask:(id)connectionOrTask {
|
+ (NSString*)requestIDForConnectionOrTask:(id)connectionOrTask {
|
||||||
NSString* requestID =
|
NSString* requestID =
|
||||||
objc_getAssociatedObject(connectionOrTask, kFLEXRequestIDKey);
|
objc_getAssociatedObject(connectionOrTask, kSKFLEXRequestIDKey);
|
||||||
if (!requestID) {
|
if (!requestID) {
|
||||||
requestID = [self nextRequestID];
|
requestID = [self nextRequestID];
|
||||||
[self setRequestID:requestID forConnectionOrTask:connectionOrTask];
|
[self setRequestID:requestID forConnectionOrTask:connectionOrTask];
|
||||||
@@ -1384,7 +1389,7 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
if (connectionOrTask) {
|
if (connectionOrTask) {
|
||||||
objc_setAssociatedObject(
|
objc_setAssociatedObject(
|
||||||
connectionOrTask,
|
connectionOrTask,
|
||||||
kFLEXRequestIDKey,
|
kSKFLEXRequestIDKey,
|
||||||
requestID,
|
requestID,
|
||||||
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
||||||
}
|
}
|
||||||
@@ -1397,7 +1402,7 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
if (self) {
|
if (self) {
|
||||||
self.requestStatesForRequestIDs = [NSMutableDictionary new];
|
self.requestStatesForRequestIDs = [NSMutableDictionary new];
|
||||||
self.queue = dispatch_queue_create(
|
self.queue = dispatch_queue_create(
|
||||||
"com.flex.FLEXNetworkObserver", DISPATCH_QUEUE_SERIAL);
|
"com.skflex.SKFLEXNetworkObserver", DISPATCH_QUEUE_SERIAL);
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@@ -1408,11 +1413,11 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
dispatch_async(_queue, block);
|
dispatch_async(_queue, block);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (FLEXInternalRequestState*)requestStateForRequestID:(NSString*)requestID {
|
- (SKFLEXInternalRequestState*)requestStateForRequestID:(NSString*)requestID {
|
||||||
FLEXInternalRequestState* requestState =
|
SKFLEXInternalRequestState* requestState =
|
||||||
self.requestStatesForRequestIDs[requestID];
|
self.requestStatesForRequestIDs[requestID];
|
||||||
if (!requestState) {
|
if (!requestState) {
|
||||||
requestState = [FLEXInternalRequestState new];
|
requestState = [SKFLEXInternalRequestState new];
|
||||||
[self.requestStatesForRequestIDs setObject:requestState forKey:requestID];
|
[self.requestStatesForRequestIDs setObject:requestState forKey:requestID];
|
||||||
}
|
}
|
||||||
return requestState;
|
return requestState;
|
||||||
@@ -1424,7 +1429,7 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation FLEXNetworkObserver (NSURLConnectionHelpers)
|
@implementation SKFLEXNetworkObserver (NSURLConnectionHelpers)
|
||||||
|
|
||||||
- (void)connection:(NSURLConnection*)connection
|
- (void)connection:(NSURLConnection*)connection
|
||||||
willSendRequest:(NSURLRequest*)request
|
willSendRequest:(NSURLRequest*)request
|
||||||
@@ -1433,16 +1438,16 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
[self performBlock:^{
|
[self performBlock:^{
|
||||||
NSString* requestID =
|
NSString* requestID =
|
||||||
[[self class] requestIDForConnectionOrTask:connection];
|
[[self class] requestIDForConnectionOrTask:connection];
|
||||||
FLEXInternalRequestState* requestState =
|
SKFLEXInternalRequestState* requestState =
|
||||||
[self requestStateForRequestID:requestID];
|
[self requestStateForRequestID:requestID];
|
||||||
requestState.request = request;
|
requestState.request = request;
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordRequestWillBeSentWithRequestID:requestID
|
recordRequestWillBeSentWithRequestID:requestID
|
||||||
request:request
|
request:request
|
||||||
redirectResponse:response];
|
redirectResponse:response];
|
||||||
NSString* mechanism = [NSString
|
NSString* mechanism = [NSString
|
||||||
stringWithFormat:@"NSURLConnection (delegate: %@)", [delegate class]];
|
stringWithFormat:@"NSURLConnection (delegate: %@)", [delegate class]];
|
||||||
[[FLEXNetworkRecorder defaultRecorder] recordMechanism:mechanism
|
[[SKFLEXNetworkRecorder defaultRecorder] recordMechanism:mechanism
|
||||||
forRequestID:requestID];
|
forRequestID:requestID];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
@@ -1453,7 +1458,7 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
[self performBlock:^{
|
[self performBlock:^{
|
||||||
NSString* requestID =
|
NSString* requestID =
|
||||||
[[self class] requestIDForConnectionOrTask:connection];
|
[[self class] requestIDForConnectionOrTask:connection];
|
||||||
FLEXInternalRequestState* requestState =
|
SKFLEXInternalRequestState* requestState =
|
||||||
[self requestStateForRequestID:requestID];
|
[self requestStateForRequestID:requestID];
|
||||||
|
|
||||||
NSMutableData* dataAccumulator = nil;
|
NSMutableData* dataAccumulator = nil;
|
||||||
@@ -1465,7 +1470,7 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
}
|
}
|
||||||
requestState.dataAccumulator = dataAccumulator;
|
requestState.dataAccumulator = dataAccumulator;
|
||||||
|
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordResponseReceivedWithRequestID:requestID
|
recordResponseReceivedWithRequestID:requestID
|
||||||
response:response];
|
response:response];
|
||||||
}];
|
}];
|
||||||
@@ -1479,10 +1484,10 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
[self performBlock:^{
|
[self performBlock:^{
|
||||||
NSString* requestID =
|
NSString* requestID =
|
||||||
[[self class] requestIDForConnectionOrTask:connection];
|
[[self class] requestIDForConnectionOrTask:connection];
|
||||||
FLEXInternalRequestState* requestState =
|
SKFLEXInternalRequestState* requestState =
|
||||||
[self requestStateForRequestID:requestID];
|
[self requestStateForRequestID:requestID];
|
||||||
[requestState.dataAccumulator appendData:data];
|
[requestState.dataAccumulator appendData:data];
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordDataReceivedWithRequestID:requestID
|
recordDataReceivedWithRequestID:requestID
|
||||||
dataLength:data.length];
|
dataLength:data.length];
|
||||||
}];
|
}];
|
||||||
@@ -1493,9 +1498,9 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
[self performBlock:^{
|
[self performBlock:^{
|
||||||
NSString* requestID =
|
NSString* requestID =
|
||||||
[[self class] requestIDForConnectionOrTask:connection];
|
[[self class] requestIDForConnectionOrTask:connection];
|
||||||
FLEXInternalRequestState* requestState =
|
SKFLEXInternalRequestState* requestState =
|
||||||
[self requestStateForRequestID:requestID];
|
[self requestStateForRequestID:requestID];
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordLoadingFinishedWithRequestID:requestID
|
recordLoadingFinishedWithRequestID:requestID
|
||||||
responseBody:requestState.dataAccumulator];
|
responseBody:requestState.dataAccumulator];
|
||||||
[self removeRequestStateForRequestID:requestID];
|
[self removeRequestStateForRequestID:requestID];
|
||||||
@@ -1508,7 +1513,7 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
[self performBlock:^{
|
[self performBlock:^{
|
||||||
NSString* requestID =
|
NSString* requestID =
|
||||||
[[self class] requestIDForConnectionOrTask:connection];
|
[[self class] requestIDForConnectionOrTask:connection];
|
||||||
FLEXInternalRequestState* requestState =
|
SKFLEXInternalRequestState* requestState =
|
||||||
[self requestStateForRequestID:requestID];
|
[self requestStateForRequestID:requestID];
|
||||||
|
|
||||||
// Cancellations can occur prior to the willSendRequest:... NSURLConnection
|
// Cancellations can occur prior to the willSendRequest:... NSURLConnection
|
||||||
@@ -1516,7 +1521,7 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
// record the failure if the recorder already knows about the request
|
// record the failure if the recorder already knows about the request
|
||||||
// through willSendRequest:...
|
// through willSendRequest:...
|
||||||
if (requestState.request) {
|
if (requestState.request) {
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordLoadingFailedWithRequestID:requestID
|
recordLoadingFailedWithRequestID:requestID
|
||||||
error:error];
|
error:error];
|
||||||
}
|
}
|
||||||
@@ -1540,7 +1545,7 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation FLEXNetworkObserver (NSURLSessionTaskHelpers)
|
@implementation SKFLEXNetworkObserver (NSURLSessionTaskHelpers)
|
||||||
|
|
||||||
- (void)URLSession:(NSURLSession*)session
|
- (void)URLSession:(NSURLSession*)session
|
||||||
task:(NSURLSessionTask*)task
|
task:(NSURLSessionTask*)task
|
||||||
@@ -1550,7 +1555,7 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
delegate:(id<NSURLSessionDelegate>)delegate {
|
delegate:(id<NSURLSessionDelegate>)delegate {
|
||||||
[self performBlock:^{
|
[self performBlock:^{
|
||||||
NSString* requestID = [[self class] requestIDForConnectionOrTask:task];
|
NSString* requestID = [[self class] requestIDForConnectionOrTask:task];
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordRequestWillBeSentWithRequestID:requestID
|
recordRequestWillBeSentWithRequestID:requestID
|
||||||
request:request
|
request:request
|
||||||
redirectResponse:response];
|
redirectResponse:response];
|
||||||
@@ -1565,7 +1570,7 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
delegate:(id<NSURLSessionDelegate>)delegate {
|
delegate:(id<NSURLSessionDelegate>)delegate {
|
||||||
[self performBlock:^{
|
[self performBlock:^{
|
||||||
NSString* requestID = [[self class] requestIDForConnectionOrTask:dataTask];
|
NSString* requestID = [[self class] requestIDForConnectionOrTask:dataTask];
|
||||||
FLEXInternalRequestState* requestState =
|
SKFLEXInternalRequestState* requestState =
|
||||||
[self requestStateForRequestID:requestID];
|
[self requestStateForRequestID:requestID];
|
||||||
|
|
||||||
NSMutableData* dataAccumulator = nil;
|
NSMutableData* dataAccumulator = nil;
|
||||||
@@ -1580,10 +1585,10 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
NSString* requestMechanism =
|
NSString* requestMechanism =
|
||||||
[NSString stringWithFormat:@"NSURLSessionDataTask (delegate: %@)",
|
[NSString stringWithFormat:@"NSURLSessionDataTask (delegate: %@)",
|
||||||
[delegate class]];
|
[delegate class]];
|
||||||
[[FLEXNetworkRecorder defaultRecorder] recordMechanism:requestMechanism
|
[[SKFLEXNetworkRecorder defaultRecorder] recordMechanism:requestMechanism
|
||||||
forRequestID:requestID];
|
forRequestID:requestID];
|
||||||
|
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordResponseReceivedWithRequestID:requestID
|
recordResponseReceivedWithRequestID:requestID
|
||||||
response:response];
|
response:response];
|
||||||
}];
|
}];
|
||||||
@@ -1609,12 +1614,12 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
data = [data copy];
|
data = [data copy];
|
||||||
[self performBlock:^{
|
[self performBlock:^{
|
||||||
NSString* requestID = [[self class] requestIDForConnectionOrTask:dataTask];
|
NSString* requestID = [[self class] requestIDForConnectionOrTask:dataTask];
|
||||||
FLEXInternalRequestState* requestState =
|
SKFLEXInternalRequestState* requestState =
|
||||||
[self requestStateForRequestID:requestID];
|
[self requestStateForRequestID:requestID];
|
||||||
|
|
||||||
[requestState.dataAccumulator appendData:data];
|
[requestState.dataAccumulator appendData:data];
|
||||||
|
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordDataReceivedWithRequestID:requestID
|
recordDataReceivedWithRequestID:requestID
|
||||||
dataLength:data.length];
|
dataLength:data.length];
|
||||||
}];
|
}];
|
||||||
@@ -1626,15 +1631,15 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
delegate:(id<NSURLSessionDelegate>)delegate {
|
delegate:(id<NSURLSessionDelegate>)delegate {
|
||||||
[self performBlock:^{
|
[self performBlock:^{
|
||||||
NSString* requestID = [[self class] requestIDForConnectionOrTask:task];
|
NSString* requestID = [[self class] requestIDForConnectionOrTask:task];
|
||||||
FLEXInternalRequestState* requestState =
|
SKFLEXInternalRequestState* requestState =
|
||||||
[self requestStateForRequestID:requestID];
|
[self requestStateForRequestID:requestID];
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordLoadingFailedWithRequestID:requestID
|
recordLoadingFailedWithRequestID:requestID
|
||||||
error:error];
|
error:error];
|
||||||
} else {
|
} else {
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordLoadingFinishedWithRequestID:requestID
|
recordLoadingFinishedWithRequestID:requestID
|
||||||
responseBody:requestState.dataAccumulator];
|
responseBody:requestState.dataAccumulator];
|
||||||
}
|
}
|
||||||
@@ -1652,7 +1657,7 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
[self performBlock:^{
|
[self performBlock:^{
|
||||||
NSString* requestID =
|
NSString* requestID =
|
||||||
[[self class] requestIDForConnectionOrTask:downloadTask];
|
[[self class] requestIDForConnectionOrTask:downloadTask];
|
||||||
FLEXInternalRequestState* requestState =
|
SKFLEXInternalRequestState* requestState =
|
||||||
[self requestStateForRequestID:requestID];
|
[self requestStateForRequestID:requestID];
|
||||||
|
|
||||||
if (!requestState.dataAccumulator) {
|
if (!requestState.dataAccumulator) {
|
||||||
@@ -1661,18 +1666,18 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
: 0;
|
: 0;
|
||||||
requestState.dataAccumulator =
|
requestState.dataAccumulator =
|
||||||
[[NSMutableData alloc] initWithCapacity:unsignedBytesExpectedToWrite];
|
[[NSMutableData alloc] initWithCapacity:unsignedBytesExpectedToWrite];
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordResponseReceivedWithRequestID:requestID
|
recordResponseReceivedWithRequestID:requestID
|
||||||
response:downloadTask.response];
|
response:downloadTask.response];
|
||||||
|
|
||||||
NSString* requestMechanism =
|
NSString* requestMechanism =
|
||||||
[NSString stringWithFormat:@"NSURLSessionDownloadTask (delegate: %@)",
|
[NSString stringWithFormat:@"NSURLSessionDownloadTask (delegate: %@)",
|
||||||
[delegate class]];
|
[delegate class]];
|
||||||
[[FLEXNetworkRecorder defaultRecorder] recordMechanism:requestMechanism
|
[[SKFLEXNetworkRecorder defaultRecorder] recordMechanism:requestMechanism
|
||||||
forRequestID:requestID];
|
forRequestID:requestID];
|
||||||
}
|
}
|
||||||
|
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordDataReceivedWithRequestID:requestID
|
recordDataReceivedWithRequestID:requestID
|
||||||
dataLength:bytesWritten];
|
dataLength:bytesWritten];
|
||||||
}];
|
}];
|
||||||
@@ -1687,7 +1692,7 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
[self performBlock:^{
|
[self performBlock:^{
|
||||||
NSString* requestID =
|
NSString* requestID =
|
||||||
[[self class] requestIDForConnectionOrTask:downloadTask];
|
[[self class] requestIDForConnectionOrTask:downloadTask];
|
||||||
FLEXInternalRequestState* requestState =
|
SKFLEXInternalRequestState* requestState =
|
||||||
[self requestStateForRequestID:requestID];
|
[self requestStateForRequestID:requestID];
|
||||||
[requestState.dataAccumulator appendData:data];
|
[requestState.dataAccumulator appendData:data];
|
||||||
}];
|
}];
|
||||||
@@ -1698,12 +1703,12 @@ static char const* const kFLEXRequestIDKey = "kFLEXRequestIDKey";
|
|||||||
// first resume as the equivalent to connection:willSendRequest:...
|
// first resume as the equivalent to connection:willSendRequest:...
|
||||||
[self performBlock:^{
|
[self performBlock:^{
|
||||||
NSString* requestID = [[self class] requestIDForConnectionOrTask:task];
|
NSString* requestID = [[self class] requestIDForConnectionOrTask:task];
|
||||||
FLEXInternalRequestState* requestState =
|
SKFLEXInternalRequestState* requestState =
|
||||||
[self requestStateForRequestID:requestID];
|
[self requestStateForRequestID:requestID];
|
||||||
if (!requestState.request) {
|
if (!requestState.request) {
|
||||||
requestState.request = task.currentRequest;
|
requestState.request = task.currentRequest;
|
||||||
|
|
||||||
[[FLEXNetworkRecorder defaultRecorder]
|
[[SKFLEXNetworkRecorder defaultRecorder]
|
||||||
recordRequestWillBeSentWithRequestID:requestID
|
recordRequestWillBeSentWithRequestID:requestID
|
||||||
request:task.currentRequest
|
request:task.currentRequest
|
||||||
redirectResponse:nil];
|
redirectResponse:nil];
|
||||||
@@ -49,14 +49,14 @@
|
|||||||
#import <FlipperKitNetworkPlugin/SKNetworkReporter.h>
|
#import <FlipperKitNetworkPlugin/SKNetworkReporter.h>
|
||||||
|
|
||||||
// Notifications posted when the record is updated
|
// Notifications posted when the record is updated
|
||||||
extern NSString* const kFLEXNetworkRecorderNewTransactionNotification;
|
extern NSString* const kSKFLEXNetworkRecorderNewTransactionNotification;
|
||||||
extern NSString* const kFLEXNetworkRecorderTransactionUpdatedNotification;
|
extern NSString* const kSKFLEXNetworkRecorderTransactionUpdatedNotification;
|
||||||
extern NSString* const kFLEXNetworkRecorderUserInfoTransactionKey;
|
extern NSString* const kSKFLEXNetworkRecorderUserInfoTransactionKey;
|
||||||
extern NSString* const kFLEXNetworkRecorderTransactionsClearedNotification;
|
extern NSString* const kSKFLEXNetworkRecorderTransactionsClearedNotification;
|
||||||
|
|
||||||
@class FLEXNetworkTransaction;
|
@class SKFLEXNetworkTransaction;
|
||||||
|
|
||||||
@interface FLEXNetworkRecorder : NSObject
|
@interface SKFLEXNetworkRecorder : NSObject
|
||||||
|
|
||||||
/// In general, it only makes sense to have one recorder for the entire
|
/// In general, it only makes sense to have one recorder for the entire
|
||||||
/// application.
|
/// application.
|
||||||
@@ -76,13 +76,13 @@ extern NSString* const kFLEXNetworkRecorderTransactionsClearedNotification;
|
|||||||
|
|
||||||
// Accessing recorded network activity
|
// Accessing recorded network activity
|
||||||
|
|
||||||
/// Array of FLEXNetworkTransaction objects ordered by start time with the
|
/// Array of SKFLEXNetworkTransaction objects ordered by start time with the
|
||||||
/// newest first.
|
/// newest first.
|
||||||
- (NSArray<FLEXNetworkTransaction*>*)networkTransactions;
|
- (NSArray<SKFLEXNetworkTransaction*>*)networkTransactions;
|
||||||
|
|
||||||
/// The full response data IFF it hasn't been purged due to memory pressure.
|
/// The full response data IFF it hasn't been purged due to memory pressure.
|
||||||
- (NSData*)cachedResponseBodyForTransaction:
|
- (NSData*)cachedResponseBodyForTransaction:
|
||||||
(FLEXNetworkTransaction*)transaction;
|
(SKFLEXNetworkTransaction*)transaction;
|
||||||
|
|
||||||
/// Dumps all network transactions and cached response bodies.
|
/// Dumps all network transactions and cached response bodies.
|
||||||
- (void)clearRecordedActivity;
|
- (void)clearRecordedActivity;
|
||||||
@@ -44,43 +44,43 @@
|
|||||||
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
// POSSIBILITY OF SUCH DAMAGE.
|
// POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#import "FLEXNetworkRecorder.h"
|
#import "SKFLEXNetworkRecorder.h"
|
||||||
|
|
||||||
#import "FLEXNetworkTransaction.h"
|
#import "SKFLEXNetworkTransaction.h"
|
||||||
#import "FLEXUtility.h"
|
#import "SKFLEXUtility.h"
|
||||||
|
|
||||||
NSString* const kFLEXNetworkRecorderNewTransactionNotification =
|
NSString* const kSKFLEXNetworkRecorderNewTransactionNotification =
|
||||||
@"kFLEXNetworkRecorderNewTransactionNotification";
|
@"kSKFLEXNetworkRecorderNewTransactionNotification";
|
||||||
NSString* const kFLEXNetworkRecorderTransactionUpdatedNotification =
|
NSString* const kSKFLEXNetworkRecorderTransactionUpdatedNotification =
|
||||||
@"kFLEXNetworkRecorderTransactionUpdatedNotification";
|
@"kSKFLEXNetworkRecorderTransactionUpdatedNotification";
|
||||||
NSString* const kFLEXNetworkRecorderUserInfoTransactionKey = @"transaction";
|
NSString* const kSKFLEXNetworkRecorderUserInfoTransactionKey = @"transaction";
|
||||||
NSString* const kFLEXNetworkRecorderTransactionsClearedNotification =
|
NSString* const kSKFLEXNetworkRecorderTransactionsClearedNotification =
|
||||||
@"kFLEXNetworkRecorderTransactionsClearedNotification";
|
@"kSKFLEXNetworkRecorderTransactionsClearedNotification";
|
||||||
|
|
||||||
NSString* const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
NSString* const kSKFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
||||||
@"com.flex.responseCacheLimit";
|
@"com.skflex.responseCacheLimit";
|
||||||
|
|
||||||
@interface FLEXNetworkRecorder ()
|
@interface SKFLEXNetworkRecorder ()
|
||||||
|
|
||||||
@property(nonatomic, strong) NSCache* responseCache;
|
@property(nonatomic, strong) NSCache* responseCache;
|
||||||
@property(nonatomic, strong)
|
@property(nonatomic, strong)
|
||||||
NSMutableArray<FLEXNetworkTransaction*>* orderedTransactions;
|
NSMutableArray<SKFLEXNetworkTransaction*>* orderedTransactions;
|
||||||
@property(nonatomic, strong)
|
@property(nonatomic, strong)
|
||||||
NSMutableDictionary<NSString*, FLEXNetworkTransaction*>*
|
NSMutableDictionary<NSString*, SKFLEXNetworkTransaction*>*
|
||||||
networkTransactionsForRequestIdentifiers;
|
networkTransactionsForRequestIdentifiers;
|
||||||
@property(nonatomic, strong) dispatch_queue_t queue;
|
@property(nonatomic, strong) dispatch_queue_t queue;
|
||||||
@property(nonatomic, strong)
|
@property(nonatomic, strong)
|
||||||
NSMutableDictionary<NSString*, NSNumber*>* identifierDict;
|
NSMutableDictionary<NSString*, NSNumber*>* identifierDict;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation FLEXNetworkRecorder
|
@implementation SKFLEXNetworkRecorder
|
||||||
|
|
||||||
- (instancetype)init {
|
- (instancetype)init {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) {
|
if (self) {
|
||||||
_responseCache = [NSCache new];
|
_responseCache = [NSCache new];
|
||||||
NSUInteger responseCacheLimit = [[[NSUserDefaults standardUserDefaults]
|
NSUInteger responseCacheLimit = [[[NSUserDefaults standardUserDefaults]
|
||||||
objectForKey:kFLEXNetworkRecorderResponseCacheLimitDefaultsKey]
|
objectForKey:kSKFLEXNetworkRecorderResponseCacheLimitDefaultsKey]
|
||||||
unsignedIntegerValue];
|
unsignedIntegerValue];
|
||||||
if (responseCacheLimit) {
|
if (responseCacheLimit) {
|
||||||
[_responseCache setTotalCostLimit:responseCacheLimit];
|
[_responseCache setTotalCostLimit:responseCacheLimit];
|
||||||
@@ -95,14 +95,14 @@ NSString* const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
|||||||
|
|
||||||
// Serial queue used because we use mutable objects that are not thread safe
|
// Serial queue used because we use mutable objects that are not thread safe
|
||||||
_queue = dispatch_queue_create(
|
_queue = dispatch_queue_create(
|
||||||
"com.flex.FLEXNetworkRecorder", DISPATCH_QUEUE_SERIAL);
|
"com.skflex.SKFLEXNetworkRecorder", DISPATCH_QUEUE_SERIAL);
|
||||||
_identifierDict = [NSMutableDictionary dictionary];
|
_identifierDict = [NSMutableDictionary dictionary];
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (instancetype)defaultRecorder {
|
+ (instancetype)defaultRecorder {
|
||||||
static FLEXNetworkRecorder* defaultRecorder = nil;
|
static SKFLEXNetworkRecorder* defaultRecorder = nil;
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
defaultRecorder = [[[self class] alloc] init];
|
defaultRecorder = [[[self class] alloc] init];
|
||||||
@@ -124,11 +124,11 @@ NSString* const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
|||||||
[self.responseCache setTotalCostLimit:responseCacheByteLimit];
|
[self.responseCache setTotalCostLimit:responseCacheByteLimit];
|
||||||
[[NSUserDefaults standardUserDefaults]
|
[[NSUserDefaults standardUserDefaults]
|
||||||
setObject:@(responseCacheByteLimit)
|
setObject:@(responseCacheByteLimit)
|
||||||
forKey:kFLEXNetworkRecorderResponseCacheLimitDefaultsKey];
|
forKey:kSKFLEXNetworkRecorderResponseCacheLimitDefaultsKey];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSArray<FLEXNetworkTransaction*>*)networkTransactions {
|
- (NSArray<SKFLEXNetworkTransaction*>*)networkTransactions {
|
||||||
__block NSArray<FLEXNetworkTransaction*>* transactions = nil;
|
__block NSArray<SKFLEXNetworkTransaction*>* transactions = nil;
|
||||||
dispatch_sync(self.queue, ^{
|
dispatch_sync(self.queue, ^{
|
||||||
transactions = [self.orderedTransactions copy];
|
transactions = [self.orderedTransactions copy];
|
||||||
});
|
});
|
||||||
@@ -136,7 +136,7 @@ NSString* const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (NSData*)cachedResponseBodyForTransaction:
|
- (NSData*)cachedResponseBodyForTransaction:
|
||||||
(FLEXNetworkTransaction*)transaction {
|
(SKFLEXNetworkTransaction*)transaction {
|
||||||
return [self.responseCache objectForKey:transaction.requestID];
|
return [self.responseCache objectForKey:transaction.requestID];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,12 +167,12 @@ NSString* const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
|||||||
|
|
||||||
SKRequestInfo* info = [[SKRequestInfo alloc]
|
SKRequestInfo* info = [[SKRequestInfo alloc]
|
||||||
initWithIdentifier:self.identifierDict[requestID].longLongValue
|
initWithIdentifier:self.identifierDict[requestID].longLongValue
|
||||||
timestamp:[NSDate timestamp]
|
timestamp:(uint64_t)[NSDate timestamp]
|
||||||
request:request
|
request:request
|
||||||
data:request.HTTPBody];
|
data:request.HTTPBody];
|
||||||
[self.delegate didObserveRequest:info];
|
[self.delegate didObserveRequest:info];
|
||||||
|
|
||||||
FLEXNetworkTransaction* transaction = [FLEXNetworkTransaction new];
|
SKFLEXNetworkTransaction* transaction = [SKFLEXNetworkTransaction new];
|
||||||
transaction.requestID = requestID;
|
transaction.requestID = requestID;
|
||||||
transaction.request = request;
|
transaction.request = request;
|
||||||
transaction.startTime = requestDate;
|
transaction.startTime = requestDate;
|
||||||
@@ -180,7 +180,8 @@ NSString* const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
|||||||
[self.orderedTransactions insertObject:transaction atIndex:0];
|
[self.orderedTransactions insertObject:transaction atIndex:0];
|
||||||
[self.networkTransactionsForRequestIdentifiers setObject:transaction
|
[self.networkTransactionsForRequestIdentifiers setObject:transaction
|
||||||
forKey:requestID];
|
forKey:requestID];
|
||||||
transaction.transactionState = FLEXNetworkTransactionStateAwaitingResponse;
|
transaction.transactionState =
|
||||||
|
SKFLEXNetworkTransactionStateAwaitingResponse;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,13 +191,13 @@ NSString* const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
|||||||
NSDate* responseDate = [NSDate date];
|
NSDate* responseDate = [NSDate date];
|
||||||
|
|
||||||
dispatch_async(self.queue, ^{
|
dispatch_async(self.queue, ^{
|
||||||
FLEXNetworkTransaction* transaction =
|
SKFLEXNetworkTransaction* transaction =
|
||||||
self.networkTransactionsForRequestIdentifiers[requestID];
|
self.networkTransactionsForRequestIdentifiers[requestID];
|
||||||
if (!transaction) {
|
if (!transaction) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
transaction.response = response;
|
transaction.response = response;
|
||||||
transaction.transactionState = FLEXNetworkTransactionStateReceivingData;
|
transaction.transactionState = SKFLEXNetworkTransactionStateReceivingData;
|
||||||
transaction.latency =
|
transaction.latency =
|
||||||
-[transaction.startTime timeIntervalSinceDate:responseDate];
|
-[transaction.startTime timeIntervalSinceDate:responseDate];
|
||||||
});
|
});
|
||||||
@@ -206,7 +207,7 @@ NSString* const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
|||||||
- (void)recordDataReceivedWithRequestID:(NSString*)requestID
|
- (void)recordDataReceivedWithRequestID:(NSString*)requestID
|
||||||
dataLength:(int64_t)dataLength {
|
dataLength:(int64_t)dataLength {
|
||||||
dispatch_async(self.queue, ^{
|
dispatch_async(self.queue, ^{
|
||||||
FLEXNetworkTransaction* transaction =
|
SKFLEXNetworkTransaction* transaction =
|
||||||
self.networkTransactionsForRequestIdentifiers[requestID];
|
self.networkTransactionsForRequestIdentifiers[requestID];
|
||||||
if (!transaction) {
|
if (!transaction) {
|
||||||
return;
|
return;
|
||||||
@@ -220,17 +221,17 @@ NSString* const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
|||||||
responseBody:(NSData*)responseBody {
|
responseBody:(NSData*)responseBody {
|
||||||
NSDate* finishedDate = [NSDate date];
|
NSDate* finishedDate = [NSDate date];
|
||||||
dispatch_async(self.queue, ^{
|
dispatch_async(self.queue, ^{
|
||||||
FLEXNetworkTransaction* transaction =
|
SKFLEXNetworkTransaction* transaction =
|
||||||
self.networkTransactionsForRequestIdentifiers[requestID];
|
self.networkTransactionsForRequestIdentifiers[requestID];
|
||||||
if (!transaction) {
|
if (!transaction) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
transaction.transactionState = FLEXNetworkTransactionStateFinished;
|
transaction.transactionState = SKFLEXNetworkTransactionStateFinished;
|
||||||
transaction.duration =
|
transaction.duration =
|
||||||
-[transaction.startTime timeIntervalSinceDate:finishedDate];
|
-[transaction.startTime timeIntervalSinceDate:finishedDate];
|
||||||
SKResponseInfo* responseInfo = [[SKResponseInfo alloc]
|
SKResponseInfo* responseInfo = [[SKResponseInfo alloc]
|
||||||
initWithIndentifier:self.identifierDict[requestID].longLongValue
|
initWithIndentifier:self.identifierDict[requestID].longLongValue
|
||||||
timestamp:[NSDate timestamp]
|
timestamp:(uint64_t)[NSDate timestamp]
|
||||||
response:transaction.response
|
response:transaction.response
|
||||||
data:responseBody];
|
data:responseBody];
|
||||||
self.identifierDict[requestID] = nil; // Clear the entry
|
self.identifierDict[requestID] = nil; // Clear the entry
|
||||||
@@ -257,7 +258,7 @@ NSString* const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
|||||||
- (void)recordLoadingFailedWithRequestID:(NSString*)requestID
|
- (void)recordLoadingFailedWithRequestID:(NSString*)requestID
|
||||||
error:(NSError*)error {
|
error:(NSError*)error {
|
||||||
dispatch_async(self.queue, ^{
|
dispatch_async(self.queue, ^{
|
||||||
FLEXNetworkTransaction* transaction =
|
SKFLEXNetworkTransaction* transaction =
|
||||||
self.networkTransactionsForRequestIdentifiers[requestID];
|
self.networkTransactionsForRequestIdentifiers[requestID];
|
||||||
if (!transaction) {
|
if (!transaction) {
|
||||||
return;
|
return;
|
||||||
@@ -265,12 +266,12 @@ NSString* const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
|||||||
|
|
||||||
SKResponseInfo* responseInfo = [[SKResponseInfo alloc]
|
SKResponseInfo* responseInfo = [[SKResponseInfo alloc]
|
||||||
initWithIndentifier:self.identifierDict[requestID].longLongValue
|
initWithIndentifier:self.identifierDict[requestID].longLongValue
|
||||||
timestamp:[NSDate timestamp]
|
timestamp:(uint64_t)[NSDate timestamp]
|
||||||
response:transaction.response
|
response:transaction.response
|
||||||
data:nil];
|
data:nil];
|
||||||
self.identifierDict[requestID] = nil; // Clear the entry
|
self.identifierDict[requestID] = nil; // Clear the entry
|
||||||
[self.delegate didObserveResponse:responseInfo];
|
[self.delegate didObserveResponse:responseInfo];
|
||||||
transaction.transactionState = FLEXNetworkTransactionStateFailed;
|
transaction.transactionState = SKFLEXNetworkTransactionStateFailed;
|
||||||
transaction.duration = -[transaction.startTime timeIntervalSinceNow];
|
transaction.duration = -[transaction.startTime timeIntervalSinceNow];
|
||||||
transaction.error = error;
|
transaction.error = error;
|
||||||
});
|
});
|
||||||
@@ -278,7 +279,7 @@ NSString* const kFLEXNetworkRecorderResponseCacheLimitDefaultsKey =
|
|||||||
|
|
||||||
- (void)recordMechanism:(NSString*)mechanism forRequestID:(NSString*)requestID {
|
- (void)recordMechanism:(NSString*)mechanism forRequestID:(NSString*)requestID {
|
||||||
dispatch_async(self.queue, ^{
|
dispatch_async(self.queue, ^{
|
||||||
FLEXNetworkTransaction* transaction =
|
SKFLEXNetworkTransaction* transaction =
|
||||||
self.networkTransactionsForRequestIdentifiers[requestID];
|
self.networkTransactionsForRequestIdentifiers[requestID];
|
||||||
if (!transaction) {
|
if (!transaction) {
|
||||||
return;
|
return;
|
||||||
@@ -46,22 +46,22 @@
|
|||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
typedef NS_ENUM(NSInteger, FLEXNetworkTransactionState) {
|
typedef NS_ENUM(NSInteger, SKFLEXNetworkTransactionState) {
|
||||||
FLEXNetworkTransactionStateUnstarted,
|
SKFLEXNetworkTransactionStateUnstarted,
|
||||||
FLEXNetworkTransactionStateAwaitingResponse,
|
SKFLEXNetworkTransactionStateAwaitingResponse,
|
||||||
FLEXNetworkTransactionStateReceivingData,
|
SKFLEXNetworkTransactionStateReceivingData,
|
||||||
FLEXNetworkTransactionStateFinished,
|
SKFLEXNetworkTransactionStateFinished,
|
||||||
FLEXNetworkTransactionStateFailed
|
SKFLEXNetworkTransactionStateFailed
|
||||||
};
|
};
|
||||||
|
|
||||||
@interface FLEXNetworkTransaction : NSObject
|
@interface SKFLEXNetworkTransaction : NSObject
|
||||||
|
|
||||||
@property(nonatomic, copy) NSString* requestID;
|
@property(nonatomic, copy) NSString* requestID;
|
||||||
|
|
||||||
@property(nonatomic, strong) NSURLRequest* request;
|
@property(nonatomic, strong) NSURLRequest* request;
|
||||||
@property(nonatomic, strong) NSURLResponse* response;
|
@property(nonatomic, strong) NSURLResponse* response;
|
||||||
@property(nonatomic, copy) NSString* requestMechanism;
|
@property(nonatomic, copy) NSString* requestMechanism;
|
||||||
@property(nonatomic, assign) FLEXNetworkTransactionState transactionState;
|
@property(nonatomic, assign) SKFLEXNetworkTransactionState transactionState;
|
||||||
@property(nonatomic, strong) NSError* error;
|
@property(nonatomic, strong) NSError* error;
|
||||||
|
|
||||||
@property(nonatomic, strong) NSDate* startTime;
|
@property(nonatomic, strong) NSDate* startTime;
|
||||||
@@ -74,6 +74,6 @@ typedef NS_ENUM(NSInteger, FLEXNetworkTransactionState) {
|
|||||||
@property(nonatomic, strong, readonly) NSData* cachedRequestBody;
|
@property(nonatomic, strong, readonly) NSData* cachedRequestBody;
|
||||||
|
|
||||||
+ (NSString*)readableStringFromTransactionState:
|
+ (NSString*)readableStringFromTransactionState:
|
||||||
(FLEXNetworkTransactionState)state;
|
(SKFLEXNetworkTransactionState)state;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
@@ -44,15 +44,15 @@
|
|||||||
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
// POSSIBILITY OF SUCH DAMAGE.
|
// POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#import "FLEXNetworkTransaction.h"
|
#import "SKFLEXNetworkTransaction.h"
|
||||||
|
|
||||||
@interface FLEXNetworkTransaction ()
|
@interface SKFLEXNetworkTransaction ()
|
||||||
|
|
||||||
@property(nonatomic, strong, readwrite) NSData* cachedRequestBody;
|
@property(nonatomic, strong, readwrite) NSData* cachedRequestBody;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation FLEXNetworkTransaction
|
@implementation SKFLEXNetworkTransaction
|
||||||
|
|
||||||
- (NSString*)description {
|
- (NSString*)description {
|
||||||
NSString* description = [super description];
|
NSString* description = [super description];
|
||||||
@@ -94,26 +94,26 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
+ (NSString*)readableStringFromTransactionState:
|
+ (NSString*)readableStringFromTransactionState:
|
||||||
(FLEXNetworkTransactionState)state {
|
(SKFLEXNetworkTransactionState)state {
|
||||||
NSString* readableString = nil;
|
NSString* readableString = nil;
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case FLEXNetworkTransactionStateUnstarted:
|
case SKFLEXNetworkTransactionStateUnstarted:
|
||||||
readableString = @"Unstarted";
|
readableString = @"Unstarted";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLEXNetworkTransactionStateAwaitingResponse:
|
case SKFLEXNetworkTransactionStateAwaitingResponse:
|
||||||
readableString = @"Awaiting Response";
|
readableString = @"Awaiting Response";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLEXNetworkTransactionStateReceivingData:
|
case SKFLEXNetworkTransactionStateReceivingData:
|
||||||
readableString = @"Receiving Data";
|
readableString = @"Receiving Data";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLEXNetworkTransactionStateFinished:
|
case SKFLEXNetworkTransactionStateFinished:
|
||||||
readableString = @"Finished";
|
readableString = @"Finished";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FLEXNetworkTransactionStateFailed:
|
case SKFLEXNetworkTransactionStateFailed:
|
||||||
readableString = @"Failed";
|
readableString = @"Failed";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface FLEXUtility : NSObject
|
@interface SKFLEXUtility : NSObject
|
||||||
|
|
||||||
// Swizzling utilities
|
// Swizzling utilities
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
// POSSIBILITY OF SUCH DAMAGE.
|
// POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#import "FLEXUtility.h"
|
#import "SKFLEXUtility.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <mach/mach.h>
|
#include <mach/mach.h>
|
||||||
@@ -54,11 +54,11 @@
|
|||||||
|
|
||||||
#import <ImageIO/ImageIO.h>
|
#import <ImageIO/ImageIO.h>
|
||||||
|
|
||||||
@implementation FLEXUtility
|
@implementation SKFLEXUtility
|
||||||
|
|
||||||
+ (SEL)swizzledSelectorForSelector:(SEL)selector {
|
+ (SEL)swizzledSelectorForSelector:(SEL)selector {
|
||||||
return NSSelectorFromString(
|
return NSSelectorFromString(
|
||||||
[NSString stringWithFormat:@"_flex_swizzle_%x_%@",
|
[NSString stringWithFormat:@"_skflex_swizzle_%x_%@",
|
||||||
arc4random(),
|
arc4random(),
|
||||||
NSStringFromSelector(selector)]);
|
NSStringFromSelector(selector)]);
|
||||||
}
|
}
|
||||||
@@ -8,8 +8,8 @@
|
|||||||
#if FB_SONARKIT_ENABLED
|
#if FB_SONARKIT_ENABLED
|
||||||
|
|
||||||
#import "SKIOSNetworkAdapter.h"
|
#import "SKIOSNetworkAdapter.h"
|
||||||
#import "FLEXNetworkLib/FLEXNetworkObserver.h"
|
#import "SKFLEXNetworkLib/SKFLEXNetworkObserver.h"
|
||||||
#import "FLEXNetworkLib/FLEXNetworkRecorder.h"
|
#import "SKFLEXNetworkLib/SKFLEXNetworkRecorder.h"
|
||||||
|
|
||||||
@implementation SKIOSNetworkAdapter
|
@implementation SKIOSNetworkAdapter
|
||||||
@synthesize delegate = _delegate;
|
@synthesize delegate = _delegate;
|
||||||
@@ -22,8 +22,8 @@
|
|||||||
|
|
||||||
- (void)setDelegate:(id<SKNetworkReporterDelegate>)delegate {
|
- (void)setDelegate:(id<SKNetworkReporterDelegate>)delegate {
|
||||||
_delegate = delegate;
|
_delegate = delegate;
|
||||||
[FLEXNetworkObserver start];
|
[SKFLEXNetworkObserver start];
|
||||||
[FLEXNetworkRecorder defaultRecorder].delegate = _delegate;
|
[SKFLEXNetworkRecorder defaultRecorder].delegate = _delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
Reference in New Issue
Block a user