IMP getClasses = imp_implementationWithBlock(^ NSSet * {
static NSMutableSet *classNames = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
classNames = [[NSMutableSet alloc] init];
unsigned int count;
__unsafe_unretained Class *classes = objc_copyClassList(&count);
Protocol *p = NSProtocolFromString(@"GADMAdNetworkAdapter");
for (int i = 0; i < count; i++) {
Class c = classes[i];
if (class_conformsToProtocol(c, p)) {
NSString *className = [NSString stringWithFormat:@"%s", class_getName(c)];
[classNames addObject:className];
}
}
});
return classNames;
});
Class GADMAdNetworkAdapterClass = NSClassFromString(@"GADMAdNetworkAdapter");
Method method = class_getClassMethod(GADMAdNetworkAdapterClass, NSSelectorFromString(@"availableAdapterNames"));
method_setImplementation(method, getClasses);