Skip to content

Commit 3a4ae25

Browse files
committed
Do not swizzle a subclass of an already swizzled class
1 parent 4f80efc commit 3a4ae25

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

iOS_SDK/OneSignalSDK/Source/UIApplicationDelegate+OneSignal.m

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#import "OneSignalHelper.h"
3939
#import "OSMessagingController.h"
4040
#import "SwizzlingForwarder.h"
41+
#import <objc/runtime.h>
4142

4243
@interface OneSignal (UN_extra)
4344
+ (void) didRegisterForRemoteNotifications:(UIApplication*)app deviceToken:(NSData*)inDeviceToken;
@@ -75,7 +76,7 @@ - (void) setOneSignalDelegate:(id<UIApplicationDelegate>)delegate {
7576

7677
Class delegateClass = [delegate class];
7778

78-
if (delegate == nil || [swizzledClasses containsObject:delegateClass]) {
79+
if (delegate == nil || [OneSignalAppDelegate swizzledClassInHeirarchy:delegateClass]) {
7980
[self setOneSignalDelegate:delegate];
8081
return;
8182
}
@@ -120,6 +121,22 @@ - (void) setOneSignalDelegate:(id<UIApplicationDelegate>)delegate {
120121
[self setOneSignalDelegate:delegate];
121122
}
122123

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+
123140
+ (void)swizzlePreiOS10Methods:(Class)delegateClass {
124141
if ([OneSignalHelper isIOSVersionGreaterThanOrEqual:@"10.0"])
125142
return;

0 commit comments

Comments
 (0)