2012-05-28 9 views
18

¿Hay alguna forma de que Xcode me avise cuando estoy llamando a un método que no está disponible en el SDK del objetivo mínimo admitido?iOS Xcode: advierta sobre métodos que no están en el objetivo mínimo SDK

Por ejemplo, el método [NSURLConnection sendAsynchronousRequest: queue: completionHandler:]. Este método está disponible en iOS5 y posteriores. Pero el objetivo mínimo de mi aplicación es iOS4.

Si uso ese método (sendAsync), me gustaría que Xcode me diga que ese método no está disponible para el objetivo mínimo que trato de admitir.

He intentado poner __IPHONE_OS_VERSION_MAX_ALLOWED = 40000 en la configuración del preprocesador, pero eso solo desencadena un montón de errores del SDK de Apple que no son útiles. (Probablemente porque mi SDK activo es iOS5.1)

¿Es la única solución para obtener SDK antiguos e instalarlos en Xcode?

¿Hay alguna solución más fácil?

+0

No estoy seguro si entiendo la pregunta. Siempre usa el último SDK incluso si se dirige a una versión anterior.De hecho, Apple no aceptará su aplicación en App Store si no usa el último SDK. Pero siempre que solo use el subconjunto de API disponibles para la versión de destino, está satisfecho. –

+0

correcto, pero si hay personas que están instalando la aplicación en iOS4, necesito asegurarme de que no use ninguna API iOS5 +. Así que estoy buscando una forma de dejar que xcode me advierta en lugar de tener que mirar cada línea de código y verificar que sea iOS 4 seguro. – gngrwzrd

+0

Tal vez [este Techdoc de Apple] (http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html#//apple_ref/doc/uid/10000163i-CH1-SW2) tal vez de ayuda? –

Respuesta

5

Después de investigar un poco, leer el Apple Doc al respecto y probar varias cosas. La solución es descargar un antiguo Xcode DMG de Apple, tomar el archivo .pkg para el mismo SDK que su destino de despliegue e instalarlo en su versión de Xcode. He aquí cómo:

  1. Descargar mayores Xcode.dmg de Apple
  2. Abra la DMG
  3. En la Terminal, entra en paquetes: "cd/Volumes/[DMG]/Paquetes; abierta."
  4. Encuentra el SDK desea, algo así como iPhoneSDK_4.0.pkg
  5. instalar ese paquete, pero cambiar el directorio de instalación a/Aplicaciones/Xcode/Contenido/desarrollador
  6. Reiniciar Xcode si estaba abierto.

Ahora que tiene el mismo SDK que su destino de despliegue, configure su BaseSDK en el mismo. Cuando construyas recibirás advertencias sobre métodos faltantes. Su proyecto puede o no compilarse correctamente con un BaseSDK anterior en una nueva versión de Xcode, pero eso no importa; acaba de encontrar las llamadas al método que necesita para ajustar una comprobación de funciones con respondsToSelector :.

6

Desafortunadamente, no existe una forma estándar de hacerlo. Al establecer el sistema operativo objetivo en un número menor que el SDK base, Xcode vinculará débilmente las bibliotecas y los marcos. Al hacerlo, Xcode no lo advertirá sobre el uso de métodos que pueden no estar disponibles en el sistema operativo de destino.

Puede establecer temporariamente el SDK base más bajo, pero eso puede no funcionar siempre. Dado que desea ignorar la mayoría de los errores y advertencias producidas (porque solo se llaman condicionalmente en la ruta del código), y muchas advertencias y errores dependen de otros errores que deba resolver antes de que el compilador proporcione un resultado significativo.

No creo que existan herramientas de análisis estático para esto, ni de Apple ni de terceros.

+0

de acuerdo, encontré lo mismo. – gngrwzrd

0

A partir de Xcode 7.3, el compilador ahora puede generar estas advertencias por usted. Todo lo que necesita hacer es establecer el indicador de advertencia -Wpartial-availability en la Configuración de compilación, como se describe en this answer.

Cuestiones relacionadas