2009-12-08 12 views
9

Ahora que Apple está ejecutando algún tipo de análisis estático para verificar automáticamente el uso privado de API, varias personas han sido atrapadas debido a la biblioteca Three20. Utilizo otra biblioteca de terceros (que compilo a mí mismo desde el código) y me gustaría auditarla automáticamente para el uso privado de la API antes de enviarla a Apple, por lo que puedo eliminar/volver a escribir esas partes.Cómo detectar y evitar el uso de API privadas en bibliotecas de terceros

Si ejecuto nm en el archivo ejecutable de mi aplicación, obtengo una lista de símbolos, y veo símbolos allí que no uso. Por ejemplo, veo _AudioServicesPlaySystemSound, y si busco "AudioServicesPlaySystemSound" en XCode, no obtengo ningún resultado. ¿Hay alguna forma de discriminar automáticamente las llamadas a API privadas, por ejemplo, me doy cuenta de que Apple tiene la costumbre de nombrarlas con un guión bajo inicial?

Sin embargo, si incluyo deliberadamente una llamada a una API privada, no aparece en la salida de nm, pero sí aparece si ejecuto strings en el archivo binario. Basado en esto, una idea que tuve fue compilar una gran lista de todas las llamadas privadas de API en una tabla enorme, y buscarlas automáticamente en el resultado de strings. No he hecho eso todavía.

¿Alguien tiene alguna sugerencia sobre cómo detectar esto automáticamente, así que solo estoy pasando por el proceso de revisión una vez?

+0

¿Ellos se opone a Three20? Eso fue escrito por el desarrollador que creó la aplicación de Facebook para iPhone. Si su aplicación es rechazada debido a Three20, la aplicación de Facebook también debe ser ... Heh. Solo digo ;-) –

+0

Sí ... http://groups.google.com/group/three20/browse_thread/thread/c442af6e39a918b0/6d5046771539d139 –

+0

Imagino que la próxima vez que Facebook envíe una actualización, será rechazado si no usan la última versión que cumple con las políticas de Apple. – bpapa

Respuesta

4

Se podría intentar ejecutar nm en los archivos de objeto en lugar del ejecutable enlazado:

nm -g -j *.o | sort | uniq 

Los objetos deben estar en el subdirectorio build/<app>.build/*/<app>.build/Objects-normal.

Está viendo una referencia al AudioServicesPlaySystemSound porque una de las funciones a las que llamó llama a AudioServicesPlaySystemSound.

llamadas Objective C no se mostrarán generalmente en nm vertederos, tendrá que utilizar para que otool:

otool -ov <object file> 
3

Utilice esta herramienta dev, App Scanner. Escanea tu archivo .app para métodos API privados. Una versión futura también verificará las variables de instancia API privadas.

+1

Ese enlace se rompe. Pruebe esto: https://github.com/ChimpStudios/App-Scanner – chown

+0

¿Está funcionando realmente APP Scanner? Qué tan exacto es que el proyecto – Kiarash

+0

está muerto y no hay versiones. –

Cuestiones relacionadas