<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ThXou Web</title>
	<atom:link href="http://www.thxou.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thxou.com</link>
	<description>Ama la sabiduría. Desea el conocimiento.</description>
	<lastBuildDate>Sat, 12 May 2012 23:38:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>iOS: Aprendiendo sobre delegación, protocolos y la clase UIAlertView</title>
		<link>http://www.thxou.com/2012/04/29/aprendiendo-sobre-delegacion-protocolos-y-la-clase-uialertview/</link>
		<comments>http://www.thxou.com/2012/04/29/aprendiendo-sobre-delegacion-protocolos-y-la-clase-uialertview/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 17:25:25 +0000</pubDate>
		<dc:creator>ThXou</dc:creator>
				<category><![CDATA[Aspectos Básicos]]></category>
		<category><![CDATA[Desarrolladores]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programación para iOS]]></category>
		<category><![CDATA[delegation]]></category>
		<category><![CDATA[delgate]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[protocolos]]></category>
		<category><![CDATA[UIAlertView]]></category>

		<guid isPermaLink="false">http://www.thxou.com/?p=2175</guid>
		<description><![CDATA[En esta ocasión he querido hablar sobre la delegacion, un patrón muy común en Cocoa Touch que a muchos principiantes se nos puede atragantar, como ha sido mi caso. Es en si un concepto muy sencillo de entender, pero claro está, dependiendo de quien te lo explique. Espero explicarlo bien para que todos lo puedan [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>En esta ocasión he querido hablar sobre la <code>delegacion</code>, un patrón muy común en Cocoa Touch que a muchos principiantes se nos puede atragantar, como ha sido mi caso. Es en si un concepto muy sencillo de entender, pero claro está, dependiendo de quien te lo explique. Espero explicarlo bien para que todos lo puedan entender, si no es así, decídmelo en los comentarios.</p>
<p>El concepto <code>delegación</code> en Cocoa Touch se refiere especificamente a que tu &#8220;delegas&#8221; a un objeto y lo dotas con la capacidad de responder a ciertos eventos ocurridos en otro objeto en particular. Este concepto es facilmente comprensible si lo miras desde el punto de vista de la necesidad que hay de que &#8220;alguien&#8221; deba recibir y manipular la información de ciertos eventos en ciertos objetos. Un ejemplo claro lo vemos en el GPS. Como podemos saber si el GPS ya encontró nuestra localización?, la información devuelta por el GPS está allí, pero alguien tiene que recibirla y trabajar con ella para poder mostrar esa localización. Pues, ese alguien es el delegado. El proceso de delagación se hace a través de la <strong><em>propiedad</em> <code>delegate</code></strong>. Esta propiedad no es común en todas las clases, solo algunas como <code>UIAccelerometer</code>, <code>UIActionSheet</code>, <code>CLLocationManager</code>, etc. la tienen ya que emiten mensajes para sus eventos. Entonces, asignamos a la <em>propiedad</em> <code>delegate</code> de un objeto la clase que queremos que sea la encargada de manipular los eventos de ese objeto y listo, el delegado ya está preparado para recibirlos y manipularlos.</p>
<p>Los eventos están representados en código a través de funciones (Métodos) las cuales son llamadas cada vez que el evento ocurre. El objeto delegado se encarga de implementar estas funciones para la cantidad de eventos que se envían dependiendo de cada objeto. Cada objeto delegado solo puede recibir mensajes para eventos de un solo objeto en particular, y estos pueden ser más de uno.</p>
<h2>Aplicación práctica</h2>
<p>Well. Siguiendo con mi idea de que todo se aprende mejor si lo llevamos a la práctica, he desarrollado una pequeña aplicación que utiliza la clase <code>UIAlertView</code> para mostrar una ventana como la que vimos en la <a title="Programando notificaciones locales con UILocalNotification" href="http://www.thxou.com/2012/01/31/programando-notificaciones-locales-con-uilocalnotification/">entrada anterior sobre notificaciones locales</a>. Esta ventana tiene unos botones, al presionarlos se altera el texto que hay en una etiqueta (<code>UILabel</code>) que está en la vista principal. Así de sencillo.</p>
<p>La clase <code>UIAlertView</code> nos permite representar una ventana de alerta en una vista en concreto y lo hacemos así:</p>
<pre class="brush:objc; toolbar: true;">    UIAlertView *ventana = [[UIAlertView alloc] initWithTitle:@"Mi Ventana"
                                                      message:@"Aprendiendo sobre delegación en thxou.com"
                                                     delegate:self
                                            cancelButtonTitle:@"Cancelar"
                                            otherButtonTitles:@"Limpiar Etiqueta!", @"Opción 1", @"Opción 2", nil];</pre>
<p>El método <code>initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles</code> se encarga de crear el objeto llamado <code>ventana</code>, que es una instancia de <code>UIAlertView</code>, con una información por defecto. Pues bien, <code>ventana</code> tiene botones y al presionarlos se envía el mensaje <code><a href="http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIAlertViewDelegate_Protocol/UIAlertViewDelegate/UIAlertViewDelegate.html#//apple_ref/occ/intfm/UIAlertViewDelegate/alertView:clickedButtonAtIndex:">alertView:clickedButtonAtIndex:</a>.</code>Cuando este mensaje es enviado se ejecuta el comportamiento por defecto que es simplemente cerrar la ventana de alerta.</p>
<p>Vamos a fijarnos en la etiqueta <code>delegate</code> del método en el código de arriba. Sabemos que pulsar un botón en la ventana es un evento que dispara el mensaje <code><a href="http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIAlertViewDelegate_Protocol/UIAlertViewDelegate/UIAlertViewDelegate.html#//apple_ref/occ/intfm/UIAlertViewDelegate/alertView:clickedButtonAtIndex:">alertView:clickedButtonAtIndex:</a></code>. Bien, al asignar <em>self</em> a la etiqueta <code>delegate</code> le estamos diciendo a <code>ventana</code> cual va a ser el encargado de gestionar sus eventos, en nuestro caso (Y como veréis en la mayoría de los casos) es <em>self</em>, nuestra misma clase <code>ViewController</code>.</p>
<div class="noteclassic">Veremos que en la mayoría de los casos el delegado es asignado de esta manera:</p>
<pre class="brush:objc; toolbar: true;">[objeto setDelegate:self];
//O también
objeto.delegate = self;</pre>
<p>Este código cumple la misma función que en nuestro ejemplo.<br />
</div>
<p>Ya que no queremos que al presionar los botones se ejecute el comportamiento por defecto, nuestra clase <code>ViewController</code> necesita implementar este método disparado por el evento y así le decimos a <code>ventana</code> que hacer cuando se presione un botón.</p>
<pre class="brush:objc; toolbar: true;">- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    switch (buttonIndex) {
        case 1:
            self.mensaje.text = @"";
            break;
        case 2:
            self.mensaje.text = @"Haz seleccionado la opción 1";
            break;
        case 3:
            self.mensaje.text = @"Haz seleccionado la opción 2";
            break;
        default:
            break;
    }
}</pre>
<p>La variable buttonIndex contiene los indices para cada uno de los botones que contiene la ventana de alerta. Así que podemos hacer cosas diferentes dependiendo de el &#8220;caso&#8221;.</p>
<p>Este método, como ya hemos explicado, no es de nuestro delegado, simplemente estamos habilitados para personalizar la respuesta a un evento usando este método, pero no lo creamos nosotros ni definimos la cabecera del método. Por lo tanto el compilador nos va a lanzar una excepción al momento de compilar el código y la aplicación va a petar. Para evitar esto, tenemos que hacer que nuestro delegado &#8220;sea conforme&#8221; al protocolo donde está definido este método (relacionado a un evento) y todos los disparados por la ventana de alerta.</p>
<p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2012/04/grafic-delegation.png"><img class=" wp-image-2185 aligncenter" title="grafic-delegation" src="http://www.thxou.com/wp-content/uploads/2012/04/grafic-delegation.png" alt="" width="463" height="248" /></a></p>
<p style="text-align: center;"><small>Representación del patrón delegate</small></p>
<p><strong>Los protocolos son simples listas de métodos sin implementar</strong>. No son clases, pero si heredan de clases, tampoco podemos hacer instancias de ellos ni crear variables de instancia dentro de ellos. Sus métodos son implementados en las clases que &#8220;son conformes&#8221; a ese protocolo. Un <strong>protocolo delegado</strong> es aquel usado para la delegación, y en nuestro caso vamos a necesitar el protocolo delegado de <code>UIAlertView</code> que implementa el método <code><a href="http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIAlertViewDelegate_Protocol/UIAlertViewDelegate/UIAlertViewDelegate.html#//apple_ref/occ/intfm/UIAlertViewDelegate/alertView:clickedButtonAtIndex:">alertView:clickedButtonAtIndex:</a></code>, y este es: <code>UIAlertViewDelegate</code>. Cuando ocurre un evento en el objeto, se envía el mensaje correspondiente del protocolo delegado.</p>
<p>En un <strong>protocolo delegado</strong> podemos encontrarnos 2 tipos de métodos. Unos manipulan actualizaciones de información, como por ejemplo en el caso del GPS al principio, la localización será diferente siempre que te muevas, por lo tanto el método devolverá información diferente cada vez; Y otros, se envían como respuestas a entradas del usuario, como en nuestro caso, cuando el usuario pulsa un botón de la ventana de alerta. Hay algunos métodos que podrían entrar en una tercera categoría, y es el caso de <code><a href="http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIAlertViewDelegate_Protocol/UIAlertViewDelegate/UIAlertViewDelegate.html#//apple_ref/occ/intfm/UIAlertViewDelegate/alertViewShouldEnableFirstOtherButton:">alertViewShouldEnableFirstOtherButton:</a></code>. En este método, la ventana de alerta pregunta al delegado si tiene que mostrar habilitado o deshabilitado el primero de los botones. La respuesta del delegado puede ser simplemente <code>YES</code> o <code>NO</code>. En nuestro caso he puesto <code>NO</code>, para que veas el comportamiento que tiene este método.</p>
<pre class="brush:objc; toolbar: true;">- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
{
    return NO;
}</pre>
<p>Ya solo nos queda hacer que nuestro delegado &#8220;sea conforme&#8221; a <code>UIAlertViewDelegate</code>. Esto lo hacemos en la cabecera de nuestra clase ViewController.h en la declaración <code>@interface</code>, entre signos de mayor y menor.</p>
<pre class="brush:objc; toolbar: true;">@interface ViewController : UIViewController &lt;UIAlertViewDelegate&gt;
{
@private
    UILabel *mensaje;
}</pre>
<p>He creado una etiqueta <code>UILabel</code> para mostrar mensajes dependiendo de que botón ha sido pulsado llamada: <code>mensaje</code>.</p>
<p>Listo, ya hemos terminado. Yo te recomiendo que analices el código y hagas cambios, muchos cambios, para que veas como funciona la clase y su protocolo delegado. Encontrarás enlaces a la documentación de Apple sobre este tema más abajo. En esta misma aplicación de ejemplo intenta añadir más métodos de <code>UIAlertViewDelegate</code> y así saber como funcionan.</p>
<p>Espero haberte ayudado a comprender este tema. Cualquier duda o sugerencia utiliza los comentarios.</p>
<p><a href="http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIAlertView_Class/UIAlertView/UIAlertView.html">UIAlertView</a> | <a href="http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIAlertViewDelegate_Protocol/UIAlertViewDelegate/UIAlertViewDelegate.html">UIAlertViewDelegate</a></p>
<p style="text-align: center;"><a href="https://www.box.com/embed/3l2bfs3463e1xnj.swf"><img class="alignnone size-full wp-image-2134" title="boton-thxou.com" src="http://www.thxou.com/wp-content/uploads/2011/11/boton-thxou.png" alt="" width="256" height="52" /></a></p>
<div class="shr-publisher-2175"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><h2  class="related_post_title">Entradas relacionadas</h2><ul class="related_post"><li><a href="http://www.thxou.com/2011/11/04/programando-para-ios-patron-de-diseno-mvc/" title="Programando para iOS: Patrón de diseño MVC al detalle">Programando para iOS: Patrón de diseño MVC al detalle</a> (2)</li><li><a href="http://www.thxou.com/2011/09/07/nos-volvemos-un-blog-de-desarrollo-y-programacion/" title="Nos volvemos un blog de desarrollo y programación">Nos volvemos un blog de desarrollo y programación</a> (1)</li><li><a href="http://www.thxou.com/2010/09/06/video-test-de-velocidad-entre-un-iphone-3g-con-ios-4-y-otro-con-ios-4-1/" title="[Video] Test de velocidad entre un iPhone 3G con iOS 4 y otro con iOS 4.1">[Video] Test de velocidad entre un iPhone 3G con iOS 4 y otro con iOS 4.1</a> (2)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.thxou.com/2012/04/29/aprendiendo-sobre-delegacion-protocolos-y-la-clase-uialertview/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iOS: Programando notificaciones locales con UILocalNotification</title>
		<link>http://www.thxou.com/2012/01/31/programando-notificaciones-locales-con-uilocalnotification/</link>
		<comments>http://www.thxou.com/2012/01/31/programando-notificaciones-locales-con-uilocalnotification/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 00:02:05 +0000</pubDate>
		<dc:creator>ThXou</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programación para iOS]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[ios 5.0]]></category>
		<category><![CDATA[notificaciones]]></category>
		<category><![CDATA[notificaciones locales]]></category>
		<category><![CDATA[UILocalNotification]]></category>
		<category><![CDATA[xcode 4]]></category>

		<guid isPermaLink="false">http://www.thxou.com/?p=2153</guid>
		<description><![CDATA[Aquí estamos otra vez con un nuevo tutorial. Esta vez intentaré explicarles de manera teórica y práctica el proceso para programar una notificación local. Es relativamente sencillo de implementar y hay pocas opciones que configurar. La clase UILocalNotification te permite representar notificaciones locales como la de la imagen (similares a las notificaciones Push que trabajan con un [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><img class="alignright" title="notifyme-thxou.com" src="http://www.thxou.com/wp-content/uploads/2012/01/Screen-shot-2012-01-30-at-20.05.49.png" alt="" width="310" height="264" />Aquí estamos otra vez con un nuevo tutorial. Esta vez intentaré explicarles de manera teórica y práctica el proceso para programar una notificación local. Es relativamente sencillo de implementar y hay pocas opciones que configurar. La clase <code>UILocalNotification</code> te permite representar notificaciones locales como la de la imagen (similares a las notificaciones Push que trabajan con un servidor externo, no hablaremos de esto ahora), que tu aplicación podría programar para que sean presentadas a tus usuarios en una fecha y hora determinadas. El sistema operativo es el encargado de gestionar estas notificaciones y permite programar hasta <strong>64 notificaciones</strong> por aplicación. Esta clase adopta el protocolo <code>NSCopying</code>, y una de sus ventajas es que nos permite copiar notificaciones ya programadas, también modificarlas y cancelarlas. Todo en el cuadro de notificación, excepto el color, se puede personalizar al completo: puedes definir un título, el texto de la notificación, cuantos botones va a tener, un sonido personalizado el cual se reproduzca al mostrarse, etc. Todas estas opciones las vamos a aprender a configurar nosotros mismos a continuación con un ejemplo práctico.</p>
<h2>Llevándolo a la práctica</h2>
<p>He creado otra mini-app llamada notifyme que te puedes descargar desde el botón enorme del final de este artículo (Muy recomendado descargarla y seguir el toturial con ella). Lo que vas a aprender con esta app es a <strong>programar una notificación local con configuraciones personalizadas y recibir un texto juntamente con la notificación para mostrarla al usuario</strong>, en este caso, la mostraremos en un cuadro de texto de la pantalla principal, pero también se podría mostrar como una alerta.</p>
<p>Abrimos la aplicación en Xcode y en el <em>Project Navigator </em>podemos ver nuestro controlador de la aplicación: AppDelegate.h y .m, y también el controlador de la vista principal ViewController.h y .m. Abrimos el ViewController.m y nos vamos al método:</p>
<pre class="brush:objc; toolbar: true;">- (void)programarNotificacion
{
    UILocalNotification *localNot = [[UILocalNotification alloc] init];
    localNot.fireDate = [pickerCaducidad date];
    localNot.timeZone = [NSTimeZone defaultTimeZone];

    localNot.alertBody = @"Mi primera notificación";
    localNot.alertAction = @"Mostrar";
    localNot.soundName = UILocalNotificationDefaultSoundName;
    localNot.applicationIconBadgeNumber = 1;

    NSDictionary *userDict = [NSDictionary dictionaryWithObject:textoNotificacion.text forKey:kNotificationTextKey];
    localNot.userInfo = userDict;

    [[UIApplication sharedApplication] scheduleLocalNotification:localNot];
    [localNot release];
}</pre>
<p>Este método es la parte principal de nuestra aplicación ya que es el que va a programar la notificación, así que voy a explicarles las partes que lo componen y su configuración.</p>
<p>Como ya sabemos, para trabajar con clases hay que hacerlo a través de objetos, y estos objetos los creamos a través de instancias de clases, así que lo que hacemos primero es crear una instancia de la clase <code>UILocalNotification</code> llamada &#8220;<em>localNot</em>&#8220;. Esta instancia va a representar esta notificación en la cola de notificaciones del sistema operativo. Bien, este objeto tiene las siguientes propiedades:</p>
<ul>
<li><strong>fireDate:</strong> La fecha y hora exacta en la que deseamos mostrar la notificación.</li>
<li><strong>timeZone:</strong> Trabaja juntamente con fireDate y sirve para que la notificación se muestre adaptada para una zona horaria específica. Nosotros usamos <code>defaultTimeZone</code> que utiliza la zona horaria de la aplicación.</li>
<li><strong>alertBody:</strong> Es el cuerpo del mensaje que se muestra junto con la notificación.</li>
<li><strong>alertAction:</strong> Es el texto del botón de acción. En la imagen dice &#8220;<em>Mostrar</em>&#8221; y al pulsarlo va a abrir la aplicación.</li>
<li><strong>soundName:</strong> El sonido personalizado que quieres que se reproduzca al mostrarse la notificación. <code>UILocalNotificationDefaultSoundName</code> espeficica el sonido por defecto del sistema, pero podemos poner el que nosotros queramos, siempre y cuando dure <strong>30 segundos</strong> y sean de formato <code>aiff</code>, <code>wav</code> o <code>caf.</code></li>
<li><strong>applicationIconBadgeNumber:</strong> Si os habéis fijado, hay aplicaciones que muestran un circulo rojo en la parte superior derecha del icono de la app. A esto se refiere esta propiedad. Es un entero de tipo <code>NSInteger</code> al que podemos asignarle un número.</li>
<li><strong>userInfo:</strong> Esta propiedad es un diccionario tipo <code>NSDictionary</code>, en la que podemos guardar información para luego recuperarla cuando se muestre nuestra app después de presionar el botón de acción.</li>
</ul>
<p>Existen otras propiedades más, aparte de las usadas en esta aplicación, algunas un poco menos importantes pero que te las explico en una línea:</p>
<ul>
<li><strong>repeatInterval:</strong> Sirve para reprogramar la notificación en un intervalo de tiempo específico.</li>
<li><strong>repeatCalendar:</strong> El calendario en el que la aplicación se basará para reprogramar la notificación.</li>
<li><strong>hasAction:</strong> Es un propiedad de tipo <code>BOOL</code>, que especifica si se muestra o no el botón de acción.</li>
<li><strong>alertLaunchImage:</strong> La imagen que se muestra inmediatamente cuando se presiona el botón de acción.</li>
</ul>
<p>Aquí cabe explicar un poco el campo <strong>userInfo</strong>. Yo he creado una constante a la que he llamado <strong><code>kNotificationTextKey</code></strong> para usarla como el texto que quiero que acompañe a la notificación. La he declarado en el AppDelegate.h y luego asignado un string que es el nombre con el que se guardará juntamente con la aplicación. También la he declarado como <strong><code>extern</code></strong>, para que esté disponible fuera de la clase AppDelegate. Como podéis ver, el valor de esta constante es el que escribimos en el UITextField de la interfaz gráfica (textoNotificacion).</p>
<p>Explicado esto, es el momento de <strong>enviar la notificación (nuestro objeto &#8220;<em>localNot</em>&#8220;) al sistema operativo</strong> para que la gestione. Para esto utilizamos un método de la clase <code>UIApplication</code> llamado <code>scheduleLocalNotification:localNot</code>. Este método utiliza el valor del campo <strong>fireDate</strong> para programar la notificación y que se muestre en una fecha y hora concretas. Otro método que también interesa es <code>presentLocalNotificationNow:</code>, el cual muestra la notificación inmediatamente por pantalla.</p>
<p>En este mismo archivo podemos ver el método: <strong><code>-(IBAction)prepararNotificacion:(id)sender</code></strong>. Lo que va a hacer es, a parte de ejecutar el método de arriba, cancelar todas las notificaciones programadas anteriormente utilizando el método de  <code>UIApplication</code> llamado <code>cancelAllLocalNotifications</code>. Si por el contrario, solo queremos hacerlo para una notificación específica utilizaremos <code>cancelLocalNotification:localNot</code>.</p>
<h2>Mostrando la notificación</h2>
<p>Vale, ya hemos programado  la notificación, ahora nos toca recibir y manipular la información que trae consigo la notificación cuando se muestra, así podemos personalizarla más a nuestro gusto. Hay <strong>2 estados</strong> en los que podría encontrarse la aplicación al recibir la notificación: <strong>cuando está visible y cuando está cerrada</strong>. Como ya sabemos, al presionar en el botón de acción (o deslizar el dedo cuando el dispositivo está bloqueado) se abre la aplicación, al abrirse, dependiendo de en cual de estos 2 estados se encuentra, se ejecutan 2 métodos de UIApplication. Estos métodos los podemos encontrar ya implementados en el archivo del controlador principal de la aplicación <strong>AppDelegate.m</strong>. Si la aplicación no está visible se ejecuta el método <code>application:didFinishLaunchingWithOptions:</code>. El siguiente código es lo que he añadido al predeterminado para manipular los datos de la notificación:</p>
<pre class="brush:objc; toolbar: true;">    //Notificaciones
    application.applicationIconBadgeNumber = 0;
    UILocalNotification *notification = [launchOptions objectForKey:
                                         UIApplicationLaunchOptionsLocalNotificationKey];

    if (notification) {
        NSString *reminderText = [notification.userInfo
                                  objectForKey:kNotificationTextKey];
        [_viewController despliegaNotificacion:reminderText];
    }
}</pre>
<p>Nota que el método tiene un parámetro llamado <code>launchOptions</code>. Este parámetro es un diccionario (<code>NSDictionary</code>) que lleva consigo información acerca del porque de que se haya abierto la aplicación. En este caso, cuando uno de los motivos es una notificación, esta se guarda en una constante del sistema designada para esto: <code>UIApplicationLaunchOptionsLocalNotificationKey</code>. Si esta constante contiene la notificación, entonces este ha sido el motivo de su apertura, así que guardamos esta notificación en un puntero que hemos llamado &#8220;<em>notification</em>&#8220;. Si os acordáis, antes guardamos un texto en la constante <strong><code>kNotificationTextKey</code></strong>, por lo que ahora lo recuperamos en el string <code>reminderText</code>.</p>
<p>Si se da el otro caso, en el que la aplicación está visible entonces se ejecuta otro método de <code>UIApplication</code> llamado <code>application:didReceiveLocalNotification:</code>. No se muestran alertas ni se reproducen sonidos, pero si se puede tratar con la información que viene con la notificación:</p>
<pre class="brush:objc; toolbar: true;">- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

	application.applicationIconBadgeNumber = 0;
	NSString *reminderText = [notification.userInfo
                              objectForKey:kNotificationTextKey];
    [_viewController despliegaNotificacion:reminderText];
}</pre>
<p>Aquí hacemos similar al anterior método. Quitamos el <code>badgeNumber</code> y luego recuperamos el texto de la constante <code>kNotificationTextKey</code> en el string <code>reminderText</code>.</p>
<p>No obstante, y para finalizar, la siguiente línea:</p>
<pre class="brush:objc; toolbar: true;">    [_viewController despliegaNotificacion:reminderText];</pre>
<p>Utiliza el objeto <code>_viewController</code>, creado automáticamente por Xcode al crear un nuevo proyecto, para comunicarse con el controlador de nuestra vista principal (ViewController.h y .m), cuya clase tiene implementado el método <strong><code>despliegaNotificacion:</code></strong>, todo esto con el fin de mostrarnos el texto recuperado en <code>reminderText</code> en la pantalla principal.</p>
<p>Pongan en marcha la aplicación para verla en funcionamiento. No temas cambiar el código y probar tus propias ideas. Hazlo, y si sale mal entonces aprende de tus errores. Si bien es cierto este tutorial se pudo haber hecho en menos palabras, he querido detallarlo para que puedan comprender realmente como funciona. Si me dejo algo, o digo algo en lo que me estoy equivocando, agradecería mucho vuestro feedback <img src='http://www.thxou.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Disfruten y compartan este artículo. Hasta otra!.</p>
<p style="text-align: center;"><a href="https://www.box.com/embed/q1q49lmslrxm3k9.swf"><img class="alignnone size-full wp-image-2134" title="boton-thxou.com" src="http://www.thxou.com/wp-content/uploads/2011/11/boton-thxou.png" alt="" width="256" height="52" /></a></p>
<div class="shr-publisher-2153"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><h2  class="related_post_title">Entradas relacionadas</h2><ul class="related_post"><li><a href="http://www.thxou.com/2010/07/24/reparar-el-problema-de-notificaciones-y-youtube-al-hacer-jailbreak-en-ios-4-0-y-ios-4-0-1/" title="Reparar el problema de notificaciones y YouTube al hacer Jailbreak en iOS 4.0 y iOS 4.0.1">Reparar el problema de notificaciones y YouTube al hacer Jailbreak en iOS 4.0 y iOS 4.0.1</a> (2)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.thxou.com/2012/01/31/programando-notificaciones-locales-con-uilocalnotification/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Programando para iOS: Patrón de diseño MVC al detalle</title>
		<link>http://www.thxou.com/2011/11/04/programando-para-ios-patron-de-diseno-mvc/</link>
		<comments>http://www.thxou.com/2011/11/04/programando-para-ios-patron-de-diseno-mvc/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 23:27:39 +0000</pubDate>
		<dc:creator>ThXou</dc:creator>
				<category><![CDATA[Aspectos Básicos]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programación para iOS]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://www.thxou.com/?p=2116</guid>
		<description><![CDATA[Hola denuevo readers!. He querido cambiar un poco el chip y centrarme en lo que más me llena en este mundillo de la informática: La programación. Es por eso que empiezo esta serie de posts dedicados a la programación para diversas plataformas. En la que más me voy a centrar es en iOS para iPhone, [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Hola denuevo readers!. He querido cambiar un poco el chip y centrarme en lo que más me llena en este mundillo de la informática: La programación. Es por eso que empiezo esta serie de posts dedicados a la programación para diversas plataformas. En la que más me voy a centrar es en iOS para iPhone, iPod y iPad, ya que indagando un poco me ha llamado muchísimo la atención. También encontrarán tutoriales de PHP, SQL, JavaScript, Android, etc etc, así que manténganse al tanto del blog que va a estar muy interesante.</p>
<p>Sin más que decir, empecemos. Existen muchos patrones de diseño para organizar el código y la forma de programar aplicaciones. En la programación <strong>para iOS utilizaremos el MVC o Model View Controller (Modelo-Vista-Controlador)</strong>.</p>
<p>He querido empezar con esto porque es un tema que, aunque a muchos os ha sido fácil de entender, a mi no, así que lo haré lo más entendible posible para que no tengan que volver a leer sobre este tema en el futuro.</p>
<p>Principalmente consiste en dividir tu aplicación en estas 3 capas. Cada clase que escribas, botón que pongas en el Interface Builder, o trozo de código que tengas que escribir, va a pertenecer a alguna de estas 3 capas.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-2118" title="MVC" src="http://www.thxou.com/wp-content/uploads/2011/11/MVC.png" alt="MVC-thxou.com" width="430" height="360" /></p>
<p><strong>La Vista</strong> es todo lo que tu puedes ver de la aplicación y con la que el usuario puede interactuar, dentro de esta encontramos los botones, labels, campos de texto, etc; en general, la mayoría de los objetos que son subclases de UIView (También las clases predefinidas por el usuario).</p>
<p><strong>El Modelo</strong> incluye objetos que nos permiten almacenar y manipular datos. Esto no tiene nada que ver con la interfaz de usuario y le dice a la aplicación como llevar a cabo tal o cual tarea, o también que características van a tener ciertos objetos.</p>
<p><strong>El Controlador</strong> es el cerebro de este patrón de diseño. Este va a hacer trabajar a la vista y el modelo en sincronización para que tu puedas ver cosas en la pantalla o para que al presionar un botón, sea efectuada alguna acción.</p>
<p>El MVC se explica mejor con la imagen:</p>
<ul>
<li>El usuario interactua con la aplicación y la vista (U objeto de la vista) a través de la interfaz de usuario.</li>
<li>La vista le envía un mensaje al controlador diciendole por ejemplo que hemos presionado un botón y queremos que esto responda a alguna acción.</li>
<li>El controlador recibe el mensaje y contacta con el modelo para realizar la acción y actualizar la información pertinente.</li>
<li>El controlador recoge la información requerida por la vista pero actualizada por el modelo y por ultimo actualiza la vista con los cambios que  se han hecho en el modelo.</li>
</ul>
<p>Sencillo verdad?. Si te das cuenta el modelo no contacta directamente con el controlador, sino que es este quien manipula e interpreta los datos del modelo, los recoge y procede a actualizar la vista.</p>
<p>Es muy necesario tener en cuenta las siguientes reglas:</p>
<ul>
<li>El controlador puede comunicarse con el Modelo y la Vista directamente.</li>
<li>La capa Modelo y la capa Vista no se pueden comunicar entre si.</li>
<li>La capa Vista no se comunica directamente con el controlador, pero si interactuan de alguna forma, a través de acciones como veremos un poco más adelante en esta entrada.</li>
<li>El Modelo no se puede comunicar directamente con su el Controlador, pero si pueden comunicarse con otras capas Modelo de otros MVC.</li>
<li>Puede existir también comunicación entre distintos Controladores.</li>
</ul>
<p>Si alteras alguna de estas reglas ya no existiría el patrón de diseño MVC.</p>
<h2>Aplicación práctica</h2>
<p>Como todo lo que se aprende a nivel practico se aprende más rápido y mejor, he creado un proyecto muy simple para explicar un poco este patrón de diseño MVC, esta mini aplicación muestra por pantalla 2 textos al presionar un botón. Puedes descargar el proyecto desde <a href="http://www.box.net/shared/26lmhu53g5hnzubajfuh">este enlace</a> y seguir este post juntamente. He utilizado la plantilla View-Based Application (Single View Application en XCode 4.2).</p>
<p>Al abrir el proyecto verás en el panel de más a tu izquierda (<em>Project Navigator</em>: Es importante que te vayas quedando con estos nombres) la lista de los archivos que componen tu proyecto. Lo que salta a simple vista es una clase llamada <strong>MVCAppDelegate.h y .m</strong> (AppDelegate.h si usas XCode 4.2). Esta clase es el controlador de la aplicación y se encarga de cargar la vista por defecto y la aplicación en si. Bien, si abrimos el AppDelegate.h veremos esto si usas XCode 4.2:</p>
<pre class="brush:objc; highlight: [7]; toolbar: true;">#import &lt;UIKit/UIKit.h&gt;

@class ViewController;

@interface AppDelegate : UIResponder &lt;UIApplicationDelegate&gt;

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;

@end</pre>
<p>De momento vamos a dejar de lado algunas cosas de este código porque las explicaré en entradas posteriores.</p>
<p>Ya podemos empezar a identificar objetos. <code>UIWindow</code> es una clase perteneciente al UIKit Framework y que define un objeto ventana (En este caso la variable <code>*window</code>) de la interfaz de usuario (De ahí las iniciales &#8220;UI&#8221; de User Interface). Cada aplicación va a tener por lo general un solo objeto de estos. Por eso este objeto, al ser de la interfaz de usuario, pertenece a la parte de la Vista del MVC.</p>
<p>Si volvemos al <em>Project Navigator</em> veremos una clase llamada &#8220;ViewController&#8221;. Como su mismo nombre lo indica es un controlador, y es para una vista específica, en este caso la vista principal que verás al arrancar la aplicación.<br />
<div class="noteclassic"><br />
<strong>NOTA:</strong> Con respecto a los nombres para los controladores, es muy recomendable que el nombre incluya al final las palabras &#8220;<strong>Controller</strong>&#8221; o &#8220;<strong>View Controller</strong>&#8221; ya que esto te va a permitir organizar mejor tu <em>Project Navigator</em> y ubicar más rápido tus archivos para editarlos. Por lo general (por no decir siempre) te vas a encontrar con proyectos en que los controladores tienen nombres como: ListasViewController o GameController. Si son proyectos muy grandes, vas a agradecer que se nombren los controladores de esta manera, te liarás menos <img src='http://www.thxou.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .<br />
</div><br />
Abrimos el archivo de cabecera de nuestro controlador: <strong>MVCViewController.h</strong>, y veremos el siguiente código:</p>
<pre class="brush:objc; toolbar: true;">#import &lt;UIKit/UIKit.h&gt;

@interface MVCViewController : UIViewController {
	NSMutableArray *textos;

	IBOutlet UILabel *texto1;
	IBOutlet UILabel *texto2;
}

- (IBAction)mostrarTextos:(id)sender;

@end</pre>
<p>El Modelo suele utilizar objetos de colección como los <code>NSArray o NSDictionary</code> o los tipos como <code>NSString o NSNumber</code>, en nuestra aplicación podemos identificar como parte del modelo al objeto <code>*textos</code> de la clase NSMutableArray. También tenemos 2 objetos <code>UILabel</code>que corresponden a la interfaz de usuario y forman parte de la capa Vista. Los nombres de las clases personalizadas para la Vista suelen terminar con la palabra &#8220;<strong>View</strong>&#8221; como por ejemplo: GhaphicView, y eso por la misma razón que para los controladores. Estos también pertenecen a la capa Vista.</p>
<p>La comunicación entre la capa controlador y la capa vista es ciega. Como puedes ver en el código, a los UILabel les precede una macro llamada <code>IBOutlet</code>, esta les permite conectarse con el controlador para así poder enviarle acciones. Los objetos de la vista no tienen control sobre que hacer sobre si, así que envían acciones al controlador cuando algo ocurre, por ejemplo cuando se presiona un botón como en nuestro caso con el método <code>mostrarTextos:sender</code>.</p>
<p>A veces, la capa Vista necesita responder a ciertos eventos como por ejemplo cuando un campo de texto se ha empezado a editar. Como la Vista no tiene control sobre si misma, necesita del controlador para que responda por ella, entonces el controlador se asigna a si mismo como delegado (Veremos estos conceptos más adelante) de la vista (Todo esto a través de protocolos) y si está preparado para responder (Tiene los métodos adecuados correctamente implementados), responde.</p>
<p>Si abrimos el archivo de implementación: <strong>MVCViewController.m</strong>, podremos ver el método <code>mostrarTextos:sender</code>:</p>
<pre class="brush:objc; toolbar: true;">//Método que va a mostrar los textos
- (IBAction)mostrarTextos:(id)sender {
    //Inicializamos en un array los 2 textos a mostrar
    textos = [[NSMutableArray alloc] initWithObjects:@"Texto de ejemplo para MVC", @"MVC mola cuando lo entiendes", nil];

    NSString *txt1 = [textos objectAtIndex:0];
    NSString *txt2 = [textos objectAtIndex:1];

    [texto1 setText:txt1];
    [texto2 setText:txt2];
}</pre>
<p>Al presionarse el botón se ejecuta la acción (En realidad se envía un mensaje y ya veremos esto en otro capítulo) <code>mostrarTextos:sender</code>. En esta acción el controlador toma los datos que tiene disponibles la capa Modelo, en este caso la información cargada en el objeto <code>NSMutableArray</code> llamado <code>textos</code> y entonces asigna los valores recogidos en variables temporales y las devuelve a la vista para que los textos sean mostrados. El objeto <code>UILabel</code> sabe mostrar texto, pero NO SABE que texto mostrar, de igual manera el <code>NSMutableArray</code> sabe almacenar datos, pero NO SABE que datos tiene que almacenar, es por eso que usamos el controlador para esto.</p>
<p>Recuerda respetar las reglas del MVC y así tus aplicaciones estarán bien estructuradas, de manera que cuando compartas tu código, este sea entendible.</p>
<p>Espero haberlos ayudado. Si me ha faltado algo, solo comentadlo. Puedes descargar los archivos del tutorial presionando el botón de abajo.</p>
<p style="text-align: center;"><a href="https://www.box.com/embed/coghsy13019uhor.swf"><img class="alignnone size-full wp-image-2134" title="boton-thxou.com" src="http://www.thxou.com/wp-content/uploads/2011/11/boton-thxou.png" alt="" width="256" height="52" /></a></p>
<div class="shr-publisher-2116"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><h2  class="related_post_title">Entradas relacionadas</h2><ul class="related_post"><li><a href="http://www.thxou.com/2012/04/29/aprendiendo-sobre-delegacion-protocolos-y-la-clase-uialertview/" title="iOS: Aprendiendo sobre delegación, protocolos y la clase UIAlertView">iOS: Aprendiendo sobre delegación, protocolos y la clase UIAlertView</a> (1)</li><li><a href="http://www.thxou.com/2011/09/07/nos-volvemos-un-blog-de-desarrollo-y-programacion/" title="Nos volvemos un blog de desarrollo y programación">Nos volvemos un blog de desarrollo y programación</a> (1)</li><li><a href="http://www.thxou.com/2010/09/06/video-test-de-velocidad-entre-un-iphone-3g-con-ios-4-y-otro-con-ios-4-1/" title="[Video] Test de velocidad entre un iPhone 3G con iOS 4 y otro con iOS 4.1">[Video] Test de velocidad entre un iPhone 3G con iOS 4 y otro con iOS 4.1</a> (2)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.thxou.com/2011/11/04/programando-para-ios-patron-de-diseno-mvc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nos volvemos un blog de desarrollo y programación</title>
		<link>http://www.thxou.com/2011/09/07/nos-volvemos-un-blog-de-desarrollo-y-programacion/</link>
		<comments>http://www.thxou.com/2011/09/07/nos-volvemos-un-blog-de-desarrollo-y-programacion/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 21:02:05 +0000</pubDate>
		<dc:creator>ThXou</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://www.thxou.com/?p=2106</guid>
		<description><![CDATA[Hola a todos los que me seguíais anteriormente. Debido a mi, en incremento, interés por la programación para iPhone, he decidido cambiar el tema del blog a programación. Compartiré con vosotros mis inquietudes, conocimientos, código de ejemplo y mucho más. Espero vuestros comentarios, peticiones, tutoriales hechos por vosotros y todo lo relacionado con la programación [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p style="text-align: center;"><img class="alignnone size-full wp-image-2107" title="sdk-image" src="http://www.thxou.com/wp-content/uploads/2011/09/sdk_hero.png" alt="" width="196" height="187" /></p>
<p style="text-align: center;">
<p>Hola a todos los que me seguíais anteriormente. Debido a mi, en incremento, interés por la programación para iPhone, he decidido cambiar el tema del blog a programación. Compartiré con vosotros mis inquietudes, conocimientos, código de ejemplo y mucho más.</p>
<p>Espero vuestros comentarios, peticiones, tutoriales hechos por vosotros y todo lo relacionado con la programación para iPhone, iPod Touch y iPad.</p>
<p>Muy pronto el primer tutorial.</p>
<p>ThXou.</p>
<p style="text-align: center;">
<p style="text-align: center;">
<div class="shr-publisher-2106"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><h2  class="related_post_title">Entradas relacionadas</h2><ul class="related_post"><li><a href="http://www.thxou.com/2010/10/12/guia-t-windows-hacer-jailbreak-utilizando-limera1n-al-iphone-3gs-ipod-touch-3g-ipad-iphone-4-ipod-touch-4g-con-ios-4-0-4-1/" title="GUIA-T | [Windows] Hacer Jailbreak utilizando Limera1n al iPhone 3GS, iPod Touch 3G, iPad, iPhone 4, iPod Touch 4G con iOS 4.0-4.1">GUIA-T | [Windows] Hacer Jailbreak utilizando Limera1n al iPhone 3GS, iPod Touch 3G, iPad, iPhone 4, iPod Touch 4G con iOS 4.0-4.1</a> (3)</li><li><a href="http://www.thxou.com/2010/09/07/configurar-una-cuenta-de-hotmail-en-tu-iphone-y-ipad/" title="Configurar una cuenta de Hotmail en tu iPhone y iPad">Configurar una cuenta de Hotmail en tu iPhone y iPad</a> (4)</li><li><a href="http://www.thxou.com/2010/09/03/twitter-para-iphone-se-actualiza-y-se-hace-compatible-con-el-ipad/" title="Twitter para iPhone se actualiza y se hace compatible con el iPad">Twitter para iPhone se actualiza y se hace compatible con el iPad</a> (0)</li><li><a href="http://www.thxou.com/2010/07/07/video-tira-dardos-con-tu-iphone-hacia-una-diana-en-tu-ipad/" title="[Video] Tira dardos con tu iPhone hacia una diana en tu iPad">[Video] Tira dardos con tu iPhone hacia una diana en tu iPad</a> (0)</li><li><a href="http://www.thxou.com/2010/07/06/aplicaciones-de-la-app-store-con-un/" title="Aplicaciones de la App Store con un &#8220;+&#8221;">Aplicaciones de la App Store con un &#8220;+&#8221;</a> (0)</li><li><a href="http://www.thxou.com/2012/04/29/aprendiendo-sobre-delegacion-protocolos-y-la-clase-uialertview/" title="iOS: Aprendiendo sobre delegación, protocolos y la clase UIAlertView">iOS: Aprendiendo sobre delegación, protocolos y la clase UIAlertView</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.thxou.com/2011/09/07/nos-volvemos-un-blog-de-desarrollo-y-programacion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FBUploader: Sube fotos a Facebook desde la aplicación Fotos</title>
		<link>http://www.thxou.com/2011/05/10/fbuploader-sube-fotos-a-facebook-desde-la-aplicacion-fotos/</link>
		<comments>http://www.thxou.com/2011/05/10/fbuploader-sube-fotos-a-facebook-desde-la-aplicacion-fotos/#comments</comments>
		<pubDate>Tue, 10 May 2011 14:15:41 +0000</pubDate>
		<dc:creator>ThXou</dc:creator>
				<category><![CDATA[Cydia]]></category>
		<category><![CDATA[Jailbreak]]></category>
		<category><![CDATA[Personaliza tu iPhone]]></category>
		<category><![CDATA[bigboss]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[pbuploader]]></category>
		<category><![CDATA[tweak]]></category>

		<guid isPermaLink="false">http://www.thxou.com/?p=1923</guid>
		<description><![CDATA[Descargar: Cydia Store (Jailbreak necesario) &#124; Precio: $1.99 FBUploader es un Tweak que nos va a permitir subir a Facebook nuestras fotos, directamente desde la aplicación nativa de fotos, añadiendo la opción &#8220;Facebook&#8220;, al menú emergente disponible desde la barra de herramientas de cada foto. Además de subir la foto a Facebook, también te permite [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p style="text-align: center;">Descargar: Cydia Store (<a href="http://www.thxou.com/jailbreaks-and-unlocks/">Jailbreak necesario</a>) | Precio: $1.99</p>
<p><strong>FBUploader</strong> es un Tweak que nos va a permitir <strong>subir a Facebook nuestras fotos, directamente desde la aplicación nativa de fotos</strong>, añadiendo la opción &#8220;<strong>Facebook</strong>&#8220;, al menú emergente disponible desde la barra de herramientas de cada foto.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-1926" title="fbuploader-thxou.com" src="http://www.thxou.com/wp-content/uploads/2011/05/fbuploader21-e1305036579640.png" alt="" width="200" height="300" /> <img class="alignnone size-full wp-image-1925" title="fbuploader2-thxou.com" src="http://www.thxou.com/wp-content/uploads/2011/05/fbuploader2-e1305036620859.png" alt="" width="200" height="300" /></p>
<p>Además de subir la foto a Facebook, también te permite personalizar un texto para que sea enviado junto con la foto, similar a como lo hacemos mediante Web. De esta manera ya no tienes que abrir la aplicación de Facebook para compartir.</p>
<p>Puedes encontrarlo en el respositorio de <strong>BigBoss</strong> de Cydia Store a <strong>$1.99</strong>.</p>
<table style="background-color: #a33f03;" border="0" align="center">
<tbody>
<tr>
<td>Podéis hacer vuestras preguntas acerca del Jailbreak y las herramientas desde <a href="http://www.todojailbreak.ya.st" target="_blank">TodoJailbreak</a>, nuestra nueva Web.</td>
</tr>
</tbody>
</table>
<div class="shr-publisher-1923"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><h2  class="related_post_title">Entradas relacionadas</h2><ul class="related_post"><li><a href="http://www.thxou.com/2010/10/17/hrdenabler-habilita-la-funcion-hdr-en-el-ipod-touch-4g/" title="HRDEnabler: Habilita la función HDR en el iPod Touch 4G">HRDEnabler: Habilita la función HDR en el iPod Touch 4G</a> (0)</li><li><a href="http://www.thxou.com/2010/10/17/gpower-mas-opciones-al-apagar-el-iphone/" title="GPower: Más opciones al apagar el iPhone">GPower: Más opciones al apagar el iPhone</a> (0)</li><li><a href="http://www.thxou.com/2010/10/14/switchermod-anade-funciones-a-la-barra-de-multitarea/" title="SwitcherMod: Añade funciones a la barra de multitarea">SwitcherMod: Añade funciones a la barra de multitarea</a> (0)</li><li><a href="http://www.thxou.com/2010/10/14/liveclock-anima-el-icono-de-la-aplicacion-reloj-del-iphone/" title="LiveClock: Aníma el icono de la aplicación reloj del iPhone">LiveClock: Aníma el icono de la aplicación reloj del iPhone</a> (0)</li><li><a href="http://www.thxou.com/2010/09/13/direct-closer-anade-un/" title="Direct Closer: Añade automáticamente el icono para cerrar aplicaciones en multitarea">Direct Closer: Añade automáticamente el icono para cerrar aplicaciones en multitarea</a> (0)</li><li><a href="http://www.thxou.com/2010/09/06/chpwn-que-aplicaciones-y-tweaks-te-gustaria-ver-en-cydia/" title="Chpwn: Que aplicaciones y Tweaks te gustaría ver en Cydia?">Chpwn: Que aplicaciones y Tweaks te gustaría ver en Cydia?</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.thxou.com/2011/05/10/fbuploader-sube-fotos-a-facebook-desde-la-aplicacion-fotos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Convertir M4a a MP3 usando iTunes</title>
		<link>http://www.thxou.com/2011/05/09/convertir-m4a-a-mp3-usando-itunes/</link>
		<comments>http://www.thxou.com/2011/05/09/convertir-m4a-a-mp3-usando-itunes/#comments</comments>
		<pubDate>Mon, 09 May 2011 21:19:39 +0000</pubDate>
		<dc:creator>ThXou</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[convertir]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[m4a]]></category>
		<category><![CDATA[mp3]]></category>

		<guid isPermaLink="false">http://www.thxou.com/?p=1918</guid>
		<description><![CDATA[Buenas, me he pasado la tarde buscando una aplicación para Mac que me permita convertir un archivo en M4a a MP3, cuando la solución estaba justo en mis narices, y es que aunque no lo sabía, es posible crear con usando iTunes, una versión de MP3 de cualquier canción que tengas en la biblioteca de [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Buenas, me he pasado la tarde buscando una aplicación para Mac que me permita convertir un archivo en M4a a MP3, cuando la solución estaba justo en mis narices, y es que aunque no lo sabía, <strong>es posible crear con usando iTunes, una versión de MP3 de cualquier canción que tengas en la biblioteca</strong> de iTunes. Y no solo eso, sino también versiones en AAC, AIFF y WAV.</p>
<p>Sincillísimo. Abrimos iTunes y vamos a las preferencias (Command+,):</p>
<p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2011/05/m4a-to-mp3-convert-itunes.jpg"><img class="alignnone size-full wp-image-1920" title="m4a-to-mp3-convert-itunes-thxou.com" src="http://www.thxou.com/wp-content/uploads/2011/05/m4a-to-mp3-convert-itunes.jpg" alt="" width="548" height="264" /></a></p>
<p style="text-align: center;">
<p>Al abrirse esta ventana, vamos a la pesataña &#8220;<strong>General</strong>&#8221; y en la zona donde habla de que hacer al insertar un CD, le damos clic en el botón &#8220;<strong>Ajustes de importación&#8230;</strong>&#8220;. Inmediatamente se abrirá otra ventana, entonces vamos a la lista desplegable &#8220;<strong>Importar Usando</strong>&#8221; y seleccionamos el formato al que queremos convertir, en este caso, MP3. Luego clicamos en Aceptar y luego otra vez en Aceptar.</p>
<p style="text-align: center;"><img class="size-full wp-image-1919 aligncenter" title="convert-m4a-to-mp3-thxou.com" src="http://www.thxou.com/wp-content/uploads/2011/05/convert-m4a-to-mp3-with-itunes.jpg" alt="" width="545" height="314" /></p>
<p style="text-align: center;">
<p>Ahora nos vamos a la biblioteca de iTunes y hacemos clic derecho sobre la canción que deseamos convertir y sorpresa!!, el menú desplegable ya no muestra &#8220;Crear Versión de AAC&#8221;, sino &#8220;<strong>Crear Versión de MP3</strong>&#8220;. Hacemos clic en esa opción y listo, ya tenemos nuestra versión de esa canción en MP3. Es tu tarea tratar con ella.</p>
<p>Desconozco si en Windows también se puede hacer, pero estoy 99,9% que si. Probadlo.</p>
<p style="text-align: right;">Vía | <a href="http://osxdaily.com/2009/12/03/convert-m4a-to-mp3/">OSXDaily</a></p>
<div class="shr-publisher-1918"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><h2  class="related_post_title">Entradas relacionadas</h2><ul class="related_post"><li><a href="http://www.thxou.com/2010/08/30/cydia-synchronicity-utiliza-el-iphone-mientras-sincronizas-con-itunes/" title="[Cydia] Synchronicity: Utiliza el iPhone mientras sincronizas con iTunes">[Cydia] Synchronicity: Utiliza el iPhone mientras sincronizas con iTunes</a> (0)</li><li><a href="http://www.thxou.com/2010/07/22/devolver-una-aplicacion-comprada-en-la-apple-store/" title="Devolver una aplicación comprada en la Apple Store">Devolver una aplicación comprada en la Apple Store</a> (0)</li><li><a href="http://www.thxou.com/2010/07/20/itunes-se-actualiza-a-la-version-9-2-1/" title="iTunes se actualiza a la versión 9.2.1">iTunes se actualiza a la versión 9.2.1</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.thxou.com/2011/05/09/convertir-m4a-a-mp3-usando-itunes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[Mac] Shift it: Redimenciona tus ventanas con atajos del teclado</title>
		<link>http://www.thxou.com/2011/05/08/mac-shift-it-redimenciona-tus-ventanas-con-atajos-del-teclado/</link>
		<comments>http://www.thxou.com/2011/05/08/mac-shift-it-redimenciona-tus-ventanas-con-atajos-del-teclado/#comments</comments>
		<pubDate>Sat, 07 May 2011 22:55:42 +0000</pubDate>
		<dc:creator>ThXou</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[redimencionar]]></category>
		<category><![CDATA[shitit]]></category>
		<category><![CDATA[utilidades]]></category>
		<category><![CDATA[ventanas]]></category>

		<guid isPermaLink="false">http://www.thxou.com/?p=1903</guid>
		<description><![CDATA[Para aquellos que como yo, son fans de hacerse la vida más fácil a la hora de controlar el ordenador y utilizais en cuanto podéis los atajos del teclado, aquí les traigo una utilidad para Mac que nos permite redimencionar nuestras ventanas activas a travez de atajos del teclado. Además de ser gratuita, es muy [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2011/05/Captura-de-pantalla-2011-05-07-a-las-21.26.28.png"><img class="alignnone size-full wp-image-1904" title="shiftit-thxou.com" src="http://www.thxou.com/wp-content/uploads/2011/05/Captura-de-pantalla-2011-05-07-a-las-21.26.28.png" alt="" width="464" height="358" /></a></p>
<p style="text-align: center;">
<p>Para aquellos que como yo, son fans de hacerse la vida más fácil a la hora de controlar el ordenador y utilizais en cuanto podéis los atajos del teclado, aquí les traigo una <strong>utilidad para Mac que nos permite redimencionar nuestras ventanas activas a travez de atajos del teclado</strong>.</p>
<p>Además de ser gratuita, es muy simple de utilizar y de momento solo tiene unas pocas opciones de redimencionado. Los atajos del teclado son personalizables. La pega es que algunos de sus atajos, como el de las preferencias, tienen conflictos con otras aplicaciones.</p>
<p>Con respecto a su instalación:</p>
<ul>
<li>Tenéis que descargar la ultima versión de la aplicación desde <a href="https://github.com/fikovnik/ShiftIt">este enlace</a>.</li>
</ul>
<p>El proceso de instalación es a través de compilar el codigo fuente desde Xcode, proceso un poco incómodo si nos estás familiarizado con el. Si lo compilas con Xcode, una vez hecho esto, ve a la carpeta de &#8220;<strong>shiftit</strong>&#8221; y luego entra en la ruta &#8220;<strong>/scripts/build/Debug</strong>&#8221; y copia el ejecutable dentro de tu carpeta de aplicaciones y listo.</p>
<p style="text-align: right;">Vía | <a href="http://www.applesfera.com/aplicaciones/shif-it-gestor-de-posicion-y-tamano-de-las-ventanas-de-tus-aplicaciones-mediante-atajos-de-teclado">Applesfera</a></p>
<div class="shr-publisher-1903"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><h2  class="related_post_title">Entradas relacionadas</h2><ul class="related_post"><li><a href="http://www.thxou.com/2010/10/13/mac-saber-de-donde-fue-descargado-un-fichero/" title="[Mac] Saber de donde fue descargado un fichero">[Mac] Saber de donde fue descargado un fichero</a> (1)</li><li><a href="http://www.thxou.com/2010/10/07/permute-convierte-diversos-formatos-de-audio-y-video/" title="Permute: Convierte diversos formatos de audio y video">Permute: Convierte diversos formatos de audio y video</a> (1)</li><li><a href="http://www.thxou.com/2010/07/19/mac-black-hole-limpia-los-rastros-que-dejas-al-usar-tu-mac/" title="[Mac] Black Hole: Limpia los rastros que dejas al usar tu Mac">[Mac] Black Hole: Limpia los rastros que dejas al usar tu Mac</a> (0)</li><li><a href="http://www.thxou.com/2010/07/19/mac-simulador-de-n64-para-mac/" title="[Mac] Simulador de N64 para Mac">[Mac] Simulador de N64 para Mac</a> (0)</li><li><a href="http://www.thxou.com/2010/05/12/mac-ver-los-archivos-del-iphoneipod-touchipad-desde-el-finder/" title="[Mac] Ver los archivos del iPhone/iPod Touch/iPad desde el Finder">[Mac] Ver los archivos del iPhone/iPod Touch/iPad desde el Finder</a> (1)</li><li><a href="http://www.thxou.com/2010/03/29/tu-iphone-como-memoria-usb/" title="Tu iPhone como memoria USB">Tu iPhone como memoria USB</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.thxou.com/2011/05/08/mac-shift-it-redimenciona-tus-ventanas-con-atajos-del-teclado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Locktopus: Bloquea tus aplicaciones con contraseña</title>
		<link>http://www.thxou.com/2010/10/26/locktopus-bloquea-tus-aplicaciones-con-contrasena/</link>
		<comments>http://www.thxou.com/2010/10/26/locktopus-bloquea-tus-aplicaciones-con-contrasena/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 19:25:16 +0000</pubDate>
		<dc:creator>ThXou</dc:creator>
				<category><![CDATA[Cydia]]></category>
		<category><![CDATA[Jailbreak]]></category>
		<category><![CDATA[Personaliza tu iPhone]]></category>
		<category><![CDATA[Aplicaciónes]]></category>
		<category><![CDATA[bloquear]]></category>
		<category><![CDATA[contraseña]]></category>
		<category><![CDATA[LockDown]]></category>
		<category><![CDATA[locktopus]]></category>

		<guid isPermaLink="false">http://www.thxou.com/?p=1850</guid>
		<description><![CDATA[Descargar: Cydia Store (Jailbreak necesario) &#124; Precio: $2 Locktopus es un tweak de cydia que te permite proteger con una contraseña cualquiera de las aplicaciones del Springboard. Basta con mantener presionado cualquier icono, como para eliminarlo o moverlo, y saldrá el icono de un candado en la parte inferior izquierda. Al presionarlo ya tendrás bloqueada [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p style="text-align: center;">Descargar: Cydia Store (<a href="http://www.thxou.com/jailbreaks-and-unlocks/">Jailbreak necesario</a>) | Precio: $2</p>
<p><strong>Locktopus</strong> es un tweak de cydia que te permite <strong>proteger con una contraseña cualquiera de las aplicaciones del Springboard</strong>. Basta con mantener presionado cualquier icono, como para eliminarlo o moverlo, y saldrá el icono de un candado en la parte inferior izquierda. Al presionarlo ya tendrás bloqueada la aplicación.</p>
<p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2010/10/IMG_2739-160x240.png"><img class="alignnone size-full wp-image-1851" title="locktopus-thxou.com" src="http://www.thxou.com/wp-content/uploads/2010/10/IMG_2739-160x240.png" alt="" width="160" height="240" /></a> <a href="http://www.thxou.com/wp-content/uploads/2010/10/IMG_2740-160x240.png"><img class="alignnone size-full wp-image-1852" title="locktopus-thxou.com" src="http://www.thxou.com/wp-content/uploads/2010/10/IMG_2740-160x240.png" alt="" width="160" height="240" /></a></p>
<p>Este tweak no instala ningún icono en la pantalla de inicio, pero si un apartado en los ajustes del dispositivo desde el que puedes cambiar la contraseña para desbloquear las aplicaciones, que por defecto es: &#8220;<strong><em>password</em></strong>&#8220;. Es compatible con los firmwares <strong>3.x y 4.x</strong> y una gran alternativa a su similar &#8220;Lockdown&#8221;.</p>
<p>Si haz perdido la contraseña, entra en cydia y reinstala la aplicación, así restablecerás la contraseña por defecto.</p>
<p>Puedes encontrarla en el <strong>repositorio de BigBoss</strong>.</p>
<div class="shr-publisher-1850"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><h2  class="related_post_title">Entradas relacionadas</h2><ul class="related_post"><li><a href="http://www.thxou.com/2010/09/22/lsrotator-gira-el-iphone-y-pon-el-lockscreen-en-horizontal/" title="LSRotator: Gira el iPhone y pon el LockScreen en horizontal">LSRotator: Gira el iPhone y pon el LockScreen en horizontal</a> (1)</li><li><a href="http://www.thxou.com/2010/09/10/quicklock-2-bloquea-el-iphone-pulsando-un-icono-del-springboard/" title="QuickLock 2: Bloquea el iPhone pulsando un icono del SpringBoard">QuickLock 2: Bloquea el iPhone pulsando un icono del SpringBoard</a> (0)</li><li><a href="http://www.thxou.com/2010/09/07/iconsupport-solucion-de-cydia-para-reparar-el-problema-de-itunes-10-y-el-iphone-4/" title="IconSupport: Solución de Cydia para reparar el problema de iTunes 10 y el iPhone 4 ">IconSupport: Solución de Cydia para reparar el problema de iTunes 10 y el iPhone 4 </a> (0)</li><li><a href="http://www.thxou.com/2010/09/06/solucion-al-problema-con-itunes-10-que-se-cerraba-al-entrar-en-aplicaciones/" title="Solución al problema con iTunes 10 que se cerraba al entrar en &#8220;aplicaciones&#8221;">Solución al problema con iTunes 10 que se cerraba al entrar en &#8220;aplicaciones&#8221;</a> (0)</li><li><a href="http://www.thxou.com/2010/09/03/remove-background-cierra-todas-las-aplicaciones-abiertas-de-golpe/" title="Remove background: cierra todas las aplicaciones abiertas de golpe">Remove background: cierra todas las aplicaciones abiertas de golpe</a> (2)</li><li><a href="http://www.thxou.com/2010/07/26/mac-appwall-screensaver-un-muro-de-aplicaciones-animado-como-salvapantallasp/" title="[Mac] AppWall Screensaver: Un muro de aplicaciones animado como salvapantallasP">[Mac] AppWall Screensaver: Un muro de aplicaciones animado como salvapantallasP</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.thxou.com/2010/10/26/locktopus-bloquea-tus-aplicaciones-con-contrasena/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Mac] GUIA-T &#124; Hacer Jailbreak en iOS 4.1 con el iOS personalizado creado con PwnageTool 4.1</title>
		<link>http://www.thxou.com/2010/10/20/mac-guia-t-hacer-jailbreak-en-ios-4-1-con-el-ios-personalizado-creado-con-pwnagetool-4-1/</link>
		<comments>http://www.thxou.com/2010/10/20/mac-guia-t-hacer-jailbreak-en-ios-4-1-con-el-ios-personalizado-creado-con-pwnagetool-4-1/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 18:09:54 +0000</pubDate>
		<dc:creator>ThXou</dc:creator>
				<category><![CDATA[Cydia]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone 3G]]></category>
		<category><![CDATA[iPhone 3GS]]></category>
		<category><![CDATA[iPhone 4]]></category>
		<category><![CDATA[Jailbreak]]></category>
		<category><![CDATA[Liberar/desbloquear]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Personaliza tu iPhone]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[4.1]]></category>
		<category><![CDATA[baseband]]></category>
		<category><![CDATA[desbloquear]]></category>
		<category><![CDATA[ios 4.1]]></category>
		<category><![CDATA[pwnagetool]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[ultrasn0w]]></category>
		<category><![CDATA[unlock]]></category>

		<guid isPermaLink="false">http://www.thxou.com/?p=1813</guid>
		<description><![CDATA[Aquí les dejamos esta completa GUIA-T acerca de como utilizar PwnageTool para hacer Jailbreak al iOS 4.1 en casi todos los dispositivos creando un firmware personalizado y restaurándolo posteriormente con iTunes. Dispositivos compatibles: AppleTV 2G. iPad (firmware 3.2.2). iPod touch 4G. iPod touch 3G. iPhone4. iPhone 3GS. iPhone 3G. Vamos a ello. Primero tenemos que [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Aquí les dejamos esta completa GUIA-T acerca de como utilizar PwnageTool para hacer Jailbreak al iOS 4.1 en casi todos los dispositivos creando un firmware personalizado y restaurándolo posteriormente con iTunes.</p>
<div class="notewarning">Utiliza este tutorial bajo los requisitos requeridos. No somos responsables del mal uso del tutorial y/o las herramientas.</div>
<p><div class="noteimportant"><strong>Importante:</strong></p>
<ul>
<li>Por defecto la opción de hactivation está habilitada. Si eres de los que tienen un iPhone con la SIM original,<strong> asegúrate de desactivar esta opción</strong>.</li>
<li>Funciona también en el Apple TV 2G, pero de momento solo se puede acceder por SSH y ejecutar comandos de consola dentro del dispositivo.</li>
<li>Luego de restaurar tu firmware personalizado, podrás <a href="http://www.thxou.com/2010/08/30/liberar-el-iphone-4-iphone-3gs-y-iphone-3g-hasta-el-ios-4-0-2-con-ultrasn0w-1-1-1/">utilizar Ultrasn0w</a> para liberar/desbloquear tu iPhone.</div></li>
</ul>
<p>Dispositivos compatibles:</p>
<ul>
<li>AppleTV 2G.</li>
<li>iPad (firmware 3.2.2).</li>
<li>iPod touch 4G.</li>
<li>iPod touch 3G.</li>
<li>iPhone4.</li>
<li>iPhone 3GS.</li>
<li>iPhone 3G.</li>
</ul>
<p>Vamos a ello. Primero tenemos que descargar:</p>
<ul>
<li><a href="http://blog.iphone-dev.org/post/1359246784/20102010-event">PwnageTool 4.1 para Mac</a>.</li>
<li><a href="http://www.thxou.com/firmwares/">Firmware del iOS 4.1</a> correspondiente a tu dispositivo.</li>
</ul>
<p><strong><span style="color: #99cc00;">PASO 1.</span></strong> Creamos una carpeta en el escritorio y metemos en ella el firmware que nos hemos descargado y PwnageTool (Monta el .dmg y arrastra el icono hacia la carpeta).</p>
<p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2010/10/1.png"><img class="alignnone size-full wp-image-1814" title="1" src="http://www.thxou.com/wp-content/uploads/2010/10/1.png" alt="" width="500" height="347" /></a></p>
<p><strong><span style="color: #99cc00;">PASO 2.</span></strong> Abrimos PwnageTool y damos en aceptar en la advertencia que nos aparece. En la segunda nos advierte sobre si nuestra tarjeta SIM es original o no. En el menú de la parte superior seleccionamos &#8220;<strong>Expert Mode</strong>&#8220;. Luego tiense que seleccionar la imagen correspondiente a tu dispositivo y seguidamente presionar en la flecha para seguir.</p>
<p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2010/10/3.png"><img class="alignnone size-full wp-image-1815" title="3" src="http://www.thxou.com/wp-content/uploads/2010/10/3.png" alt="" width="450" height="401" /></a></p>
<p><strong><span style="color: #99cc00;">PASO 3.</span></strong> En la siguiente pantalla haz clic en el botón &#8220;<strong>Browse for IPSW&#8230;</strong>&#8221; y en la ventana que aparece, selecciona el firmware que haz descargado a la carpeta de tu escritorio. Haz clic en &#8220;Open&#8221; y luego continúa.</p>
<p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2010/10/4.png"><img class="alignnone size-full wp-image-1816" title="4" src="http://www.thxou.com/wp-content/uploads/2010/10/4.png" alt="" width="500" height="446" /></a></p>
<p><strong><span style="color: #99cc00;">PASO 4.</span></strong> En esta pantalla selecciona la opción &#8220;<strong>General</strong>&#8221; y luego continúa para seguir configurando.</p>
<p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2010/10/51.png"><img class="alignnone size-full wp-image-1822" title="51" src="http://www.thxou.com/wp-content/uploads/2010/10/51.png" alt="" width="500" height="446" /></a></p>
<p><strong><span style="color: #99cc00;">PASO 5.</span></strong> En la siguientes pantallas podrás configurar si deseas Activar el iPhone. Este proceso engaña a iTunes para que te permita utilizar una SIM que no es oficial. Si tienes una oficial, <strong>NO MANTENGAS SELECCIONADA LA OPCION</strong>.</p>
<p>También, en los iPhone 3G puedes habilitar la multitarea, la batería con porcentaje y el fondo de pantalla personalizado si deseas.</p>
<p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2010/10/6.png"><img class="alignnone size-full wp-image-1817" title="6" src="http://www.thxou.com/wp-content/uploads/2010/10/6.png" alt="" width="500" height="446" /></a></p>
<p><strong><span style="color: #99cc00;">PASO 6.</span></strong> Desde esta pantalla puedes personalizar como quieres que esté Cydia. Puedes agregarle sources para que estén instaladas por defecto cuando ya tengas el Jailbreak hecho. También puedes agregar paquetes personalizados .deb que deseas tener instalados por defecto.</p>
<p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2010/10/7.png"><img class="alignnone size-full wp-image-1819" title="7" src="http://www.thxou.com/wp-content/uploads/2010/10/7.png" alt="" width="500" height="446" /></a></p>
<p><strong><span style="color: #99cc00;">PASO 7.</span></strong> Ahora ya que haz terminado de configurarlo todo, haz clic en &#8220;<strong>Build</strong>&#8221; para empezar a crear el firmware personalizado. Cuando te aparezca la pantalla de guardar, guardalo en la carpeta que creamos al principio.</p>
<p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2010/10/8.png"><img class="alignnone size-full wp-image-1820" title="8" src="http://www.thxou.com/wp-content/uploads/2010/10/8.png" alt="" width="500" height="446" /></a></p>
<p><span style="color: #99cc00;"><strong>PASO 8.</strong></span> Una vez construido el firmware personalizado, se te <strong>pedirá conectar el dispositivo al Mac</strong> para ponerlo en modo DFU. Sigue las instrucciones que pone en pantalla:</p>
<ol>
<li>Mantén pulsado el botón de encendido y el de Inicio durante 10 segundos.</li>
<li>Pasado ese tiempo, suelta el botón de encendido y sigue presionando el botón Inicio durante 10 segundos.</li>
<li>Una vez que tengas el iPhone en modo DFU, PwnageTool lo detectará y le pedirá que abra iTunes.</li>
</ol>
<p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2010/10/951.png"><img class="alignnone size-full wp-image-1825" title="951" src="http://www.thxou.com/wp-content/uploads/2010/10/951.png" alt="" width="490" height="212" /></a></p>
<p><strong><span style="color: #99cc00;">PASO 9.</span></strong> Este es el último paso, al abrir iTunes, este debería detectar tu iPhone en modo DFU. Das aceptar en la venta que aparece y seguidamente procedes a restaurar el firmware personalizado que tienes en la carpeta que creamos al principio.</p>
<p style="text-align: center;"><a href="http://www.thxou.com/wp-content/uploads/2010/10/961.png"><img class="alignnone size-full wp-image-1826" title="961" src="http://www.thxou.com/wp-content/uploads/2010/10/961.png" alt="" width="500" height="243" /></a></p>
<p>Luego de que el proceso de restauración termine se reiniciará y al volver ya tendremos nuestro dispositivo con iOS 4.1 y Jailbreak instalado.</p>
<div class="noteclassic">Luego de haber hecho Jailbreak, puedes seguir <strong><a href="http://www.thxou.com/2010/08/30/liberar-el-iphone-4-iphone-3gs-y-iphone-3g-hasta-el-ios-4-0-2-con-ultrasn0w-1-1-1/">este tutorial</a></strong> para liberar/desbloquear tu iPhone y dejarlo libre de compañías móviles.</div>
<p>Cualquier duda escríbela en los comentarios.</p>
<p style="text-align: right;"><a href="http://www.actualidadiphone.com/2010/10/20/tutorial-para-instalar-ios-4-1-con-pwnagetool/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+ActualidadIphone+(Actualidad+iPhone)">Vía</a></p>
<p style="text-align: center;">
<div class="shr-publisher-1813"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><h2  class="related_post_title">Entradas relacionadas</h2><ul class="related_post"><li><a href="http://www.thxou.com/2010/10/13/guia-t-windows-como-hacer-jailbreak-en-ios-4-0-ios-4-1-utilizando-greenpois0n-paso-a-paso/" title="GUIA-T | [Windows] Como hacer Jailbreak en iOS 4.0-iOS 4.1 utilizando Greenpois0n paso a paso">GUIA-T | [Windows] Como hacer Jailbreak en iOS 4.0-iOS 4.1 utilizando Greenpois0n paso a paso</a> (3)</li><li><a href="http://www.thxou.com/2010/09/24/guia-t-windows-hacer-jailbreak-al-ios-4-1-con-sn0wbreeze-2/" title="GUIA-T | [Windows] Hacer Jailbreak al iOS 4.1 con Sn0wbreeze 2">GUIA-T | [Windows] Hacer Jailbreak al iOS 4.1 con Sn0wbreeze 2</a> (8)</li><li><a href="http://www.thxou.com/2010/09/21/guia-t-mac-hacer-jailbreak-al-iphone-3g-y-ipod-touch-2g-en-ios-4-1-con-redsn0w-0-9-6b1/" title="GUIA-T | [Mac] Hacer Jailbreak al iPhone 3G y iPod Touch 2G en iOS 4.1 con Redsn0w 0.9.6b1">GUIA-T | [Mac] Hacer Jailbreak al iPhone 3G y iPod Touch 2G en iOS 4.1 con Redsn0w 0.9.6b1</a> (0)</li><li><a href="http://www.thxou.com/2010/08/30/liberar-el-iphone-4-iphone-3gs-y-iphone-3g-hasta-el-ios-4-0-2-con-ultrasn0w-1-1-1/" title="Liberar el iPhone 4, iPhone 3GS y iPhone 3G hasta el iOS 4.0.2 con Ultrasn0w 1.1-1">Liberar el iPhone 4, iPhone 3GS y iPhone 3G hasta el iOS 4.0.2 con Ultrasn0w 1.1-1</a> (16)</li><li><a href="http://www.thxou.com/2010/07/16/liberar-el-iphone-3g-y-iphone-3gs-ios-3-x-hasta-ios-4-0-1-con-ultrasn0w-0-93/" title="Liberar el iPhone 3G y iPhone 3GS iOS 3.x hasta iOS 4.0.1 con Ultrasn0w 0.93">Liberar el iPhone 3G y iPhone 3GS iOS 3.x hasta iOS 4.0.1 con Ultrasn0w 0.93</a> (4)</li><li><a href="http://www.thxou.com/2010/10/12/guia-t-windows-hacer-jailbreak-utilizando-limera1n-al-iphone-3gs-ipod-touch-3g-ipad-iphone-4-ipod-touch-4g-con-ios-4-0-4-1/" title="GUIA-T | [Windows] Hacer Jailbreak utilizando Limera1n al iPhone 3GS, iPod Touch 3G, iPad, iPhone 4, iPod Touch 4G con iOS 4.0-4.1">GUIA-T | [Windows] Hacer Jailbreak utilizando Limera1n al iPhone 3GS, iPod Touch 3G, iPad, iPhone 4, iPod Touch 4G con iOS 4.0-4.1</a> (3)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.thxou.com/2010/10/20/mac-guia-t-hacer-jailbreak-en-ios-4-1-con-el-ios-personalizado-creado-con-pwnagetool-4-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Video] FullScreen for Safari: Navega con Safari Mobile a pantalla completa</title>
		<link>http://www.thxou.com/2010/10/18/video-fullscreen-for-safari-navega-con-safari-mobile-a-pantalla-completa/</link>
		<comments>http://www.thxou.com/2010/10/18/video-fullscreen-for-safari-navega-con-safari-mobile-a-pantalla-completa/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 19:47:21 +0000</pubDate>
		<dc:creator>ThXou</dc:creator>
				<category><![CDATA[Cydia]]></category>
		<category><![CDATA[Jailbreak]]></category>
		<category><![CDATA[Personaliza tu iPhone]]></category>
		<category><![CDATA[bigboss]]></category>
		<category><![CDATA[fullscreen]]></category>
		<category><![CDATA[safari mobile]]></category>

		<guid isPermaLink="false">http://www.thxou.com/?p=1775</guid>
		<description><![CDATA[Descargar: Cydia Store (Jailbreak necesario) &#124; Precio: $1.49 FullScreen for Safari es un tweak de Cydia que nos permite navegar por Safari Mobile a pantalla completa. Además de esto, también incorpora características que aprovechan la capacidad multitátil del iPhone para controlar algunas funciones como ir hacia atrás, abrir una nueva pestaña, recargar la página y [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p style="text-align: center;">Descargar: Cydia Store (<a href="http://www.thxou.com/jailbreaks-and-unlocks/">Jailbreak necesario</a>) | Precio: $1.49</p>
<p><strong>FullScreen for Safari</strong> es un tweak de Cydia que nos permite <strong>navegar por Safari Mobile a pantalla completa</strong>. Además de esto, también incorpora características que aprovechan la capacidad multitátil del iPhone para controlar algunas funciones como ir hacia atrás, abrir una nueva pestaña, recargar la página y algunas más.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-1776" title="FullScreen-for-Safari-thxou.com" src="http://www.thxou.com/wp-content/uploads/2010/10/FullScreen-for-Safari-1-copia-1-e1287430255831.jpg" alt="" width="160" height="236" /> <img class="alignnone size-full wp-image-1777" title="FullScreen-for-Safari-thxou.com" src="http://www.thxou.com/wp-content/uploads/2010/10/FullScreen-for-Safari-1-copia-e1287430341797.jpg" alt="" width="160" height="234" /></p>
<p>Puedes encontrarlo en el <strong>repositorio de BigBoss</strong>. Para ver su funcionamiento completo aquí os dejo un video de demostración:</p>
<p><center><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/Sqa570xHtWI?fs=1&amp;hl=es_ES&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Sqa570xHtWI?fs=1&amp;hl=es_ES&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></center></p>
<p style="text-align: right;"><a href="http://www.ispazio.net/131376/fullscreen-for-safari-un-tweak-per-controllare-safari-con-nuove-gesture-multitouch-anteprima-ispazio">Video</a></p>
<div class="shr-publisher-1775"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><h2  class="related_post_title">Entradas relacionadas</h2><ul class="related_post"><li><a href="http://www.thxou.com/2011/05/10/fbuploader-sube-fotos-a-facebook-desde-la-aplicacion-fotos/" title="FBUploader: Sube fotos a Facebook desde la aplicación Fotos">FBUploader: Sube fotos a Facebook desde la aplicación Fotos</a> (0)</li><li><a href="http://www.thxou.com/2010/10/17/hrdenabler-habilita-la-funcion-hdr-en-el-ipod-touch-4g/" title="HRDEnabler: Habilita la función HDR en el iPod Touch 4G">HRDEnabler: Habilita la función HDR en el iPod Touch 4G</a> (0)</li><li><a href="http://www.thxou.com/2010/09/20/covert-navega-de-forma-privada-desde-safari-mobile/" title="Covert: Navega de forma privada desde Safari Mobile">Covert: Navega de forma privada desde Safari Mobile</a> (1)</li><li><a href="http://www.thxou.com/2010/09/13/direct-closer-anade-un/" title="Direct Closer: Añade automáticamente el icono para cerrar aplicaciones en multitarea">Direct Closer: Añade automáticamente el icono para cerrar aplicaciones en multitarea</a> (0)</li><li><a href="http://www.thxou.com/2010/09/09/no-bookmarks-desactiva-la-pantalla-de-favoritos-que-se-abre-al-entrar-en-safari/" title="No Bookmarks: Desactiva la pantalla de favoritos que se abre al entrar en Safari">No Bookmarks: Desactiva la pantalla de favoritos que se abre al entrar en Safari</a> (0)</li><li><a href="http://www.thxou.com/2010/09/06/multimusicinfo-visualiza-el-nombre-de-la-cancion-y-el-artista-desde-el-fast-app-switching/" title="MultiMusicInfo: Visualiza el nombre de la canción y el artista desde el Fast App Switching">MultiMusicInfo: Visualiza el nombre de la canción y el artista desde el Fast App Switching</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.thxou.com/2010/10/18/video-fullscreen-for-safari-navega-con-safari-mobile-a-pantalla-completa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

