Comment déboguer les extensions iOS 8 avec NSLog?

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

dans viewDidLoad d'une extension iOS 8. le NSLog ne NSLog rien dans Xcode. NSLog fonctionne comme d'habitude dans l'application conteneur.

Comment puis-je get des messages de debugging à partir d'une extension?

  1. Le debugging fonctionne pour les extensions d'application.
  2. Cela fonctionne aussi sur le simulateur.
  3. Si votre application se bloque dans le simulateur, il peut s'avérer difficile de redémarrer votre application. Redémarrer votre simulateur est une solution rapide.
  4. Étapes pour déboguer une extension d'application:

    1) Exécutez l'application du conteneur. Au cours de cette étape, Xcode télécharge l'application du conteneur et l'extension de l'application sur le périphérique ou le simulateur.

    2) Arrêtez l'application du conteneur. Cette étape est importante lorsque vous déboguez dans un simulateur. Si vous ne le faites pas, Xcode vous dira que le simulateur est en cours d'utilisation.

    3) Dans Xcode, appuyez sur le menu Déboguer -> Attacher au process -> Par identificateur de process (PID) ou Nom …, entrez l'identifiant de l'application ext, par exemple com.abc.ContainerApp.MyExtension, pour lancer le debugging. Ne pas oublier de définir des points de rupture. (Mise à jour le 25 août 2014: vous pouvez entrer MyExtension (le nom de votre extension) directement.)

    4) Dans l'appareil ou le simulateur, ouvrez votre extension d'application.


Mises à jour le 23 août 2014:

J'ai trouvé les étapes de debugging ci-dessus ne fonctionnent pas bien sur Xcode 6 beta 6 avec iOS 8 SDK beta 5 sur le simulateur.

Solution:

  1. Exécutez votre extension dans le simulateur.
  2. Menu Xcode Debug -> Attach to Process -> Choisissez "MyExtension (nom de votre extension)" dans la section Système du menu.

Les points d'arrêt fonctionnent. Mais je ne sais pas pourquoi les journaux ne s'affichent pas dans la window de sortie.

J'ai aussi ce problème. Cela fonctionne pour moi si vous allez dans votre simulateur dans le menu Déboguer -> Ouvrir le journal système …

De là, vous pouvez voir tous les journaux de l'iPhone Simulator (inclus les journaux de votre extension).

entrez la description de l'image ici

NSLog fonctionne parfaitement .

Vous ne voyez pas ce qui est connecté dans la zone de debugging de Xcode car le débogueur Xcode n'est pas attaché à votre extension. Les extensions sont presque complètement indépendantes de leur application contenant. Ils ont des identifiants de packages séparés, par exemple, et ils sont également des process distincts sur le operating system.

J'ai eu un succès varié pour get Xcode à attacher aux extensions. Apparemment, il semble qu'il se connecterait automatiquement, et il apparaît dans le browser de debugging comme "Waiting to attach", mais ne s'attache jamais.

Parfois, je suis capable d'exécuter ma cible d'extension dans Xcode:

entrez la description de l'image ici

Et puis avoir la possibilité de choisir quelle application pour exécuter mon extension. Dans ce cas, je choisirais sa recommandation de "aujourd'hui", qui est le centre de notification.

entrez la description de l'image ici

Et puis il attacherait parfois le débogueur à mon extension. Notez que cette méthode ne fonctionne que sur les périphériques physiques, semble-t-il.

Si ce n'est pas le cas, vous pouvez utiliser la méthode d'attachement manuel dans la réponse de @ VinceYaun,

J'ai également eu un succès varié en utilisant d'autres methods d'attachement. La plupart ont échoué, et il semble que ce ne sont que des bugs qui seront corrigés à une date ultérieure.

Pour afficher vos messages de journal, allez dans Window -> Devices dans la barre supérieure et select votre appareil. Vous pouvez afficher le journal de l'appareil depuis le bas de cette window. Si vous testez sur un simulateur, vous pouvez utiliser la réponse de @ BalestraPasortingck.

Certains bogues ont été corrigés dans la version bêta 2, et je suppose que le débogueur s'attachera automatiquement au lancement de l'extension.

Mise à jour: Dans les notes de version iOS 8 Beta 4:

Extensions

Fixé en bêta 4

  • Les extensions échouent parfois lors du debugging à partir de Xcode.
  • Lorsque Extension avec UI est tué, il se relance et n'est pas rejeté.
  • Parfois, votre extension Partage ou Action peut être bloquée.
  • Le redeployment d'une extension peut la désactiver dans le centre de notifications.

J'ai aussi ce problème. Xcode n'attache jamais mon débogueur à l'extension ou affiche les messages NSLog. Si vous attachez votre débogueur Xcode manuellement à votre process d'extension, au less les points d'arrêt fonctionnent comme un charme:

 Debug->Attach to process->Your extension name (mine was "com.example.MyExtensionApp.MyExtension") 
  1. Créer un schéma pour votre extension
  2. Exécuter le schéma
  3. Dans une boîte de dialog, choisissez l'application de conteneur
  4. Prendre plaisir

Cela fonctionne pour moi 🙂

Xcode 8 est capable de déboguer les extensions:

  1. Choisissez le schéma d'extension dans la list déroulante à côté du button d'arrêt et exécutez-le.
  2. Sélectionnez l'application parente dans la boîte de dialog qui apparaît.

Résultat: les points d'arrêt et le journal fonctionnent comme d'habitude.

J'ai effectivement eu les journaux à exécuter tout simplement dans Xcode 6.3. Tout d'abord, créez et exécutez l'application contenant. Une fois que l'application contenant est en cours d'exécution sur l'appareil, créez et exécutez l'extension d'application en la modifiant à l'extension de l'application.

Apple possède une documentation directement liée au debugging, au profilage et au test de votre extension d'application.

La seule façon dont le debugging fonctionne pour moi est en sélectionnant Déboguer-> Attacher à Traiter par PID ou Nom Puis entrer le PID pas le nom de l'extension. Vous pouvez find le PID en exécutant l'extension sur un périphérique, allez dans Window-> Devices. Trouvez votre appareil et affichez la console. Lorsque vous voyez le nom de votre extension, il est suivi d'un nombre à 5 numbers. C'est le PID

J'ai également mis un tas de NSLog dans l'extension afin de find le PID aussi bien. C'est sur xCode 7

Ce qui m'a finalement permis de voir le journal dans la zone de debugging, basé sur la suggestion de Michael et la documentation d'Apple , est:

Créez et exécutez l'extension d'application dans le simulateur et, lorsque vous y êtes invité, choisissez l'application spécifique à partir de laquelle vous allez appeler l'extension . Dans mon cas, je lançais mon extension Action depuis Safari en tirant une feuille de partage sur un file PDF.

Ce qui ne fonctionnait pas auparavant consistait à suivre les suggestions d'autres personnes en utilisant Today comme hôte mais en quittant cette application et en passant par Safari pour appeler mon extension. Je n'ai même plus besoin d'exécuter mon application contenant avant de lancer l'extension.

De la documentation d'Apple:

Dans la phase d'exécution de votre schéma d'extension, vous spécifiez une application hôte en tant qu'exécutable. Lors de l'access à l'extension via l'interface user de l'hôte spécifié, le débogueur Xcode se connecte à l'extension.

Il est clair que quelque chose est cassé dans Xcode6-B5.

Si j'essaie d'exécuter une extension Photo sur le simulateur, je ne vois aucune photo.app comme une option pour le process d'attachement d'extension.

Options de débogage dans le simulateur

La même chose, en cours d'exécution sur un périphérique réel, me donne le bon comportement.

options de débogage avec un vrai périphérique

Dans le premier cas, aucun point d'arrêt n'est honoré. Dans ce dernier cas, les points de rupture fonctionnent comme un charme.

Vous devriez savoir que l'application et l'extension du conteneur sont totalement deux process de différence dans iOS alors que le LLVM ne débogue qu'un thread à la fois, donc lorsque vous déboguez, la console n'enregistre jamais l'extension et ne s'arrête jamais au point d'arrêt.

Vous pouvez résoudre la plupart des problèmes par la méthode de @Vince Yuan.

Cependant, mon problème est que le débogueur Xcode ne se connecte guère à l'extension de mon keyboard sur iOS Simulator et les périphériques, comme 1 fois en 7-8 runs, c'est totalement une question de probabilité. La méthode de @Vince Yuan fonctionne aussi parfois.

Ma petite expérience est que lorsque vous exécutez votre schéma de debugging, si la session de debugging dans le panneau de gauche montrant «Pas de session de debugging», il n'est pas nécessaire d'ouvrir votre extension et de le tester, le débogueur ne s'est pas connecté encore pour la chance.

mais quand vous voyez com.xxx.xxx.xxx attend Attacher, l'extension peut définitivement être déboguée.

C'est un petit truc pour qui ne peut pas déboguer l'extension iOS, en particulier l'extension du keyboard.

A partir de Xcode 6 Beta 5, j'ai pu utiliser un périphérique exécutant iOS8 pour déboguer mon extension. Essayez de l'exécuter sur un périphérique et select Safari pour lancer

Pour surmonter tous les états causés par l'évolution constante de l'IDE, j'utilise iOS Console par lemonjar.com – il affiche une window de console pour tous les messages iOS Syslog connectés, quel que soit l'ID du process. Vous pouvez voir les messages du journal de debugging de l'application et de l'extension à la fois ici.

Une astuce qui fonctionne pour moi (bien que ce soit plutôt moche) consiste à placer un UILabel factice quelque part dans le coin inférieur de mon extension. Je l'appelle habituellement logLabel . Il est alors possible de mettre à jour le text de cette label avec n'importe quelle instruction de journal que vous voulez être connecté. Une telle approche n'est pas très bonne si vous devez consigner des instructions à partir d'instances de différentes classs. Et, évidemment, cela encombre votre interface user.

Cependant, si vous avez un widget assez simple et que cela ne vous dérange pas d'un léger encombrement de l'interface user, cela fait l'affaire. J'ai essayé toutes les autres solutions décrites dans cette discussion et, malheureusement, aucun d'eux n'a fonctionné pour moi.