diff --git a/Source/Objects/GTLRService.m b/Source/Objects/GTLRService.m index be2147a85..f9f3113a8 100644 --- a/Source/Objects/GTLRService.m +++ b/Source/Objects/GTLRService.m @@ -2578,7 +2578,22 @@ - (void)cancelTicket { id app = [GTMSessionFetcher substituteUIApplication]; if (app) return app; - return (id)[UIApplication sharedApplication]; + static Class applicationClass = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + BOOL isAppExtension = [[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"]; + if (!isAppExtension) { + Class cls = NSClassFromString(@"UIApplication"); + if (cls && [cls respondsToSelector:NSSelectorFromString(@"sharedApplication")]) { + applicationClass = cls; + } + } + }); + + if (applicationClass) { + app = (id)[applicationClass sharedApplication]; + } + return app; } #endif // GTM_BACKGROUND_TASK_FETCHING