usan tipos que program las kits extensions extension developer archivos apple aplicaciones ios ios8 xcode6 ios-app-extension

que - tipos de archivos de ios



Cómo depurar extensiones de iOS 8 con NSLog? (16)

- (void)viewDidLoad { NSLog(@"%s", __func__); // ... }

en viewDidLoad de una extensión iOS 8. el NSLog no genera nada en Xcode. NSLog funciona como siempre en la aplicación de contenedor.

¿Cómo puedo obtener resultados de los mensajes de depuración de una extensión?


  1. Crear esquema para su extensión
  2. Ejecutar esquema
  3. En un diálogo, elige la aplicación contenedor
  4. Disfrutar

Funciona para mí :)


  1. La depuración funciona para las extensiones de aplicaciones.
  2. Funciona en el simulador también.
  3. Si su aplicación falla en el simulador, puede encontrar que no es fácil reiniciar su aplicación. Reiniciar su simulador es una solución rápida.
  4. Pasos para depurar una extensión de aplicación:

    1) Ejecuta la aplicación contenedor. En este paso, Xcode carga la aplicación del contenedor y la extensión de la aplicación al dispositivo o simulador.

    2) Detener la aplicación de contenedor. Este paso es importante cuando depura en el simulador. Si no lo haces, Xcode te dirá que el simulador está en uso.

    3) En Xcode, presione Menú Depurar -> Adjuntar a proceso -> Por identificador de proceso (PID) o Nombre ..., ingrese el identificador de la aplicación ext, por ej. Com.abc.ContainerApp.MyExtension, para comenzar la depuración. No te olvides de establecer puntos de ruptura. (Actualización el 25 de agosto de 2014: puede ingresar MyExtension (el nombre de su extensión) directamente).

    4) En el dispositivo o simulador, abra su extensión de aplicación.

Actualizaciones el 23 de agosto de 2014:

Descubrí que los pasos de depuración anteriores no funcionan bien en Xcode 6 beta 6 con iOS 8 SDK beta 5 en el simulador.

Solución:

  1. Ejecuta tu extensión en el simulador.
  2. Menú Xcode Depurar -> Adjuntar a proceso -> Elija "Mi extensión (el nombre de su extensión)" en la sección Sistema en el menú.

Los puntos de ruptura funcionan. Pero no sé por qué los registros no se muestran en la ventana de salida.


A partir de Xcode 6 Beta 5, he podido usar un dispositivo real que ejecuta iOS8 para depurar mi extensión. Intente ejecutarlo en un dispositivo y seleccione Safari para iniciar en


Claramente, algo está roto en Xcode6-B5.

Si trato de ejecutar una extensión de foto en el simulador, no puedo ver ninguna Photos.app como una opción para el proceso de conexión de extensiones.

Lo mismo, corriendo en un dispositivo real, me da el comportamiento correcto.

En el primer caso, cualquier punto de quiebre no es honorado. En este último caso, los puntos de interrupción funcionan como un encanto.



Debe saber que la aplicación y la extensión de contenedor son totalmente dos procesos diferenciados en iOS, mientras que LLVM solo depura un subproceso una vez, por lo que cuando está depurando, la consola nunca registra la extensión y nunca se detiene en el punto de interrupción.

Puedes resolver la mayoría de los problemas con el método de @Vince Yuan.

Sin embargo, mi problema es que el depurador de Xcode apenas se engancha en mi extensión de teclado tanto en iOS Simulator como en dispositivos, como 1 vez en 7-8 ejecuciones, es totalmente una cuestión de probabilidad. El método de @Vince Yuan también funciona solo por algunas veces.

Mi pequeña experiencia es que cuando ejecutas el esquema de depuración, si la sesión de depuración en el panel izquierdo muestra que ''No hay sesión de depuración'', no hay necesidad de abrir la extensión y probarla, el depurador no se enganchó, simplemente ejecuta de nuevo por suerte.

pero cuando ve que com.xxx.xxx.xxx está esperando para adjuntar, la extensión definitivamente puede ser eliminada.

Este es un pequeño truco para quienes no pueden depurar la extensión de iOS, especialmente la extensión de teclado.


Encuentra el mismo problema con la extensión de NSLog y los puntos de quiebre. Lo he luchado con muchos días.

Device log se puede encontrar como la siguiente imagen. Está en XCode -> Window -> Devices and Simulators .

Después de ingresar a la Open Console , hay un campo de búsqueda en la esquina superior derecha del cuadro de diálogo. Puedo aplicar la regla de filtro allí. Por ejemplo, un nombre de proceso contiene la palabra clave de Notification o el nombre del proceso debe ser igual al nombre del destino de la extensión, por ejemplo: igual al nombre del proceso de extensión MyNotificationServiceExtension .


Estoy teniendo este problema también. Funciona para mí si vas en tu Simulador en el menú Depurar -> Abrir registro del sistema ...

Desde aquí puede ver todos los registros del simulador de iPhone (incluidos los registros de su extensión).


Estoy teniendo este problema también. Xcode nunca conecta mi depurador a la extensión o muestra mensajes NSLog. Si adjuntas tu depurador de Xcode manualmente a tu proceso de extensión, al menos los puntos de interrupción funcionan como un amuleto:

Debug->Attach to process->Your extension name (mine was "com.example.MyExtensionApp.MyExtension")


La única forma de que la depuración me funcione es seleccionando Depurar-> Adjuntar a proceso por PID o Nombre Luego, ingrese el PID, no el nombre de la extensión. Puede encontrar el PID ejecutando la extensión en un dispositivo, vaya a Ventana-> Dispositivos. Encuentra tu dispositivo y mira la consola. Cuando vea el nombre de su extensión, será seguido por un número de 5 dígitos. Ese es el PID

También puse un montón de NSLog en la extensión para encontrar el PID también. Esto está en xCode 7


Lo que finalmente me permitió ver el registro en el área de depuración, basado en la sugerencia de Michael y la documentación de Apple , es:

Cree y ejecute la extensión de la aplicación en el simulador y, cuando se le solicite una aplicación host, elija la aplicación específica desde la que va a llamar a la extensión . En mi caso, estaba lanzando mi extensión de Acción de Safari al levantar una hoja para compartir en un PDF.

Lo que antes no funcionaba era seguir las sugerencias de otras personas de utilizar Today como el anfitrión, pero luego abandonar esa aplicación e ir a Safari para llamar a mi extensión. Ya no necesito ejecutar mi aplicación que contiene antes de ejecutar la extensión.

De la documentación de Apple:

En la fase Ejecución de su esquema de extensión, especifica una aplicación de host como el ejecutable. Al acceder a la extensión a través de la interfaz de usuario del host especificado, el depurador de Xcode se conecta a la extensión.


Para superar todos los estados causados ​​por el cambio constante de IDE, estoy usando iOS Console por lemonjar.com - muestra una ventana de consola para cualquier dispositivo iOS conectado que represente mensajes syslog independientemente del ID del proceso. Puede ver los mensajes de registro de depuración tanto de aplicación como de extensión a la vez aquí.


Podría depurar mi extensión con la forma que describo a continuación:

  1. Xcode : Debug -> Attach to process by PID or Name . El nombre de su esquema de extensión.
  2. A continuación, selecciona el main app target tu main app target y ejecuta.

Espero que también funcione para ustedes.


Un truco que funciona para mí (aunque es bastante feo) es colocar un UILabel ficticio en algún lugar en la esquina inferior de mi extensión. Yo generalmente lo llamo logLabel . Entonces es posible actualizar el texto de esta etiqueta con cualquier declaración de registro que desee registrar. Tal enfoque no es muy bueno si necesita registrar declaraciones de instancias de diferentes clases. Y, obviamente, desordena su UI.

Sin embargo, si tienes un widget bastante simple y no te importa un ligero desorden de la interfaz de usuario, este es el truco. He intentado todas las demás soluciones esbozadas en esta discusión y, lamentablemente, ninguna de ellas me funcionó.


Xcode 8 puede depurar extensiones:

  1. Elija el esquema de extensión en el combo al lado del botón de detención y ejecútelo.
  2. Seleccione la aplicación principal en el cuadro de diálogo que aparece.

Resultado: los puntos de interrupción y el registro funcionan como siempre.


NSLog funciona a la perfección .

Simplemente no ve lo que se registra en el área de depuración de Xcode porque el depurador de Xcode no está conectado a su extensión. Las extensiones son casi completamente independientes de su aplicación contenedora. Tienen identificadores de paquetes separados, por ejemplo, y también son procesos separados en el sistema operativo.

He tenido un éxito variado al hacer que Xcode se adjunte a extensiones. Supuestamente parece que se adjuntaría automáticamente, y aparece en el navegador de depuración como "Esperando adjuntar", pero nunca se adjunta.

A veces, puedo ejecutar mi objetivo de extensión en Xcode:

Y luego tengo la opción de elegir en qué aplicación ejecutar mi extensión. En este caso, elegiría su recomendación de "hoy", que es el centro de notificaciones.

Y luego, a veces adjuntaba el depurador a mi extensión. Tenga en cuenta que este método solo funciona en dispositivos físicos, parece.

Si no se conecta, puede usar el método de fijación manual en la respuesta de @VinceYaun,

También he tenido un éxito variado usando otros métodos de fijación. La mayoría no han tenido éxito, y parece que son solo errores que se corregirán en una fecha posterior.

Para ver sus mensajes de registro, vaya a Window -> Devices en la barra superior y seleccione su dispositivo. Puede abrir el registro del dispositivo desde la parte inferior de esa ventana. Si está probando en un simulador, puede usar la answer @ BalestraPatrick.

Algunos de los errores se han solucionado en Beta 2, y creo que con el tiempo el depurador se conectará automágicamente al iniciar la extensión.

Actualización: en las notas de la versión iOS 8 Beta 4:

Extensiones

Solucionado en beta 4

  • Las extensiones a veces no se inician cuando se depura desde Xcode.
  • Cuando la extensión con UI se elimina, se relanza y no se descarta.
  • En ocasiones, su extensión Compartir o Acción puede colgarse.
  • Volver a desplegar una extensión puede deshabilitarla en el Centro de notificaciones.