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 de fuentes y Archivo> Obtener información, a continuación, seleccione la pestaña Generar.) Aquí están algunos (que se presenta para Clang y GCC 4.2 para mí) que pueden ser de interés:
- no utilizado funciones
- parámetros utilizados
- valores no utilizados
que aún no hay opciones para la detección de las importaciones no utilizados, pero que es un poco más simple - el enfoque de baja tecnología es sólo para comentar las declaraciones de importación hasta que se obtener 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 manera de detectar (potencialmente) los métodos utilizados es examinar la cobertura de código de ejecuciones reales. Esto generalmente se realiza de forma conjunta con las pruebas unitarias automatizadas, pero no tiene que ser así.
This blog post es una introducción decente a las pruebas unitarias y la cobertura de código con Xcode. La sección de gcov
(que solo funciona con el 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 en ella, puedes ver qué código se ejecutó utilizando una herramienta como CoverStory (una GUI bastante simplista) o lcov
(scripts Perl para crear informes HTML))
utilizo gcov
y lcov
para CHDataStructures.framework y generar automáticamente después de cada coverage reports 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 usted está tratando de eliminar el código muerto, creo que se encuentra esta cuestión de forma interesante, así:
http://clang-analyzer.llvm.org/ – slf
No estoy seguro de cuál es su punto es ...El analizador estático puede encontrar muchos problemas, pero si envía un mensaje a una variable escrita como ** 'id' **, o crea un selector para llamar en tiempo de ejecución, el analizador estático no puede garantizar que el código sea realmente no usado. Si se elimina el código que aún se necesita, es donde obtendría errores de tiempo de ejecución. ¿Me estoy perdiendo de algo? –
Además, los selectores que se crean basados en cadenas en tiempo de ejecución son bastante comunes. – dreamlax