Archivos mensuales: Julio 2012

Debug remoto

Estoy probando una aplicación en el iPad que básicamente es una UIWebView que accede a una página de Internet que es la que realmente tiene la aplicación.

En el navegador de escritorio todo funciona perfectamente, pero a la hora de probarlo en el iPad he detectado un comportamiento distinto y necesito saber qué es lo que pasa y por dónde va el flujo de ejecución.

Para ello existen muchas soluciones, bastante complicadas desde mi punto de vista, que pueden servir para ver qué es lo que está pasando como por ejemplo: Enabling Remote Debugging via Private APIs in Mobile Safari.

Pero no me acaba de convencer, así que he optado por otra solución, que leí hace un tiempo y no recuerdo dónde.

La idea es redefinir el objeto console para que realice una petición a un servidor enviando el contenido con el que se le ha invocado, algo así como un log remoto.

Para ello con el siguiente código se puede conseguir:

(function(window, undefined) {
    var console_old = window.console,
        console = {};

    console.log = function() {
        var xhr = new XMLHttpRequest();
        
        xhr.open('POST', '/console.php', true);
        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        xhr.send('log=' + JSON.stringify(arguments[0]));

        console_old.log(arguments[0]);
    };

    console.info = console.log;
    console.warn = console.log;

    window.console = console;

})(window);

El código en el servidor sería el siguiente:

 exec("echo '".$_POST['log']."' >> /tmp/console.log");    

Con todo lo anterior ya podemos poner debugs por el código y ver en tiempo real por dónde está pasando la aplicación y qué problemas tiene.

Ni que decir tiene que aplicar esto a un desarrollo web o aplicación nos puede servir para poder saber qué tipos de errores les da a los usuarios, eso sí habría que mandar un poquito más de información para poder resolver incidencias que les ocurran.