2011-07-13 12 views
10

Estoy trabajando para crear una biblioteca estática de iOS que deseo vender. He recorrido los pasos para las compilaciones iniciales y he generado la salida .a/.h.Ocultar código en la biblioteca estática (iOS Obj-C)

Cuando incluyo estos archivos en un proyecto separado, no veo ninguna forma de explorar los contenidos en el archivo .a.

SIN EMBARGO, cuando una línea de código en mi biblioteca bloquea la aplicación (como he dicho, todavía está en desarrollo), el depurador muestra todo el archivo de clase (.m) para mí. ¿Qué pasa con esto?

Realmente no entiendo todo lo que entra en las bibliotecas estáticas, y no estoy seguro de haber compilado esa versión tanto para el simulador como para el dispositivo. ¿Podría eso tener algo que ver con eso? Si es así, ¿podría alguien explicar por qué?

Gracias !!!

+0

Elimina el directorio dSYM asociado a tu biblioteca, bloquea tu aplicación, no hay fuentes. Es decir. el dSYM - la tabla de símbolos - proporciona un mapa entre la biblioteca y la fuente. – bbum

+0

El depurador le muestra el archivo en su proyecto de Xcode. El código fuente no está almacenado en el archivo .a. (Hacerlo causaría un "código inflado" masivo y por lo tanto es obviamente indeseable incluso sin tener en cuenta el problema de seguridad). –

Respuesta

18

No se preocupe, su código fuente no está incluido en el archivo (.a).

Xcode es lo suficientemente inteligente como para encontrar el archivo de código fuente en su computadora, basado en la información de depuración incorporada en el archivo. Si construye la biblioteca usando la configuración "Release" (o modifica la configuración de compilación para que los símbolos de depuración se eliminen) y no tiene la fuente en ningún lugar de la máquina, un desarrollador tendrá que recurrir a su conocimiento de x86 o ARM ensamble para descubrir cómo funciona su código.

Por cierto:

  • Dado que una gran cantidad de Objective-C se maneja en tiempo de ejecución, una gran cantidad de nombres genéricos y nombres selector será visible en su biblioteca. Así es como funciona. Podrías tratar de ofuscarlo, pero creo que es mejor dedicar tu tiempo a escribir un código más útil para vender.

  • Si desea dar a la gente una biblioteca estática para el desarrollo de iOS, quiere construir versiones para el simulador de iOS (86) y el dispositivo iOS (brazo) y luego usar lipo combinarlas en una sola grasa biblioteca estática. Busca "lipo xcode fat static library" para conocer diferentes formas de hacerlo. Algunas soluciones son más intrincadas que otras.

+1

objetivo c lo hace fácil ya que carga la información de la persona que llama directamente en los registros :) –

+0

OK, entonces usted dice que XCode en realidad está buscando en mi computadora el código fuente. ¿SÓLO ME DOBLA?!?! @ !? He mirado alrededor y he visto "construir una biblioteca gorda", pero aún estoy bastante adelantado en el proceso y sobre todo sigo probando mi biblioteca. Básicamente, 1. Cree en el modo de lanzamiento (para el simulador y el dispositivo), 2. Importe la biblioteca en un proyecto separado, 3. Asegúrese de que la fuente no esté en la máquina, y 4. No podré examinar la clase si falla? ¡Guay! ¡Gracias! – mbm29414

+0

Si se produce un error, obtiene un error pero no en un lugar específico, lo más probable es que le proporcione la dirección del error y tal vez los datos que causaron el error (dirección no válida o algo así) –

0

Si usted tiene un proyecto de biblioteca estática con todos los archivos .m en su computadora, entonces cada copia de esta biblioteca (.a archivo) se symbolicated con su archivo .m durante la depuración en Xcode.

xCode no busca el archivo .m apropiado en todo su disco. Conoce el lugar del proyecto original. Entonces, si distribuye solo la biblioteca, oculta completamente su código inicial.

Para asegurarse de que puede copiar su biblioteca en algún proyecto nuevo, borre el archivo .m en el proyecto de biblioteca. A partir de este momento, cualquier intento de depurar métodos de la biblioteca dará un archivo vacío en la pantalla.

enter image description here

3

que tenían el mismo problema. @benzado tiene razón sobre lo que ha mencionado. Pero tuve que quitar los símbolos de depuración para resolver el problema. Para hacerlo, tuve que cambiar Configuración de compilación de la biblioteca del proyecto antes de compilar como se menciona a continuación.

Seleccione su Target y vaya a Build Settings.Establecer

  1. 'Símbolos de Gaza de depuración durante la copia' a
  2. 'Información de Depuración Formato' a 'enano con dSYM File'
  3. 'Generar Símbolos de depuración 'a' N O '
  4. ' Símbolos ocultos por defecto 'a' '

Para ver cuáles son estos para, consulte Apple Build Setting Reference

Y construir la biblioteca utilizando el "Release" configuración. Esto funcionó para mí.

Cuestiones relacionadas