- (void)viewDidLoad
{
NSLog(@"%s", __func__);
// ...
}
dans viewDidLoad
une extension iOS 8 . les NSLog
sorties rien dans Xcode. NSLog
fonctionne comme d'habitude dans l'application conteneur.
Comment puis-je obtenir la sortie des messages de débogage d'une extension?
Réponses:
Étapes pour déboguer une extension d'application:
Exécutez l'application conteneur. Au cours de cette étape, Xcode télécharge l'application conteneur et l'extension d'application sur l'appareil ou le simulateur.
Arrêtez l'application conteneur. Cette étape est importante lorsque vous déboguez dans le simulateur. Si vous ne le faites pas, Xcode vous indiquera que le simulateur est en cours d'utilisation.
Dans Xcode, appuyez sur le menu Debug -> Attach to Process -> By Process Identifer (PID) or Name ..., saisissez l'identifiant de l'application ext, par exemple com.abc.ContainerApp.MyExtension, pour démarrer le débogage. N'oubliez pas de définir des points d'arrêt. (Mise à jour du 25 août 2014: vous pouvez saisir MyExtension (le nom de votre extension) directement.)
Dans l'appareil ou le simulateur, ouvrez votre extension d'application.
Mises à jour du 23 août 2014:
J'ai trouvé que les étapes de débogage ci-dessus ne fonctionnaient pas bien sur Xcode 6 beta 6 avec iOS 8 SDK beta 5 sur le simulateur.
Solution:
Les points d'arrêt fonctionnent. Mais je ne sais pas pourquoi les journaux ne s'affichent pas dans la fenêtre de sortie.
la source
J'ai ce problème aussi. Cela fonctionne pour moi si vous allez dans votre simulateur sous le menu Déboguer -> Ouvrir le journal système ...
De là, vous pouvez voir tous les journaux du simulateur iPhone (y compris les journaux de votre extension).
la source
NSLog
fonctionne parfaitement .Vous ne voyez tout simplement pas ce qui est enregistré dans la zone de débogage 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 bundle séparés, par exemple, et ce sont également des processus séparés sur le système d'exploitation.
J'ai eu des succès variés en obtenant Xcode pour attacher aux extensions. Apparemment, il semble qu'il s'attacherait automatiquement, et il apparaît dans le navigateur de débogage comme "En attente d'attachement", mais ne se joint jamais.
Parfois, je suis capable d'exécuter ma cible d'extension dans Xcode:
Et puis avoir la possibilité de choisir dans quelle application exécuter mon extension. Dans ce cas, je choisirais sa recommandation «aujourd'hui», qui est le centre de notification.
Et puis il attachait parfois le débogueur à mon extension. Notez que cette méthode ne fonctionne que sur les appareils physiques, semble-t-il.
S'il ne se joint pas, vous pouvez utiliser la méthode d'attachement manuel dans la réponse de @ VinceYaun,
J'ai également eu des succès variés en utilisant d'autres méthodes d'attachement. La plupart ont échoué, et il semble que ce ne sont que des bogues qui seront corrigés ultérieurement.
Pour afficher vos messages de journal, accédez à
Window
->Devices
dans la barre supérieure et sélectionnez votre appareil. Vous pouvez afficher le journal de l'appareil à partir du bas de cette fenêtre. Si vous testez sur un simulateur, vous pouvez utiliser la réponse de @ BalestraPatrick .Certains bogues ont été corrigés dans la bêta 2, et je suppose que le débogueur finira par s'attacher automatiquement lors du lancement de l'extension.
Mise à jour: dans les notes de publication d' iOS 8 Beta 4 :
la source
J'ai ce problème aussi. Xcode n'attache jamais mon débogueur à l'extension ni n'affiche les messages NSLog. Si vous attachez manuellement votre débogueur Xcode à votre processus d'extension, au moins les points d'arrêt fonctionnent comme un charme:
la source
Cela fonctionne pour moi :)
la source
NSLog
ne fonctionnera que si vous exécutez l'application conteneur. Cela ne fonctionnera pas si vous exécutez l'extension d'application au lieu du conteneur.Xcode 8 est capable de déboguer les extensions:
Résultat: les points d'arrêt et le journal fonctionnent comme d'habitude.
la source
Ce qui m'a finalement permis de voir le journal dans la zone de débogage, sur la base de la suggestion de Michael et de la documentation d'Apple , est:
Créez et exécutez l'extension d'application dans le simulateur et, lorsque vous êtes invité à indiquer une application hôte, choisissez l'application spécifique à partir de laquelle vous allez appeler l'extension . Dans mon cas, je lançais mon extension Action à partir de Safari en tirant une feuille de partage sur un PDF.
Ce qui ne fonctionnait pas auparavant, c'était de suivre les suggestions d'autres personnes d'utiliser Today en tant qu'hôte, puis de quitter cette application et de passer à Safari pour appeler mon extension. Je n'ai même plus besoin d'exécuter mon application conteneur avant d'exécuter l'extension.
À partir de la documentation Apple:
la source
En fait, j'ai 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 conteneur est en cours d'exécution sur l'appareil, créez et exécutez l'extension d'application en modifiant le schéma en extension d'application.
Apple dispose d'une documentation directement liée au débogage, au profilage et au test de votre extension d'application.
la source
Une astuce qui fonctionne pour moi (même si elle est assez moche) est de placer un mannequin
UILabel
quelque part dans le coin inférieur de mon extension. Je l'appelle habituellementlogLabel
. Il est alors possible de mettre à jour le texte de cette étiquette avec n'importe quelle instruction de journal que vous souhaitez enregistrer. Une telle approche n'est pas très bonne si vous avez besoin de consigner des instructions à partir d'instances de différentes classes. Et, évidemment, cela encombre votre interface utilisateur.Cependant, si vous avez un widget assez simple et que le léger encombrement de l'interface utilisateur ne vous dérange pas, cela fera l'affaire. J'ai essayé toutes les autres solutions décrites dans cette discussion et, malheureusement, aucune d'elles n'a fonctionné pour moi.
la source
La seule façon dont le débogage fonctionne pour moi est de sélectionner Debug-> Attach To Process By PID ou Name Puis entrez le PID et non le nom de l'extension. Vous pouvez trouver le PID en exécutant l'extension sur un appareil, allez dans Fenêtre-> Appareils. Trouvez votre appareil et affichez la console. Lorsque vous voyez le nom de votre poste, il est suivi de 5 chiffres. C'est le PID
J'ai également mis un tas de NSLog dans l'extension afin de trouver également le PID. C'est sur xCode 7
la source
Rencontrez le même problème concernant l'extension pour
NSLog
et les points d'arrêt. Je l'ai combattu pendant plusieurs jours.Device log
peut être trouvé comme image suivante. C'est àXCode -> Window -> Devices and Simulators
.Après avoir entré le
Open Console
, il y a un champ de recherche en haut à droite de la boîte de dialogue. Je peux appliquer la règle de filtrage là-dedans. Par exemple, un nom de processus contientNotification
un mot clé ou le nom de processus doit être égal au nom de la cible d'extension, ex: égal auMyNotificationServiceExtension
nom du processus.la source
Il est clair que quelque chose est cassé dans Xcode6-B5.
Si j'essaie d'exécuter une extension de photo sur le simulateur, je ne peux voir aucun Photos.app comme option pour le processus d'attachement d'extension.
Le même, fonctionnant sur un vrai appareil, me donne le bon comportement.
Dans le premier cas, aucun point d'arrêt n'est respecté. Dans ce dernier cas, les points d'arrêt fonctionnent comme un charme.
la source
Vous devez savoir que l'application conteneur et l'extension sont totalement deux processus de différence dans iOS tandis que LLVM ne débogue qu'un thread à la fois, donc lorsque vous déboguez, la console ne consigne jamais l'extension et ne s'arrête jamais au point d'arrêt.
Vous pouvez résoudre la plupart des problèmes avec la méthode de @Vince Yuan.
Cependant, mon problème est que le débogueur Xcode ne s'accroche guère à mon extension de clavier à la fois sur le simulateur iOS et sur les appareils, comme 1 fois sur 7-8, c'est totalement une question de probabilité. La méthode de @Vince Yuan ne fonctionne que parfois.
Ma petite expérience est que lorsque vous exécutez votre schéma de débogage, si la session de débogage dans le panneau de gauche montre que `` Aucune session de débogage '', il n'est pas nécessaire d'ouvrir votre extension et de la tester, le débogueur ne s'est pas connecté, exécutez simplement encore une fois pour la chance.
mais quand vous voyez que com.xxx.xxx.xxx attend Attacher, l'extension peut certainement être déboguée.
C'est une petite astuce pour qui ne peut pas déboguer l'extension iOS, en particulier l'extension du clavier.
la source
Depuis Xcode 6 Beta 5, j'ai pu utiliser un appareil réel exécutant iOS8 pour déboguer mon extension. Essayez de l'exécuter sur un appareil et sélectionnez Safari pour lancer
la source
Pour surmonter tous les états causés par l'EDI en constante évolution, j'utilise la console iOS de lemonjar.com - il affiche une fenêtre de console pour tout appareil iOS connecté rendant des messages syslog quel que soit l'ID de processus. Vous pouvez voir les messages du journal de débogage des applications et des extensions à la fois ici.
la source
Je pourrais déboguer mon extension de la manière que je décris ci-dessous:
Debug
->Attach to process by PID or Name
. Le nom de votre schéma d'extension.main app target
et exécutez.J'espère que cela fonctionne aussi pour vous les gars.
la source