2011-01-14 11 views
13

Estoy construyendo una aplicación para iOS usando Xcode 3.2.5 con el conjunto Base SDK para iOS 4.2Cómo utilizar advertencias del compilador Xcode para determinar objetivo mínimo despliegue IOS

Sé que he utilizado algunas de api de 4,0 y 4.1 pero no estoy seguro de si realmente necesito 4.2.

De acuerdo con la Guía de desarrollo de iOS, "Xcode muestra advertencias de construcción cuando detecta que su aplicación está utilizando una función que no está disponible en la versión del sistema operativo de destino".

Así que esperaba utilizar las advertencias del compilador para derivar mis requisitos mínimos de sistema operativo. Sin embargo, incluso cuando configuro mi destino de implementación de iOS en iOS 3.0, todavía no recibo ninguna advertencia del compilador.

Debo estar haciendo algo mal, pero no estoy seguro de qué? ¿Alguien puede confirmar que recibe advertencias del compilador cuando el destino de implementación de iOS es menor que el SDK base y el código utiliza funciones SDK base? ¿O las advertencias del compilador solo se muestran si vincula un marco que no existía en la versión de destino de implementación de iOS?

+0

que no estoy viendo ninguna advertencia o bien cuando se ejecuta código para SDK 4.0 o superior y un destino de despliegue de 3.0. Esto desafía por completo la documentación que indicó anteriormente. ¿Tuviste algún progreso? –

+0

Simplemente compruebe la respuesta de mattjgalloway aquí http://stackoverflow.com/a/8919108/536308 –

+0

Posible duplicado de [¿Hay alguna manera de que XCode advierta sobre nuevas llamadas a la API?] (Http://stackoverflow.com/questions/4676000/is-there-a-way-for-xcode-to-warn-about-new-api-call) – JosephH

Respuesta

0

Editado: para detectar nuevas API que solo están disponibles en las nuevas versiones de iOS, no creo que Xcode pueda hacerlo automáticamente por nosotros. Necesitamos ponerlos en nuestra mente por nosotros mismos. Mi fuente de lectura sugerida:

  1. de sesión en su cuenta de dev y búsqueda diffs API. Estos documentos oficiales de API diffs deben ser minuciosos y útiles.
  2. Marque esta great post sobre cómo terminar su código para que sea compatible con las versiones más bajas de iOS:

===

Trate de limpiar la acumulación la carpeta de su proyecto. Después de eso, debería ver las advertencias sobre las API obsoletas que utilizó su código.

alt text

alt text

+1

He intentado hacer una compilación limpia y eso no parece cambiar las cosas. Solo para aclarar, no estoy desaprobando las API que me preocupan. Es donde he usado una API que se ha introducido en una versión posterior al objetivo de implementación de iOS. Estoy tratando de determinar mi objetivo de implementación de iOS mínimo en función de las API que he utilizado. –

+0

Perdón por malentender su problema. Ver mi respuesta editada. –

2

cambiar temporalmente su SDK base para verlos

+0

Pensé en eso como una opción también, pero solo tengo 4.2 instalado. Así que pensé que intentaría descargar 4.0 para probar esta solución, pero parece que no puedo encontrar ninguna referencia para descargar el SDK 4.0 de Apple. ??? –

+0

instale varios SDK desde el instalador xcode, o (si no es una opción) instale una versión adicional de xcode. La frecuencia de actualización es muy alta en iOS, pero no está mal en OS X. Tengo dos en el portátil, y tres en el Mac de potencia: eso es casi tan mínimo como es posible para un desarrollador de ft. – justin

+0

Ohhhh Dios mío! Es simplemente increíble. Entonces, ¿cuál es el uso de ese parámetro de despliegue param? ¿Solo para mostrarlo en iTunes? – Oliver

3

Se comporta como se esperaba: cambiar el destino de despliegue única afecta a la versión mínima del sistema operativo que la aplicación se ejecutará en, no el maximo.

Si utiliza el SDK 4.3 y establece el destino de implementación en 4.0, significa que su aplicación vinculará cualquier API anterior a 4.0 y debilitará cualquier API introducida entre 4.0 y 4.3. Debe verificar en tiempo de ejecución la existencia de la API (por ejemplo, un puntero nulo para las funciones C) o la versión del sistema operativo.

El destino de despliegue genera advertencias de Xcode pero para las API en desuso: por ejemplo, si utiliza una API obsoleta en 4.1 y posterior y el destino de despliegue es 4.1 o posterior, recibirá una advertencia, pero si es 4.0 o anterior, no lo hagas

Parece que lo que realmente necesita en su caso es el equivalente a MAC_OS_X_VERSION_MAX_ALLOWED (no es parte de la configuración de compilación predeterminada, pero puede personalizarla y debe anular el valor establecido por el SDK) pero para iOS SDK . No estoy seguro de que oficialmente exista realmente: Pude encontrar un __IPHONE_OS_VERSION_MAX_ALLOWED pero considerando que comienza con __, no estoy seguro de que sea realmente compatible.

La solución correcta parece simplemente compilarse con versiones anteriores del SDK (siempre puedes hacer eso en el simulador) y obtendrás errores de Xcode si usas API faltadas.

Para obtener más información, lea esta nota técnica: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html

+0

Enlace estelar, @Pol! El gráfico en la página ilustra la relación bastante bien; ¿Podríamos incluirlo aquí como parte de esta respuesta (con crédito completo, por supuesto)? –

Cuestiones relacionadas