|
38 | 38 | #import "OneSignalHelper.h" |
39 | 39 | #import "OSMessagingController.h" |
40 | 40 | #import "SwizzlingForwarder.h" |
| 41 | +#import <objc/runtime.h> |
41 | 42 |
|
42 | 43 | @interface OneSignal (UN_extra) |
43 | 44 | + (void) didRegisterForRemoteNotifications:(UIApplication*)app deviceToken:(NSData*)inDeviceToken; |
@@ -75,7 +76,7 @@ - (void) setOneSignalDelegate:(id<UIApplicationDelegate>)delegate { |
75 | 76 |
|
76 | 77 | Class delegateClass = [delegate class]; |
77 | 78 |
|
78 | | - if (delegate == nil || [swizzledClasses containsObject:delegateClass]) { |
| 79 | + if (delegate == nil || [OneSignalAppDelegate swizzledClassInHeirarchy:delegateClass]) { |
79 | 80 | [self setOneSignalDelegate:delegate]; |
80 | 81 | return; |
81 | 82 | } |
@@ -120,6 +121,22 @@ - (void) setOneSignalDelegate:(id<UIApplicationDelegate>)delegate { |
120 | 121 | [self setOneSignalDelegate:delegate]; |
121 | 122 | } |
122 | 123 |
|
| 124 | ++ (BOOL)swizzledClassInHeirarchy:(Class)delegateClass { |
| 125 | + if ([swizzledClasses containsObject:delegateClass]) { |
| 126 | + [OneSignalLog onesignalLog:ONE_S_LL_VERBOSE message:[NSString stringWithFormat:@"OneSignal already swizzled %@", NSStringFromClass(delegateClass)]]; |
| 127 | + return true; |
| 128 | + } |
| 129 | + Class superClass = class_getSuperclass(delegateClass); |
| 130 | + while(superClass) { |
| 131 | + if ([swizzledClasses containsObject:superClass]) { |
| 132 | + [OneSignalLog onesignalLog:ONE_S_LL_VERBOSE message:[NSString stringWithFormat:@"OneSignal already swizzled %@ in super class: %@", NSStringFromClass(delegateClass), NSStringFromClass(superClass)]]; |
| 133 | + return true; |
| 134 | + } |
| 135 | + superClass = class_getSuperclass(superClass); |
| 136 | + } |
| 137 | + return false; |
| 138 | +} |
| 139 | + |
123 | 140 | + (void)swizzlePreiOS10Methods:(Class)delegateClass { |
124 | 141 | if ([OneSignalHelper isIOSVersionGreaterThanOrEqual:@"10.0"]) |
125 | 142 | return; |
|
0 commit comments