Просмотр исходного кода

Avoid sending obj-c messages to classes when looking for connection/session delegates.

We don’t want classes to receive +initialize if we can avoid it.
Ryan Olson лет назад: 11
Родитель
Сommit
b4c9cbd6a6
1 измененных файлов с 4 добавлено и 15 удалено
  1. 4 15
      Classes/Network/PonyDebugger/FLEXNetworkObserver.m

+ 4 - 15
Classes/Network/PonyDebugger/FLEXNetworkObserver.m

@@ -236,25 +236,14 @@ static NSString *const kFLEXNetworkObserverEnableOnLaunchDefaultsKey = @"com.fle
             for (NSInteger classIndex = 0; classIndex < numClasses; ++classIndex) {
                 Class class = classes[classIndex];
 
-                // We're not interested in swizzling CLTilesManagerClient, and sending any message to the class fires +initialize causing sandbox violations.
-                if (strcmp(class_getName(class), [[@[@"C", @"LT", @"ilesM", @"anage", @"rClient"] componentsJoinedByString:@""] UTF8String]) == 0) {
-                    continue;
-                }
-
-                if (class_getClassMethod(class, @selector(isSubclassOfClass:)) == NULL) {
-                    continue;
-                }
-
-                if (![class isSubclassOfClass:[NSObject class]]) {
-                    continue;
-                }
-
-                if ([class isSubclassOfClass:[FLEXNetworkObserver class]]) {
+                if (class == [FLEXNetworkObserver class]) {
                     continue;
                 }
 
+                // Use the runtime API rather than the methods on NSObject to avoid sending messages to
+                // classes we're not interested in swizzling. Otherwise we hit +initialize on all classes.
                 for (int selectorIndex = 0; selectorIndex < numSelectors; ++selectorIndex) {
-                    if ([class instancesRespondToSelector:selectors[selectorIndex]]) {
+                    if (class_getInstanceMethod(class, selectors[selectorIndex])) {
                         [self injectIntoDelegateClass:class];
                         break;
                     }