web-dev-qa-db-fra.com

Application de débogage lorsqu'elle est lancée par notification push

Je développe actuellement une application qui reçoit des notifications push. Je fais tout cela à 100% via une page PHP. Il existe plusieurs types de notifications Push que mon application peut recevoir. Le PHP gère cela et envoie différents des paquets d'informations sur mon application qui sont tous très bien reçus.

Cependant, lorsque les utilisateurs "consultent" la notification et que mon application démarre, je veux évidemment prendre une action différente de celle que je ferais si l'utilisateur venait de lancer l'application manuellement - et en plus de cela, différentes actions selon le type de notification Push. J'ai bien fonctionné ... structurellement.

L'un de mes types Push est censé ouvrir une UIView qui établit plusieurs connexions avec plusieurs serveurs différents et négocie les données dans les deux sens. Cette UIView fonctionne bien lorsque, par exemple, elle est déclenchée à partir du menu principal - cependant, lorsque ma notification Push déclenche l'apparition de cette UIView, les connexions de socket n'agissent pas comme prévu.

Maintenant, ma question ne concerne pas les sockets, mais plus encore - Comment déboguez-vous un tel problème ?? D'après ce que je peux dire (je suis relativement nouveau) lorsque l'application lancée à partir d'une notification Push, il n'y a aucun moyen de lier cette exécution au débogueur/console/etc ... J'ai du mal à essayer de déboguer le code en utilisant UIAlertViews, car il existe de nombreuses voies de communication entre les différents serveurs.

Tout conseil que vous auriez pour moi serait grandement apprécié.

131
Dutchie432

Dans XCode <4.0 (pour XCode> = 4, voir la réponse par delirus ci-dessous), vous pouvez maintenant configurer Xcode pour attacher le débogueur à l'application après l'avoir lancée, au lieu de lancer l'application via le débogueur. Cela vous permet de déboguer des éléments qui varient en fonction de l'état de lancement de votre application, tels que les schémas d'URL, les tableaux de montage et les notifications Push.

  1. Dans Xcode, regardez dans la barre Source, et sous les cibles, il y aura des exécutables.
  2. Affichez l'inspecteur de votre application dans les exécutables.
  3. Cliquez sur l'onglet de l'onglet Débogage dans l'inspecteur.
  4. Décochez "Démarrer l'exécutable après le démarrage du débogueur"
  5. Cochez la case "Attendre le prochain lancement/Notification push"

Maintenant, lorsque vous cliquez sur déboguer à partir de Xcode au lieu de lancer l'application, une fenêtre s'affiche indiquant qu'elle attend le lancement de l'application. Vous lancez ensuite l'application normalement sur le téléphone et Xcode s'y attache

144
Louis Gerbarg

Pour Xcode 4, vous devez:

  1. Modifiez votre schéma actif via la liste déroulante "Schémas". (+<)
  2. Ensuite, choisissez votre produit - "Exécuter MyApp.app" sur la gauche.
  3. Sélectionnez l'onglet "Info" à droite.
  4. Et enfin, choisissez l'option "Attendre le lancement de MyApp.app".

Plus ici dans la section "Personnaliser les exécutables dans l'éditeur de schéma".

MODIFIER:
Dans le cas où vous manquez les journaux dans GDB, voir commentaire de Louis Gerbarg à sa réponse.

120
matm

Pour XCode 10, 9, 8, 7 & 6:

  1. Sélectionnez le schéma dans la barre d'outils (juste à gauche de l'appareil avec lequel vous déboguez)
  2. Choisissez Modifier le schéma
  3. Sélectionnez Exécuter dans le panneau de gauche
  4. Pour l'option Launch, sélectionnez Attendez que l'exécutable soit lancé
  5. Fermez l'éditeur de schéma et Exécuter votre projet XCode

Vous pouvez désormais déboguer lors du lancement à partir d'une notification, d'une URL personnalisée ou en touchant l'icône de l'application.

109
bgolson

Je ne travaille pas avec les notifications Push, donc je ne connais pas le fonctionnement exact des notifications Push. Cependant, j'essayerais d'imiter la réception d'une notification Push en laissant la méthode principale de votre programme prétendre qu'une notification a été publiée si possible, ou en appelant l'application: méthode didFinishLaunchingWithOptions: UIApplicationDelegate à partir de la méthode applicationDidFinishLaunching :.

HTH - Santé, Daan

3
drvdijk

Dans Xcode 6:

  1. connecter l'iPhone au Macbook avec USB
  2. lancez l'application sur l'iPhone en appuyant sur l'icône
  3. Dans le menu Xcode, Debug> Attach to Process> Choisissez votre application
3
Ali Saeed