¿Cómo puedo depurar en un marco en Xcode?

Tengo dos proyectos, uno es el networkLib para inicio de session y otra function de networking, el otro es el uso de usingLibDemo . Entonces tengo todo el código fuente de ambos proyectos.

El proyecto networkLib produce un marco, llamado myNetKit.framework , que se utiliza mediante el uso de usingLibDemo .

introduzca la descripción de la imagen aquí

Ahora utilizo con éxito myNetKit.framework para iniciar session, pero a veces se bloquea, tal vez en main () sin información de stack, pero a veces Xcode me da la información de la stack como a continuación:

introduzca la descripción de la imagen aquí

Entonces sé dónde falla:

introduzca la descripción de la imagen aquí

Pero Utils.m no está expuesto, ¿cómo Xcode obtiene la información de la stack y la línea de falla y, finalmente, abre el file fuente para mí? ¿Porque tengo el código fuente en mi disco?

Si es así, ¿cómo puedo depurar el myNetKit.framework paso a paso, cuando no se myNetKit.framework ?

Muchas gracias por cualquier consejo.

También puede agregar todo el proyecto de la biblioteca ( networkLib ) a su proyecto y vincular la biblioteca dinámicamente agregando dependencia en la configuration del proyecto. Entonces puedes tener todo el código fuente dentro de tu proyecto. Entonces puede depurarlo en time de ejecución.

Si alguien tuviera la misma pregunta en el futuro (ahora estoy usando Xcode 8):

Usted puede:

  1. Cree su proyecto marco (en este ejemplo, "networkLib")
  2. copie la salida del proyecto ("myNetKit.framework") al proyecto de destino ("usingLibDemo")
  3. ejecute el proyecto de destino ("usingLibDemo") en su dispositivo
  4. detener el process
  5. Inicie la aplicación desde su dispositivo manualmente ("usingLibDemo")
  6. abrir un proyecto de marco y adjuntar a process de su aplicación (iniciado en el paso 5). En Xcode 8: Depurar-> Adjuntar a process-> Seleccione el nombre de su aplicación.

No olvide establecer algunos puntos de interrupción en su proyecto marco.

Cuando la biblioteca está construida con todos los símbolos, contiene routes completas para cada file fuente embedded en sí mismo. De hecho, puede ver esto si abre el .a con un visor hexadecimal. Con esto en su lugar, el XCode sabrá cómo llegar al file fuente.

Establecer puntos de ruptura es un poco más desafiante. Básicamente, debes hacer que XCode descubra lentamente los files de origen de tu biblioteca introduciendo methods en esos files. Una vez que XCode ha abierto el file, puede establecer el punto de interrupción en cualquier lugar.

Es un poco doloroso, pero funciona y no tienes que convertir el proyecto de la biblioteca en un subproyecto si no quieres.

Use XCode Workspace cuando maneje proyectos de frameworks múltiples. Cuando use un área de trabajo, los puntos de interrupción funcionarán y podrá encontrar su falla sin una gran cantidad de debugging de ida y vuelta. Será mucho más fácil administrar sus frameworks en el largo ploop.

Debe depurar el proyecto networkLib que produce el marco por separado. El marco no tiene una estructura similar a la de la aplicación, por lo que no se puede depurar un file de marco dentro de otro proyecto.