origen objective logo estructura entorno desarrollo caracteristicas objective-c xcode methods compiler-warnings

objective-c - logo - objective c vs swift



Cómo detectar métodos no utilizados y#import en Objective-C (7)

Como dijo paddydub , AppCode hace esto muy bien. Lo intenté, y tardé solo 10 minutos:

Vaya a Code > Optimize Imports... , o ^ + ⌥ + O

Aquí hay un video que describe cómo hacer esto: Detección de importación y métodos no utilizados en AppCode

Después de trabajar durante mucho tiempo en una aplicación de iPhone, me di cuenta de que mi código es bastante sucio y contiene varios #import y métodos que no se llaman ni son útiles en absoluto.

Me gustaría saber si hay alguna directiva de compilación o una forma de detectar esas líneas inútiles de código. ¿Xcode tiene alguna herramienta para detectar esto?




Recientemente escribí un script para encontrar declaraciones #import sin usar (o duplicadas): https://gist.github.com/Orangenhain/7691314

La secuencia de comandos toma un archivo ObjC .m y comienza a comentar cada línea de #import por turno y ver si el proyecto aún se compila. Deberá cambiar BUILD_DIR & BUILD_CMD.

Si está utilizando un comando find para permitir que el script se ejecute en varios archivos, asegúrese de usar BUILD_CMD que realmente use todos esos archivos (o verá un archivo con muchas declaraciones de importación no utilizadas).

Escribí esto sin saber que AppCode tiene una característica similar, sin embargo, cuando probé AppCode no fue tan exhaustivo como este script (pero mucho más rápido [para todo un proyecto]).


Recientemente, cambié un gran proyecto de carbono a cacao. Al final de esto, había bastantes archivos huérfanos que ya no se usaban. Escribí un guión para encontrarlos que esencialmente hacían esto:

Asegúrese de que la fuente está registrada en subversión (es decir, limpia). Asegúrese de que actualmente se genera sin errores (es decir, xcodebuild devuelve 0 estado). Luego, para cada archivo fuente en el directorio, vacíe (es decir, elimine los contenidos, trunque la longitud) fuente y el archivo de encabezado, pruebe una compilación, si falla, revertir los archivos, de lo contrario, déjelos vacíos.

Después de ejecutar esto, invierta y luego elimine todos los archivos vaciados, compile y luego elimine todos los errores #imports.

También debería agregar que debe evitar los archivos a los que se hace referencia desde los archivos .xib o .sdef, y puede haber otros casos de vinculación dinámica, pero aún así puede darle una buena pista sobre lo que se puede eliminar.

La misma técnica se puede usar para ver qué #imports se pueden eliminar: en lugar de truncar el archivo, elimine cada #import en el archivo por turno y vea si falla la compilación.


Xcode le permite (des) verificar la configuración de advertencias de compilación específicas que pueden advertirle de algunos tipos de código no utilizado. (Seleccione el proyecto en la lista fuente y Archivo> Obtener información, luego seleccione la pestaña Generar). Aquí hay algunos (que aparecen para Clang y GCC 4.2 para mí) que pueden ser de su interés:

  • Funciones no utilizadas
  • Parámetros no utilizados
  • Valores no utilizados

No veo ninguna opción para detectar importaciones no utilizadas, pero eso es un poco más simple: el enfoque de baja tecnología es simplemente comentar declaraciones de importación hasta que obtenga un error / advertencia de compilación.

Los métodos Objective-C no utilizados son mucho más difíciles de detectar que las funciones C no utilizadas porque los mensajes se envían dinámicamente. Una advertencia o error puede indicarle que tiene un problema potencial, pero la falta de uno no garantiza que no tenga errores de tiempo de ejecución.

Editar: Otra buena forma de detectar (potencialmente) métodos no utilizados es examinar la cobertura del código de las ejecuciones reales. Esto generalmente se realiza de forma conjunta con las pruebas unitarias automatizadas, pero no tiene que ser así.

Esta publicación de blog es una introducción decente a las pruebas unitarias y la cobertura de código con Xcode. La sección sobre gcov (que solo funciona con código generado por GCC, por cierto) explica cómo hacer que Xcode construya código instrumentado que pueda registrar la frecuencia con la que se ha ejecutado. Si llevas a cabo una compilación instrumentada de tu aplicación en el simulador, ejecuta gcov, puedes ver qué código se ejecutó utilizando una herramienta como CoverStory (una GUI bastante simplista) o lcov (scripts de Perl para crear informes HTML). )

Utilizo gcov y lcov para CHDataStructures.framework y genero informes de cobertura automáticamente después de cada commit de SVN. Nuevamente, recuerde que no es prudente tratar la cobertura ejecutada como una medida definitiva de qué código está "muerto", pero ciertamente puede ayudar a identificar métodos que puede seguir investigando.

Por último, dado que intentas eliminar el código muerto, creo que también encontrarás interesante esta pregunta SO:


Appcode tiene una función de inspección de código que encuentra las importaciones y el código no utilizados.