Debugging-App beim Start per Push-Benachrichtigung

135

Ich entwickle derzeit eine App, die Push-Benachrichtigungen erhält. Ich habe dies alles 100% über eine PHP-Seite arbeiten. Es gibt verschiedene Arten von Push-Benachrichtigungen, die meine App erhalten kann. Das PHP kümmert sich darum und sendet verschiedene Informationspakete an meine App, die alle einwandfrei empfangen werden.

Wenn die Benutzer die Benachrichtigung "anzeigen" und meine App gestartet wird, möchte ich natürlich eine andere Aktion ausführen als wenn der Benutzer die App nur manuell gestartet hätte - und zusätzlich unterschiedliche Aktionen, abhängig vom Push-Benachrichtigungstyp. Ich habe das gut funktioniert ... strukturell.

Einer meiner Push-Typen soll eine UIView öffnen, die mehrere Verbindungen zu mehreren verschiedenen Servern herstellt und Daten hin und her aushandelt. Dieses UIView funktioniert einwandfrei, wenn es beispielsweise über das Hauptmenü ausgelöst wird. Wenn jedoch meine Push-Benachrichtigung das Erscheinen dieses UIView auslöst, verhalten sich die Socket-Verbindungen nicht wie erwartet.

Jetzt geht es bei meiner Frage nicht um die Sockets, sondern um die Frage: Wie können Sie ein solches Problem beheben? Nach allem, was ich sagen kann (ich bin relativ neu), wenn die App über eine Push-Benachrichtigung gestartet wird, gibt es keine Möglichkeit, diese Ausführung mit dem Debugger / der Konsole / etc zu verknüpfen. Es fällt mir sehr schwer, den Code mit zu debuggen UIAlertViews, da zwischen den verschiedenen Servern viele Kommunikationswege hin und her bestehen.

Jeder Rat, den Sie für mich haben, wäre sehr dankbar.

Dutchie432
quelle

Antworten:

147

In XCode <4.0 (für XCode> = 4 siehe Antwort durch Delirus unten) können Sie Xcode jetzt so konfigurieren, dass der Debugger nach dem Start an die App angehängt wird, anstatt die App über den Debugger zu starten. Auf diese Weise können Sie Dinge debuggen, die je nach Startstatus Ihrer Anwendung variieren, z. B. URL-Schemata, Pasteboards und Push-Benachrichtigungen.

  1. Im Xcode-Look in der Quellleiste und unter den Zielen befinden sich ausführbare Dateien.
  2. Rufen Sie den Inspektor für Ihre App in ausführbaren Dateien auf.
  3. Klicken Sie im Inspektor auf die Registerkarte Debugging.
  4. Deaktivieren Sie "Start ausführbare Datei nach dem Start des Debuggers"
  5. Aktivieren Sie das Kontrollkästchen "Auf nächsten Start / Push-Benachrichtigung warten".

Wenn Sie jetzt auf Debuggen von Xcode klicken, anstatt die App zu starten, wird ein Fenster angezeigt, das darauf hinweist, dass es auf den Start der App wartet. Anschließend starten Sie die App normal auf dem Telefon und Xcode wird daran angehängt

Louis Gerbarg
quelle
37
Ich weiß, dass dies vielleicht nicht angemessen ist, aber ich liebe dich. :)
Dutchie432
17
Wenn Sie auf diese Weise starten, werden stdin, stdout und stderr Ihrer Anwendung nicht in die GDB-Konsole geleitet, sondern zeigen, wo sie sich bei einem normalen App-Start befinden. Sie können NSLogs () in der Systemkonsole des Geräts anzeigen, indem Sie sich das Gerät im Organizer ansehen.
Louis Gerbarg
1
Sie haben mir hier einige sehr wertvolle Punkte beigebracht. DANKE. Ich habe in den letzten 2 Tagen versucht, etwas zu debuggen, das ich innerhalb von 20 Minuten nach Ihrem Beitrag beheben konnte.
Dutchie432
1
@stigi arbeitet im Simulator für mich zum Testen von URL-Schemata. Ich benutze Xcode 4.5, wenn das wichtig ist
Dreyln
1
@dreyln mein Kommentar war von 2009 :) seitdem hat sich viel geändert. Aber danke für das Heads Up!
Stigi
124

Für Xcode 4 müssen Sie:

  1. Bearbeiten Sie Ihr aktives Schema über die Dropdown-Liste "Schemata". ( + <)
  2. Wählen Sie dann Ihr Produkt aus - links 'MyApp.app ausführen'.
  3. Wählen Sie rechts die Registerkarte "Info".
  4. Und schließlich wählen Sie "Warten Sie, bis MyApp.app gestartet wird".

Mehr hier im Abschnitt "Anpassen von ausführbaren Dateien im Schema-Editor".

BEARBEITEN:
Falls Sie Protokolle in GDB verpassen, lesen Sie den Kommentar von Louis Gerbarg zu seiner Antwort.

matm
quelle
1
Ich bin mit Xcode 4.2 für Lion und obwohl die App korrekt über das URL-Schema gestartet wird und die Debugger-Ausführung nicht gestoppt wird, zeigt die Konsole nichts an. Vermisse ich etwas
LoDani
@ LoDani hier, hast du jemals herausgefunden warum?
Davis
3
@ LoDani, Davis G.: Haben Sie Louis 'Kommentar zu der akzeptierten Antwort gesehen? stackoverflow.com/questions/1239000/… Wenn stdin / out / err auf diese Weise gestartet wird, wird es nicht in die Konsole umgeleitet.
Ivan Vučica
Danke, du hast meinen Tag gerettet! Der Versuch, einen Fehler zu beheben, der nur auftritt, wenn meine App von einem URL-Handler gestartet wird.
Eliot
@ Delirus - Vielen Dank für die Aktualisierung für XCode 4.
Dutchie432
112

Für XCode 10, 9, 8, 7 und 6:

  1. Wählen Sie das Schema in der Symbolleiste aus (links neben dem Gerät, mit dem Sie debuggen).
  2. Wählen Sie Schema bearbeiten
  3. Wählen Sie im linken Bereich Ausführen
  4. Wählen Sie für die Option Starten die Option Warten, bis die ausführbare Datei gestartet wird
  5. Schließen Sie den Schema-Editor und führen Sie Ihr XCode-Projekt aus

Jetzt können Sie beim Starten über eine Benachrichtigung, eine benutzerdefinierte URL oder durch Berühren des App-Symbols debuggen.

bgolson
quelle
9
Diese Antwort bereitete mir große Probleme, obwohl sie mich im Allgemeinen auf den richtigen Weg brachte. Schritt 3 ist etwas irreführend. Du musst es natürlich tun; Wählen Sie im linken Bereich Ausführen. Es sollte aber auch einen Schritt 5 mit einem sehr ähnlichen konzeptionellen Wortlaut geben: Klicken Sie auf die Schaltfläche Ausführen von xcode, bevor Sie die Ergebnisse erwarten ... Da es anfangs bei mir nicht funktionierte, bat ich andere Mitarbeiter um Rat ... fragten sie Ich, wenn ich das Run-Ding gemacht habe, auf das ich mit Ja geantwortet habe und an Option Nein gedacht habe. 3 ... Es sollte wirklich, wirklich, wirklich einen Schritt 5 zu diesem geben ...
Florin Odagiu
@FlorinOdagiu Guter Anruf. Schritt 5 hinzugefügt. Danke!
Bgolson
Falls Xcode eine andere Registerkarte "Schema" wiederherstellt, befindet sich die Option "Starten" unter der Registerkarte "Info".
Nate Whittaker
3
Ich erhalte keine Ausgabe im Debugger-Fenster, wenn ich die App manuell starte.
dvdblk
3

Ich arbeite nicht mit Push-Benachrichtigungen, daher kenne ich die genaue Funktionsweise von Push-Benachrichtigungen nicht. Ich würde jedoch versuchen, den Empfang einer Push-Benachrichtigung nachzuahmen, indem ich die Hauptmethode Ihres Programms so tun lasse, als ob eine Benachrichtigung veröffentlicht wurde, oder die Anwendung aufruft: didFinishLaunchingWithOptions: UIApplicationDelegate-Methode aus der applicationDidFinishLaunching: -Methode heraus.

HTH - Prost, Daan

drvdijk
quelle
Auch eine gute Idee, aber Nachahmung ist immer das zweitbeste zum Debuggen der realen Sache! Viel Spaß beim Codieren!
Dutchie432
3

In Xcode 6:

  1. Verbinden Sie das iPhone über USB mit dem Macbook
  2. Starten Sie die App auf dem iPhone, indem Sie auf das Symbol tippen
  3. In Xcode Menü Debug> Attach to Process> Wählen Sie Ihre App
Ali Saeed
quelle
1
Mit diesem Ansatz können Sie den kritischen Startpfad nicht debuggen.
Zorayr
2

Für XCode 11 und 10 können Sie Folgendes tun:

  1. Wählen Sie die Option Schema.
  2. Wählen Sie Schema bearbeiten.

  3. Wählen Sie im linken Bereich die Option Ausführen

  4. Wählen Sie im Startteil die Option Warten auf den Start der ausführbaren Datei aus und schließen Sie den Dialog.

  5. Erstellen Sie das Projekt und führen Sie es aus. Sie können die App jetzt entweder durch Tippen auf das App-Symbol oder durch Tippen auf die Benachrichtigungsnachricht starten.

Ramy Rizkalla
quelle