ios - ¿La aplicación de detección se bloqueó durante la carga/la última vez que se ejecutó?
xcode crittercism (2)
Me gustaría que mi aplicación se restablezca a la configuración estándar si se bloquea durante el inicio. Preferiblemente también si se estrelló la última vez que se ejecutó .
EDITAR: Crittercism tiene un método crittercismDidCrashOnLastLoad
, pero solo maneja el caso de fallar durante la carga. No funcionó correctamente en la versión de la biblioteca que utilicé, pero desde entonces se ha corregido.
Sugerencias?
Haga 2 funciones en su archivo AppDelegate.m
:
void HandleException(NSException *exception) {
NSLog(@"App crashing with exception: %@", exception);
//Save somewhere that your app has crashed.
}
void HandleSignal(int signal) {
NSLog(@"We received a signal: %d", signal);
//Save somewhere that your app has crashed.
}
Luego, en la aplicación -(BOOL)application:didFinishLaunchingWithOptions
antes de que se ponga otra cosa:
NSSetUncaughtExceptionHandler(&HandleException);
struct sigaction signalAction;
memset(&signalAction, 0, sizeof(signalAction));
signalAction.sa_handler = &HandleSignal;
sigaction(SIGABRT, &signalAction, NULL);
sigaction(SIGILL, &signalAction, NULL);
sigaction(SIGBUS, &signalAction, NULL);
Usando Crashlytics, puede configurar CrashlyticsDelegate para detectar un bloqueo en el código Swift u ObjC.
import Fabric
import Crashlytics
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
Crashlytics.sharedInstance().delegate = self
Fabric.with([Crashlytics.self])
return true
}
//MARK: - CrashlyticsDelegate
func crashlyticsDidDetectReport(forLastExecution report: CLSReport, completionHandler: @escaping (Bool) -> Void)
{
completionHandler(true)
}
De documentos Crashlytics
Su delegado debe invocar a completedHandler, pero no necesita hacerlo de forma síncrona, ni siquiera en el hilo principal. Si invoca el Asistente para completar con NO hará que el informe detectado se elimine y no se envíe a Crashlytics. Esto es útil para implementar solicitudes de permiso u otras formas de lógica más complejas sobre el envío de bloqueos.
Asegúrese de que el delegado esté configurado antes de iniciar Crashlytics con startWithAPIKey:… o mediante [Fabric with:…]. De lo contrario, se perderán las devoluciones de llamada de delegado que se producen de forma síncrona durante el inicio.