From 204020610129b8b24fd8a71945fc38fadbcb779d Mon Sep 17 00:00:00 2001 From: Andreas Linde Date: Wed, 24 Sep 2014 17:06:22 +0200 Subject: [PATCH] Add support for App Extensions - Added simple detection method to check wether the SDK runs in an extension - BITCrashManager will send crash reports without UI (UIAlertViews aren't allowed in extensions anyway) - Don't start BITUpdateManager, BITStoreUpdateManager, BITFeedbackManager and BITAuthenticator in app extensions --- Classes/BITCrashManager.m | 7 +++++-- Classes/BITHockeyHelper.h | 1 + Classes/BITHockeyHelper.m | 11 +++++++++++ Classes/BITHockeyManager.m | 5 +++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Classes/BITCrashManager.m b/Classes/BITCrashManager.m index 02d27f60f2..2908266269 100644 --- a/Classes/BITCrashManager.m +++ b/Classes/BITCrashManager.m @@ -919,7 +919,10 @@ static PLCrashReporterCallbacks plCrashCallbacks = { * - Send pending approved crash reports */ - (void)invokeDelayedProcessing { - if ([[UIApplication sharedApplication] applicationState] != UIApplicationStateActive) return; + if (!bit_isRunningInAppExtension() && + [[UIApplication sharedApplication] applicationState] != UIApplicationStateActive) { + return; + } BITHockeyLog(@"INFO: Start delayed CrashManager processing"); @@ -945,7 +948,7 @@ static PLCrashReporterCallbacks plCrashCallbacks = { _lastCrashFilename = [notApprovedReportFilename lastPathComponent]; } - if (!BITHockeyBundle()) { + if (!BITHockeyBundle() || bit_isRunningInAppExtension()) { [self sendNextCrashReport]; } else if (_crashManagerStatus != BITCrashManagerStatusAutoSend && notApprovedReportFilename) { diff --git a/Classes/BITHockeyHelper.h b/Classes/BITHockeyHelper.h index 8c0dba08ae..f4d8e9faf4 100644 --- a/Classes/BITHockeyHelper.h +++ b/Classes/BITHockeyHelper.h @@ -48,6 +48,7 @@ NSString *bit_UUID(void); NSString *bit_appAnonID(void); BOOL bit_isPreiOS7Environment(void); BOOL bit_isPreiOS8Environment(void); +BOOL bit_isRunningInAppExtension(void); NSString *bit_validAppIconStringFromIcons(NSBundle *resourceBundle, NSArray *icons); NSString *bit_validAppIconFilename(NSBundle *bundle, NSBundle *resourceBundle); diff --git a/Classes/BITHockeyHelper.m b/Classes/BITHockeyHelper.m index d19e8731c6..09a464149c 100644 --- a/Classes/BITHockeyHelper.m +++ b/Classes/BITHockeyHelper.m @@ -260,6 +260,17 @@ BOOL bit_isPreiOS8Environment(void) { return isPreiOS8Environment; } +BOOL bit_isRunningInAppExtension(void) { + static BOOL isRunningInAppExtension = NO; + static dispatch_once_t checkAppExtension; + + dispatch_once(&checkAppExtension, ^{ + isRunningInAppExtension = [[[NSBundle mainBundle] executablePath] containsString:@".appex/"]; + }); + + return isRunningInAppExtension; +} + /** Find a valid app icon filename that points to a proper app icon image diff --git a/Classes/BITHockeyManager.m b/Classes/BITHockeyManager.m index 893148a594..490f04412d 100644 --- a/Classes/BITHockeyManager.m +++ b/Classes/BITHockeyManager.m @@ -242,6 +242,11 @@ bitstadium_info_t bitstadium_library_info __attribute__((section("__TEXT,__bit_h } #endif /* HOCKEYSDK_FEATURE_CRASH_REPORTER */ + // App Extensions can only use BITCrashManager, so ignore all others automatically + if (bit_isRunningInAppExtension()) { + return; + } + #if HOCKEYSDK_FEATURE_STORE_UPDATES // start StoreUpdateManager if ([self isStoreUpdateManagerEnabled]) {