Usando XCode 3.2.5 con dispositivos iOS 4.2.1

Hace unos días salió la 4.2.1 de iOS para iPhone y iPod Touch. Sin pensarlo demasiado, actualicé mi iPhone 3Gs, que es la máquina que uso en el día a día, pero también la uso como máquina de desarrollo y pruebas. Pero no caí en el posible problema: tener en mi dispositivo instalado una versión de iOS no soportada por XCode.

Pero salió la 3.2.5 de XCode y me la bajé e instalé. Bueno, problema solucionado ¿no?. Veamos, esta versión soporta… ¿iOS 4.2? ¿Y qué pasa con iOS 4.2.1? Un sudor frío me recorrió la espalda. Y se confirmaron mis miedos con este tweet de @jdortiz:

Lógicamente, estoy en fase de pruebas para lanzar la v1.1 de MyEvents. Esto sólo te pasa cuando estás probando. Murphy es cruel.

Esta mañana, me remangué y me senté frente a XCode. Al abrir el proyecto, un solitario error:

Mi XCode no entiende qué es eso de iOS 4.2.1 🙁

Abrí el Organizer (para ver mis dispositivos), y nada más abrirlo me apareció la siguiente ventana:

Vamos, que XCode me estaba diciendo: «esto de iOS 4.2.1 no tengo ni idea de qué es, pero si quieres me leo unos cuantos ficheros del iOS de este iPhone y trato de ver si soy capaz de manejarlo». Evidentemente, pulsé en Collect. Una barra de progreso me indicaba que se importaban los ficheros de iOS de mi iPhone. En segundo plano, XCode «desimbolicaba», es decir, desensamblaba el código de iOS 4.2.1 y lo preparaba para poder depurar con él. Al finalizar, supe que había triunfado porque el Organizer me mostraba la versión correcta en mi dispositivo:

Ahora ya sólo me quedaba actualizar la información del proyecto (para que se compilase usando el SDK correcto) y del target (el ejecutable que genera XCode) para se enlazase con las bibliotecas de la versión correcta. Pulsamos sobre el proyecto, ? + I (obtener información) y en la pestaña Build, cambiamos Base SDK. En mi caso ponía 4.1 (missing) y le he puesto la última. Luego repetimos, pero en el Target, ? + I, build y ponemos el Base SDK a 4.2.

¡Listo! Graba (? + S) y cambia entre dispositivo y simulador un par de veces. Parece que XCode no refresca bien el cambio. Ahora, ya puedes probar con la 4.2.1 en el Simulador y en tus dispositivos.

P.D.: Jorge me avisó en este Tweet de que alguien ya había escrito algo sobre este problema, pero 1) está en Inglés y 2) no está tan mascadito. ¡Espero que os sirva!

6 comments

  1. Hola, me viene al pelo esta explicación pero …

    ¿qué pasa si no nos sale el aviso del organizer? Vamos, que a mi no me sale eso de «Collect» y al abrir el organizer sólo obtengo el mensaje de que el 4.2.1 no lo conoce.
    Uso XCode 3.2.4 ya que con el 3.2.5 me quedé sin poder «deploy» en el «device»

    En fin, a ver si me puedes orientar.

    Un saludo.

    • Hola

      Siempre debes intentar usar la última versión estable de XCode (y del último SDK que soporte), de forma que Apple no pueda rechazar tu App al revisarla. Ahora mismo puedes usar la 3.2.5 sin problemas con la v4.2.1 de iOS. No entiendo cuando me dices que no puedes desplegar en el dispositivo. ¿No será que necesitas borrar los provisioning profiles antiguos, ir al provisioning portal, volver a crearlos y reinstalarlos? Prueba. Y nos cuentas.

  2. Hola de nuevo.

    La verdad es que hay problemas con el tema del 4.2.1, el foro de soporte esta repleto, el oficial, me refiero.

    Bueno, tengo instalado el 3.2.5 y el problema que me encuentro es que un proyecto realizado con 3.2.4 no me permite desplegarlo/probarlo en un dispositivo fisico, no me aparece ni la opción.
    Sin embargo, esta mañana me ha dado por crear un proyecto nuevo, vacío y en este caso SI me aparece la posibilidad de desplegar en un dispositivo. Lo he hecho y correcto.

    Entonces, ¿qué tiene de «malo» mi proyecto «viejo» que el xcode 3.2.5 no me deja desplegar en un dispositivo?. ¿Será por los profiles? ¿En serio? :S

    Voy a ir intentandolo 😀

    Muchas gracias, un saludo.

    • Tu problema tiene pinta de ser lo siguiente: creaste un proyecto con una versión anterior del SDK y ahora te aparece «No base SDK» en el desplegable y no puedes instalarlo. ¿No?. Si es así, pincha en el proyecto, Cmd+I (Info), marca la pestaña Build y busca en los settings «Base SDK». Debes desplegarlo y asignarlo al último SDK que tiene tu nuevo XCode. Repite este proceso pero pinchando ahora en la App que cuelga de Targets en tu proyecto.
      El Base SDK es el SDK que se usa para compilar el proyecto. Si actualizas XCode la metainformación que está almacenada en el proyecto no lo sabe y sigue teniendo «grabado» el SDK antiguo. Hay que decirle de forma manual que cambie.
      Puedes ver también el iOS Deployment target, que es la versión de iOS más antigua en la que vas a dejar funcionar tu App.

      Un saludo

  3. Añado info a mi último «post», no, no es de los «perfiles».

    Los he vuelto a descargar, eliminar del xcode, insertar en xcode y nada, me sigue faltando la opción para desplegar en el dispositivo.

    Creo que es algo de la configuración de mi proyecto, que le dice al xcode «algo» que este interpreta y no me deja desplegar en el dispositivo.

    Gracias, un saludo.

  4. PERFECTO !!

    Era eso, que mi «target» estaba en un SDK más antiguo y claro, no podía desplegar ese tarjet en el dispositivo. Que melón !! Mira que no intentar cambiar las propiedades del target ….

    MIL GRACIAS !!

    Pd: Si hay «night» en Madrid te invito a algo 😉

Comments are closed.