miércoles, 26 de noviembre de 2008

Proyecto: Activación de nuevas funciones de Maps en Touch

Antes de comenzar, y para no repetir a lo largo de estas líneas, siempre que se modifiquen archivos, por precaución guardar copias de seguridad de estos. No voy a decir en cada momento eso de: Recordar realizar una copia de seguridad.... Estais avisados amigos

Por otro lado, esto tan solo es válido para la firmware 2.2 y el iPod Touch Viejo. Evidentemente, puesto que para el nuevo no hay JB.


Como sabemos ya, en la versión firmware 2.2 Apple ha introducido en ella nuevas opciones en la aplicación Maps:

-StreetView para ver imágenes a pie de calle
-Cálculo de rutas a Pie, en coche o en Bus
-Localización de lugares de interés cercanos

Pero como es común en Apple y su ansia de ganar dinero y de hacer las cosas exclusivas, por una razón absurda que nadie conoce decidió deshabilitar dichas opciones para los iPod Touch, tanto el nuevo como el viejo. Seguro que se le olvidó ;)

Yo me considero una persona de bien, así que no he podido sino refrescarle la memoria a Apple para poder reactivar unas funciones que YA tiene de por sí nuestro dispositivo.


Estos dias han salido en numerosos lugares como habilitar estas funciones. Pues bien, al igual que Apple hiciese con la famosa actualización de enero, Apple protege la aplicación según si esta identifica que estamos ante un iPod o un iPhone. La opción definitiva pasa evidentemente por parchear el arcihvo implicado y listo. Pero encontrar el punto exacto y el archivo concreto no es a veces tan simple. Debido a esto salen soluciones que funcionan perfectamente pero con efectos colaterales:

Ya hace tiempo demostramos que lo que diferencia a un iPhone de un Touch a nivel del OS son los archivos de configuración que se cargan en uno y en otro al iniciarse. Los más claros y que más efectos tienen sobre nuestro dispositivo son:

N45AP.plist -> Ajustes de sistema iPod Touch Viejo
N72AP.plist -> Ajustes de sistema iPod Touch Nuevo
M68AP.plist -> Ajustes de sistema iPhone
N82AP.plist -> Ajustes de sistema iPhone 3G (Solo presentes en firmware de iPhone 3G)

Settings-iPod.plist -> Ajustes que se cargarán desde la aplicación preferencias para iPod
Settings-iPhone.plist -> Ajustes que se cargarán desde la aplicación preferencias para iPhone

Lo gracioso es que quitando el archivo N82AP.plist del iphone 3G, todos los demás se encuentran en todas las firmwares.

Es decir, cada dispositivo carga un archivo u otro según el q sea. Pero que pasa si yo le pongo el nombre de N45AP.plist al archivo M68AP.plist? y N45AP.plist lo elimino (por seguridad lo renombro)?. Al reiniciar el iPod se creerá que es un iPhone y cargará toda la configuración de este. Evidentemente no tiene el hardware del iPhone, pero a todos los demás efectos será un iphone. Esto evidentemente no nos compensa. Si es un iphone tendremos mensajes de error de conexión a la red y otros. Pero si hacemos el cambio que he citado, las preferencias que se cargarán serán las del archivo Settings-iPhone.plist, con lo que nuestras preferencias tb serán diferentes.


Bueno visto esta pequeña introducción vamos a explicar el proceso:


0º. Preparación

Se requierere poco, pero sí es cierto que un mínimo de conocimientos de SSH, Cydia y otros. Antes de empezar necesitaremos instalar las siguientes herramientas en el iPod, en el caso de no tenerlas instaladas ya, y algunas de ellas en el PC:

-Cydia (evidentemente)
-OpenSSH (Putty, WinSCP como clientes para el PC)
-Erica Utilities

Cydia para instalar el resto, OpenSSH para tener acceso por SFTP y SSH para tener una shell, y Erica Utilities para poder usar la utilidad Plutil.

Todas estas herramientas ya se han hablado en este blog con anterioridad, explicado como funcionan con más o menos detalle y otros. Quien quiera saber más de ello solo tiene que investigar por el blog. Lo que me recuerda que tengo que añadir algún buscador de información en él.

Suponiendo que tenemos todo listo podemos seguir.


1º. Engaño

Apple dice que si tienes un iphone puedes disfrutar de esas prestaciones, pero si tienes un iPod no. Luego si hacemos pasar el iPod por un iphone tendremos todas las funciones operativas.

Como se hace est0? Siguiendo el principio comentado con anterioridad.
¿Cual es el archivo que hará creer al sistema que tenemos un iphone? los archivos mágicos son:

N45AP.plist
M68AP.plist

Ambos archivos internamente no son tan diferentes, tan solo sucede que cambian algunos parámetros en uno o en otro. Una opción podría ser usar directamente el archivo de iPhone "M68AP.plist" en sustitución del archivo de iPod "N45AP.plist". Pero hacerlo así provocaría más efectos colaterales, dado que se aplicarían un mayor número de ajustes propios al iphone, y lo que queremos es tan solo activar las opciones nuevas de Maps. Lo que se plantea por tanto es modificar tan solo el archivo de ipod "N45AP.plist" con el ajuste mínimo y suficiente para que se crea que somos un iphone. Esta clave, comando... como querais llamarlo, se llama "telephony". Con esta simple instrucción, se carga o no se cargan los ajustes de teléfono (por así decirlo, luego con los efectos colaterales veremos esto un poco más en detalle). Esto no decimos que sea eso porque sí, sino que si abrimos el archivo de iphone "M68AP.plist" podemos más o menos ver claramente las diferencias de los dos archivos y para que sirven cada una de las claves.

Bueno, parece facil, tan solo tenemos que añadir unas líneas a nuestro archivo "N45AP.plist" y problema resuelto. Y en realidad es así de fácil... al menos a priori.

Manos a la obra.

a) Lo primero es saber la ubicación de dicho archivo dento de nuestro dispositivo:

/System/Library/CoreServices/SpringBoard.app


b) La mayoría de los archivos de Apple de este tipo están codificados para ahorrar espacio y tener un grado superior de protección. No pueden leerse directamente, por lo que hay que convertirlos. Para eso hablamos de "Erica Utilities" y Plutil. La conversión será primero para convertir dicho archivo a "legible" y después de nuevo, despues de la modificación, a "ilegible".

El proceso en realidad es muy facil. Accedemos por SSH con cualquier cliente SSH (linea de comandos) como root al iPod (yo uso Putty) y ejecutaremos:

"plutil -c xml1 /System/Library/CoreServices/SpringBoard.app/N45AP.plist"
(sin las comillas)

Con esa simple sentencia se convertirá el archivo a un formato plano de texto.


c) Por medio de cualquier cliente para acceso a SFTP (yo uso WinSCP) iremos a dicha ubicación y editaremos el archivo citado. Aquí depende de cada uno. Unos prefieren copiar el archivo al PC y editarlo desde ahí y otros clientes de SFTP permiten la edición "directa". Da igual. El caso es modificar el archivo que está dentro. Lo primero es abrirlo, y tendremos un archivo de texto bastante comprensible. Tan solo voy a pegar el trozo que nos conscierne:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>bundles</key>
<array/>
<key>capabilities</key>
<dict>
<key>deviceName</key>
<string>iPod</string>
<key>editableUserData</key>
<true/>
<key>piezo-clicker</key>
<true/>
<key>standAloneContacts</key>
<true/>

Se trata tan solo de añadir justo debajo:

<key>telephony</key>
<dict>
<key>maximumGeneration</key>
<real>2.5</real>
</dict>


Evidentemente después de estas líneas, abrá más cosas en el archivo, todo ello sin modificar. Tan solo es un trozo que hay que añadir en el sitio concreto citado. Una vez terminamos guardamos y listo


d) Recordar que el archivo tiene que quedar como estaba. Es decir, con permisos 0644 (en caso de que se modificasen, y reconvertirlo a binario. Si usamos Plutil anteriormente para la conversión, ahora haremos lo mismo, pero con una sentencia un pelín diferente

"
"plutil -c binary1 /System/Library/CoreServices/SpringBoard.app/N45AP.plist"


Con esto hemos terminado el engaño. Si reiniciamos el iPod completamente veremos que no solo tenemos activadas todas las funciones de Maps nuevas, sino que hemos incluido efectos colaterales no deseados:

-Los ajustes de Preferencias serán diferentes, se cargarán los de iPhone
-Mensajes de error tipo popup que nos dice que no tenemos servicio, o fuera de covertura...
-La etiqueta "iPod" de arriba a la derecha se cambiará a otra de "No hay servicio" ó "Fuera de servicio". No recuerdo sinceramente cual
-Posiblemente otros cambios.

Todo ello tan solo por añadir unas 4 líneas? 5? Quitando eso todo funcionará perfectamente. Podeis abrir la aplicación Maps y comprobar que teneis acceso a todas las nuevas prestaciones. Apartir de aquí pasaremos a solucionar cada uno de los efectos colaterales


2º. Colateral 1: Preferencias cambiadas

Esto es fácil. Anteriormente hemos comentado cuales son los archivos que guardan las diferentes configuraciones que tendrá la aplicación Preferencias. Estos archivos son:

Settings-iPod.plist
Settings-iPhone.plist

En este caso no nos hace falta ni siquiera convertirlos. El problema es que al detectar el "teléfono" puesto antes en el paso 1º, nos carga el archivo "Settings-iPhone.plist" que es diferente al archivo "Settings-iPod.plist". Pero esto tiene muy facil solución. Tan solo tenemos que eliminar el archivo "Settings-iPhone.plist", duplicar el archivo "Settings-iPod.plist" y renombrar uno de ellos a "Settings-iPhone.plist". De este modo se cargará igualmente el mismo archivo, pero los ajustes de este serán los de iPod, no de iPhone.

a) Ubicación de los archivos:

/Applications/Preferences.app


b) El modo de renombrar, copiar, duplicar... creo que es trivial, cada uno lo haga como mejor sepa.


Al terminar, si accedemos a Ajustes, veremos como las opciones que tenemos son las de toda la vida.



2º. Colateral 2: Popups de error aleatorios

El iPhone cuando está sin covertura o hay un problema de red, avisa con ciertos mensajes sobre estos. Estos mensajes son enormemente molestos para nosotros, ya que evidentemente nunca tendremos covertura y siempre trabajaremos fuera de servicio. Estos mensajes de error se ejecutarán aleatoriamente cada X segundos, minutos... es decir, que podemos estar trabajando con el iPod y tener un molesto mensaje de golpe.

No he encontrado en ningún foro, blog... ninguna solución al problema. Los otros efectos colaterales son simples de corregir, como hemos visto (hay más que trataremos después), pero ninguna para este.

La solución la encontré en realidad por casualidad sin casualidad. Tengo la mala (o buena, según se vea) de no tener nunca nada en ejecución que no sea necesario. Al igual que un PC, los procesos en ejecución consumen rendimiento y potencia (critico en un portatil o dispositivo de mano), consumen memoria y se hace el sistema más vulnerable.

Desde hace tiempo tengo un archivo en mi PC con posibles "Tweaks" (trucos, ajustes...) para maximzar el rendimiento de mi iPod. En él tengo un listado de procesos a deshabilitar, demonios a eliminar... etc. En que me baso? es simple. Un proceso debe de tener una finalidad. Si esa finalidad no será usada para mí... proceso que me ahorro. Esto se extrapola a cualquier sistema. Está claro que existen procesos de sistema, pero existen otros que uno puede prescindir.

Existe un demonio en ejecución constante, en el iPod, llamado "CommCenter". Lo absurdo de todo ello es que este demonio (un demonio es como un servicio en Windows, para entendernos) se usa tan solo para gestionar asuntos del teléfono. Es absurdo pq a día de hoy no he encontrado ni un solo uso que pueda tener nuestro iPod Touch de este demonio. Lo dejó Apple olvidado para ¿iPod Touch? A saber. Lo que es cierto es que este demonio se encuentra activo en todos los iPod Touch viejos, posiblemente en el nuevo también.

Este es uno de los "Tweaks" aplicados a mi iPod. La supresión de este demonio, de modo que cuando mi iPod se inicia jamás se carga este servicio. Para que tener activo un proceso que tan solo se encarga de interactuar con el teléfono si mi iPod no tiene teléfono. Es un poco de cajón. Podríamos pensar que se encarga de algo más... Sí, es posible... pero por ahora como digo no ha aparecido ese "algo más" y todo funciona como el primer día, sin errores alguno.

¿Quien decía que los sistemas de Apple son mejores y más seguros?

Esto enlaza con el efecto colateral que nos atañe. Esos popups los tiene que lanzar alguien... y da la casualidad además que dichos popups los lanza este proceso. Vamos a matar dos pájaros de un tiro!!. Por un lado vamos a suprimir un proceso que teníamos siempre en ejecución, con el consumo de RAM consecuente, y por otro lado vamos a hacer desaparecer de un plumazo cualquier popups.

La mejor forma de hacerlo es con una simple sentencia por SSH, con la cual se detendrá el servicio y se marcará para que no vuelva a ejecutarse en futuros reinicios.

a) Deshabilitación del Daemon CommCenter:

"launchctl unload -w /System/Library/LaunchDaemons/com.apple.CommCenter.plist"
(sin las comillas)

unload hace que el servicio se detenga, y el comando -w hace que el Daemon se marque para que no se ejecute más al iniciar el sistema. Es decir, se deshabilita del todo el Daemon.

Con esa simple sentencia, se acabaron los popups molestos y ganamos algo de RAM adicional. Posiblemente ganemos incluso en algo de batería.

Después de efectuar los cambios, un reinicio siempre ayuda a aplicar mejor los cambios y ver que todo está correcto



3º. Colateral 3: Etiquetas que sustituyen a "iPod"


Por último, al entrar en modo teléfono nos desaparecerá la etiqueta de "iPod" que nos aparece arriba a la izquierda (o cualquiera que tengamos puesta con MIM) por otra que pondrá "Sin Servicio". Esto aparece en los iPhone cuando se encuentran sin covertura. Aquí tenemos dos opciones.

Si solucionamos el Colateral 2, en vez de "Sin servicio" aparecerá un: "Buscando...". Si no solucionamos el Colateral 2 aparecerá un "Sin servicio". En ambos casos se soluciona exactamente igual, tan solo tendremos que editar una etiqueta o la otra.

Aquí vamos a tener que volver a la edición de archivos plist. El proceso es exactamente el mismo que hiciésemos anteriormente. Primero los convertiremos a xml con plutil (texto plano), modificaremos lo que tengamos que modificar y convertiremos de vuelta el archivo a binario.

Tan solo se trata de un truco.

a) Localización del archivo a modificar: "SpringBoard.strings"

/System/Library/CoreServices/SpringBoard.app/Spanish.lproj

En caso de que tengamos nuestro iPod en español


/System/Library/CoreServices/SpringBoard.app/English.lproj

En caso de que lo tengamos en inglés


Evidentemente a buen entendedor pocas palabras bastan, cada idioma en su carpeta. De todos modos el archivo es exactamente el mismo.


b) Conversión a texto plano:

"plutil -c xml1 /System/Library/CoreServices/SpringBoard.app/Spanish.lproj/SpringBoard.strings"


c) Edición:

En este caso no hay que añadir nada, tan solo editar una etiqueta. Que tenemos un "Sin Servicio"? Buscamos por dicho texto en el archivo, y sustituimos el "Sin Servicio" por lo que deseemos. Que tenemos un "Buscando..."? lo mismo. En el caso de Buscando, creo que los puntos suspensivos se codificaban de otro modo, así que buscar mejor por "Busca". Cuando sustituyamos las entradas deseadas, guardamos y listo


d) Conversión a binario:

"plutil -c binary1 /System/Library/CoreServices/SpringBoard.app/Spanish.lproj/SpringBoard.strings"


Una vez terminado, un respring o un reboot y como nuevo.

---------------------------------
---------------------------------


Llegados a este punto, todo debería funcionar correctamente, con TODAS las funciones de Maps activadas y sin ninguna contraindicación asociada:





10 comentarios:

Anónimo dijo...

Donde pones:
a) Deshabilitación del Daemon CommCenter:

" unload -w /System/Library/LaunchDaemons/com.apple.CommCenter.plist"

creo que tendria que ser:
"launchctl unload -w /System/Library/LaunchDaemons/com.apple.CommCenter.plist"

Si no no me funciona

Theliel dijo...

Si, es así, se me olvido teclear la utilidad launchctl, sorry, lapsus calámiti, ya está corregido, gracias

Anónimo dijo...

me espero a que agan un script la neta me dio weba xD..

Anónimo dijo...

Pues yo acabo de probarlo. Lo he repetido 2 veces y sigue sin funcionar. El mensaje de busca se sustituye por lo que queramos pero siempre sale algo distinto y con puntos suspensivos. Es correcto esto ?

Anónimo dijo...

¿Y no podrías pasarnos los archivos ya modificados? Para los torpes como yo... No me digas lo de que es peligroso o algo así, correré con los riesgos.

Theliel dijo...

En Cydia ya hay una solución que creo que funciona bien

No puedo publicar dichos archivos pq sería ilegal

KuRLiNg--TiTo dijo...

A mi me ha funcionado a la perfección. Bueno no del todo, porque en ajustes me aparece una opción de copiar los contactos desde la tarjeta sim y no me acuerdo si eso aparecía antes, me imagino que no, pero no consigo eliminarlo. Tampoco me importa que esté ahí pero bueno.

Mu buen trabajo.
Offtopic:
Donde puedo encontrar los comandos para trabajar con putty?¿ Me encantaría saber usarlo y por ejemplo ver que procesos del ipod debo tener abiertos y cuales no.
Gracias de nuevo Theliel.

ElToro dijo...

Consulta...me aparecen las primeras pantallas con los recorridos...pero como veo esa pantalla donde parece q estuviera parado mirando ??...
Gracias como siempre.

Unknown dijo...

Trabaja perfectamente. ¡Gracias por el tuto!

Anónimo dijo...

Muchas gracias por el post!
Podrías postear algún dia sobre diamons que podríamos suprimir para ahorrarnos RAM?

 
Creative Commons License
Esta obra está bajo una licencia de Creative Commons.