mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-07-30 23:20:28 +00:00
79 lines
2.9 KiB
Markdown
79 lines
2.9 KiB
Markdown
## Introduction
|
|
|
|
To catch and send crashes that occur while the app is starting up, the app has to get adjusted a little bit to make this work.
|
|
|
|
The challenges in this scenario are:
|
|
|
|
- Sending crash reports needs to be asynchronous, otherwise it would block the main thread or bad network conditions could make it even worse
|
|
- If the startup takes too long or the main thread is blocking too long, the watchdog process will kill the app
|
|
- The app might crash again before the crash report could have been send
|
|
|
|
|
|
## HowTo
|
|
|
|
1. Setup the SDK
|
|
2. Check if the app crashed in the last session by checking `[BITCrashManager didCrashInLastSession]`
|
|
3. Check if `[BITCrashManager timeintervalCrashInLastSessionOccured]` is below a treshhold that you define. E.g. say your app usually requires 2 seconds for startup, and giving sending a crash report some time, you mighe choose `5` seconds as the treshhold
|
|
4. If the crash happened in that timeframe, delay your app initialization and show an intermediate screen
|
|
5. Implement the `BITCrashManagerDelegate` protocol methods `- (void)crashManagerWillCancelSendingCrashReport:(BITCrashManager *)crashManager`, `- (void)crashManager:(BITCrashManager *)crashManager didFailWithError:(NSError *)error;` and `- (void)crashManagerDidFinishSendingCrashReport:(BITCrashManager *)crashManager;` and continue app initialization
|
|
|
|
## Example
|
|
|
|
@interface BITAppDelegate () <BITCrashManagerDelegate> {}
|
|
@end
|
|
|
|
|
|
@implementation BITAppDelegate
|
|
|
|
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
|
[self.window makeKeyAndVisible];
|
|
|
|
[[BITHockeyManager sharedHockeyManager] configureWithIdentifier:@"<>"
|
|
delegate:nil];
|
|
|
|
// optionally enable logging to get more information about states.
|
|
[BITHockeyManager sharedHockeyManager].debugLogEnabled = YES;
|
|
|
|
[[BITHockeyManager sharedHockeyManager] startManager];
|
|
|
|
if ([self didCrashInLastSessionOnStartup]) {
|
|
// show intermediate UI
|
|
} else {
|
|
[self setupApplication];
|
|
}
|
|
|
|
return YES;
|
|
}
|
|
|
|
- (BOOL)didCrashInLastSessionOnStartup {
|
|
return ([[BITHockeyManager sharedHockeyManager].crashManager didCrashInLastSession] &&
|
|
[[BITHockeyManager sharedHockeyManager].crashManager timeintervalCrashInLastSessionOccured] < 5);
|
|
}
|
|
|
|
- (void)setupApplication {
|
|
// setup your app specific code
|
|
}
|
|
|
|
#pragma mark - BITCrashManagerDelegate
|
|
|
|
- (void)crashManagerWillCancelSendingCrashReport:(BITCrashManager *)crashManager {
|
|
if ([self didCrashInLastSessionOnStartup]) {
|
|
[self setupApplication];
|
|
}
|
|
}
|
|
|
|
- (void)crashManager:(BITCrashManager *)crashManager didFailWithError:(NSError *)error {
|
|
if ([self didCrashInLastSessionOnStartup]) {
|
|
[self setupApplication];
|
|
}
|
|
}
|
|
|
|
- (void)crashManagerDidFinishSendingCrashReport:(BITCrashManager *)crashManager {
|
|
if ([self didCrashInLastSessionOnStartup]) {
|
|
[self setupApplication];
|
|
}
|
|
}
|
|
|
|
@end
|
|
|