#import <objc/runtime.h>
@interface SwizzledDecoder : NSObject
- (void)__validateAllowedClass:(Class)arg1 forKey:(id)arg2 allowingInvocations:(bool)arg3;
@end
@implementation SwizzledDecoder
- (void)__validateAllowedClass:(Class)arg1 forKey:(id)arg2 allowingInvocations:(bool)arg3 {
if ([arg2 isEqualToString: @"collaborationData"]) {
return;
}
return [self __validateAllowedClass: arg1 forKey: arg2 allowingInvocations: arg3];
}
@end
void NSXPCDecoderSwizzle(void) {
// https://nshipster.com/method-swizzling/
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class originalClass = NSClassFromString(@"NSXPCDecoder");
Class swizzledClass = NSClassFromString(@"SwizzledDecoder");
SEL originalSelector = @selector(_validateAllowedClass:forKey:allowingInvocations:);
SEL swizzledSelector = @selector(__validateAllowedClass:forKey:allowingInvocations:);
Method originalMethod = class_getInstanceMethod(originalClass, originalSelector);
Method swizzledMethod = class_getInstanceMethod(swizzledClass, swizzledSelector);
IMP originalImp = method_getImplementation(originalMethod);
IMP swizzledImp = method_getImplementation(swizzledMethod);
class_replaceMethod(originalClass,
swizzledSelector,
originalImp,
method_getTypeEncoding(originalMethod));
class_replaceMethod(originalClass,
originalSelector,
swizzledImp,
method_getTypeEncoding(swizzledMethod));
});
}
@glow this is some really awful code to at least get the ARGeoTrackingConfiguration back on screen displaying live camera capture on a device running 15.4.1.