iphone - puedo - qué hacer si se me olvida la contraseña de una nota en apple
¿Cuál es una forma confiable de bloquear una aplicación iOS? (18)
Quiero probar el informe de fallas de mi aplicación en el campo al colisionarlo deliberadamente cuando el usuario realiza una acción particular que es poco probable que un usuario real haga accidentalmente.
Pero, ¿cuál es una buena manera confiable de bloquear la aplicación que no crea una advertencia en tiempo de compilación?
Editar: tenga en cuenta que muchas respuestas aparentemente obvias a esta pregunta dan como resultado excepciones que quedan atrapadas por Cocoa y, por lo tanto, no provocan el bloqueo de la aplicación.
¿Qué tal un buen desbordamiento de pila viejo :)
- (void)
{
[self ];
}
Agregue un reconocedor de gestos a una vista que reconozca un toque de 10 dedos (5 dedos para iPhone, ya que 10 pueden llenarse un poco). El GR tiene un método asociado que ejecuta cualquiera de las formas surefire antes mencionadas para hacer que su aplicación se cuelgue. La mayoría de los usuarios no van a poner 10 dedos hacia abajo en su aplicación, por lo que está a salvo del usuario general que accidentalmente causa el bloqueo.
Sin embargo, debería poder utilizar algo como Testflight o simplemente implementarlo en dispositivos personales y probarlo en la naturaleza antes de enviarlo a Apple. Tener un bloqueo forzado podría hacer que Apple rechace tu aplicación.
Como todos usamos Clang para iOS, esto es bastante confiable:
__builtin_trap();
Esto tiene el beneficio de que está diseñado exactamente para este propósito, por lo que no debería generar advertencias o errores en el compilador.
Creo que en Swift podrías lanzar fácilmente un error fatal:
func foo() {
fatalError("crash!")
}
De hecho, incluso está destinado a usar esta función en caso de que algo salga mal para hacer que la aplicación se cuelgue.
Para evitar una instrucción if en un caso especial, también puede usar precondition
. Es similar a assert
, por lo que la intención (si se quiere) es bastante clara y no se elimina en la versión final como assert
. Se usa como precondition(myBoolean, "This is a helpful error message for debugging.")
.
Cuando trabajo con RubyMotion, uso esto:
n=Pointer.new (''c'', 1)
n[1000] =''h''
El más popular: bloqueo de selector no reconocido:
NSObject *object = [[NSObject alloc] init];
[object performSelector:@selector(asfd)];
Asegúrese de no tener el método -asdf implementado en esa clase jaja
O índice más allá de la excepción límite:
NSArray * array = [NSArray array];
[array objectAtIndex:5];
Y, por supuesto, kill( getpid(), SIGABRT );
Enviar un mensaje a un objeto desasignado
Iré con: int raise(int sig);
Para obtener más información >man raise
Mi favorito actual:
assert(! "crashing on purpose to test <insert your reason here>");
Un clásico:
kill( getpid(), SIGABRT );
Y algunos pr0n:
*(long*)0 = 0xB16B00B5;
Todos ellos generan bloqueos capturados por mi herramienta de informe de fallos.
Prueba esto:
- (IBAction)Button:(id)sender
{
NSArray *array = [NSArray new];
NSLog(@"%@",[array objectAtIndex:8]);
}
Simplemente mataría el proceso normalmente:
kill(getpid(), SIGKILL);
Entonces, si instala un controlador con señal, también puede manejar el bloqueo, terminar de escribir archivos abiertos y estas cosas.
También puedes presentar una excepción:
[NSException raise:NSInternalInconsistencyException
format:@"I want to test app crashes!."];
en Objective-C usa C directamente para causar un mal acceso
strcpy(0, "bla");
Nota: si bien esto funciona en cualquier sistema que conozco, en una versión futura del tiempo de ejecución de C O del compilador, esto podría no llevar a un bloqueo. ver ¿Es el comportamiento indefinido de desreferencia del puntero nulo en Objective-C? )
(En breve, tendrías que hacer un puente hacia objC para hacer esto)
podría intentar algo como
NSArray* crashingArray = [NSArray arrayWithCapacity:1];
[crashingArray release];
debería bloquearse en un EXC_BAD_ACCESS (podría necesitar liberarlo por segunda vez, pero normalmente debería fallar de esta manera)
una declaración NSLog
incorrecta lo hará
NSLog(@"%@",1);
yo suelo
[self doesNotRecognizeSelector:_cmd];
abort();
causa una terminación anormal ... Eso es un bloqueo.
exit(0);
(debe ... escribir ... 30 caracteres)