Debugowanie aplikacji po uruchomieniu przez powiadomienie push

135

Obecnie pracuję nad aplikacją, która odbiera powiadomienia push. Mam to wszystko działające w 100% przez stronę PHP. Jest kilka różnych typów powiadomień push, które może otrzymywać moja aplikacja. PHP obsługuje to i wysyła różne pakiety informacji do mojej aplikacji, z których wszystkie są dobrze odbierane.

Jednak gdy użytkownicy „wyświetlają” powiadomienie i uruchamia się moja aplikacja, oczywiście chcę wykonać inne działanie niż gdyby użytkownik po prostu uruchomił aplikację ręcznie - a do tego różne działania w zależności od typu powiadomienia push. Mam to dobrze działające ... strukturalnie.

Jeden z moich typów wypychania ma otwierać UIView, który tworzy kilka połączeń z kilkoma różnymi serwerami i negocjuje dane w tę iz powrotem. To UIView działa dobrze, na przykład, gdy jest uruchamiane z menu głównego - jednak gdy moje powiadomienie wypychane wyzwala to UIView, połączenia gniazd nie działają zgodnie z oczekiwaniami.

Teraz moje pytanie nie dotyczy gniazd, a bardziej - jak debuguje się taki problem? Z tego, co mogę powiedzieć (jestem stosunkowo nowy), gdy aplikacja została uruchomiona z powiadomienia wypychanego, nie ma możliwości połączenia tego wykonania z debugerem / konsolą / itp ... Mam bardzo trudny czas próbując debugować kod za pomocą UIAlertViews, ponieważ istnieje wiele linii komunikacji między różnymi serwerami.

Każda rada, którą dla mnie masz, byłaby bardzo wdzięczna.

Dutchie432
źródło

Odpowiedzi:

147

W XCode <4.0 (dla XCode> = 4, patrz odpowiedź delirusa poniżej), możesz teraz skonfigurować Xcode, aby dołączyć debuger do aplikacji po jej uruchomieniu, zamiast uruchamiać aplikację za pośrednictwem debugera. Umożliwia to debugowanie rzeczy, które różnią się w zależności od stanu uruchamiania aplikacji, takich jak schematy adresów URL, obszary robocze i powiadomienia push.

  1. W Xcode spójrz na pasek Źródło, a poniżej Cele będą znajdować się Pliki wykonywalne.
  2. Wywołaj inspektora swojej aplikacji w plikach wykonywalnych.
  3. Kliknij kartę Debugowanie w inspektorze.
  4. Odznacz „Uruchom plik wykonywalny po uruchomieniu debugera”
  5. Zaznacz opcję „Poczekaj na następne uruchomienie / powiadomienie push”

Teraz po kliknięciu debugowania z Xcode zamiast uruchamiania aplikacji pojawi się okno z informacją, że czeka na uruchomienie aplikacji. Następnie normalnie uruchamiasz aplikację na telefonie i Xcode dołącza do niej

Louis Gerbarg
źródło
37
Wiem, że to może nie być właściwe, ale kocham cię. :)
Dutchie432
17
Gdy uruchamiasz w ten sposób stdin, stdout i stderr aplikacji nie są kierowane do konsoli GDB, są wskazywane w miejscu, w którym się znajdują podczas normalnego uruchamiania aplikacji. Możesz zobaczyć NSLog () w konsoli systemowej urządzenia, patrząc na urządzenie w organizatorze.
Louis Gerbarg
1
Nauczyłeś mnie tutaj kilku bardzo cennych punktów. DZIĘKUJĘ CI. Spędziłem ostatnie 2 dni próbując debugować coś, co udało mi się naprawić w ciągu 20 minut od Twojego posta.
Dutchie432
1
@stigi pracuje dla mnie w symulatorze do testowania schematów URL. Używam xcode 4.5, jeśli to ma znaczenie
dreyln
1
@dreyln mój komentarz był z 2009 roku :) Od tamtego czasu wiele się zmieniło. Ale dzięki za ostrzeżenie!
stigi
124

W przypadku Xcode 4 musisz:

  1. Edytuj aktywny schemat za pomocą menu rozwijanego „Schematy”. ( + <)
  2. Następnie wybierz swój produkt - po lewej stronie „Uruchom MyApp.app”.
  3. Wybierz kartę „Informacje” po prawej stronie.
  4. Na koniec wybierz opcję „Poczekaj na uruchomienie MyApp.app”.

Więcej tutaj w sekcji „Dostosowywanie plików wykonywalnych w edytorze schematów”.

EDYCJA:
Jeśli przegapisz logi w GDB, zobacz komentarz Louisa Gerbarga do jego odpowiedzi.

matm
źródło
1
Jestem z Xcode 4.2 dla Lion i chociaż aplikacja uruchamia się poprawnie ze schematu adresu URL, a debugger nie zatrzymuje się, konsola nic nie pokazuje. Czy coś mi brakuje?
LoDani
@LoDani to samo tutaj, czy kiedykolwiek zorientowałeś się, dlaczego?
davis
3
@LoDani, Davis G .: Czy widziałeś komentarz Louisa na temat zaakceptowanej odpowiedzi? stackoverflow.com/questions/1239000/… Po uruchomieniu w ten sposób stdin / out / err nie są przekierowywane do konsoli.
Ivan Vučica,
Dziękuję, uratowałeś mi dzień! Próbuję naprawić błąd, który występuje tylko wtedy, gdy moja aplikacja jest uruchamiana przez moduł obsługi adresu URL.
Eliot
@delirus - Dzięki za aktualizację tego dla XCode 4.
Dutchie432
112

Dla XCode 10, 9, 8, 7 i 6:

  1. Wybierz schemat na pasku narzędzi (po lewej stronie urządzenia, z którym debugujesz)
  2. Wybierz opcję Edytuj schemat
  3. Wybierz Uruchom w lewym panelu
  4. W opcji Uruchom wybierz opcję Poczekaj na uruchomienie pliku wykonywalnego
  5. Zamknij Edytor schematów i uruchom projekt XCode

Teraz możesz debugować podczas uruchamiania z powiadomienia, niestandardowego adresu URL lub dotykając ikony aplikacji.

bgolson
źródło
9
Ta odpowiedź sprawiła mi wiele kłopotów, chociaż generalnie skierowała mnie na właściwą ścieżkę. Krok 3 jest trochę mylący. Oczywiście musisz to zrobić; wybierz Uruchom w lewym panelu. Ale powinien być również krok 5 z bardzo podobnym sformułowaniem koncepcyjnym: Kliknij przycisk Uruchom xcode, zanim spodziewasz się wyników ... Ponieważ na początku to nie działało dla mnie, poprosiłem o radę innych współpracowników ... zapytali mnie, jeśli zrobiłem rzecz Run, na którą odpowiedziałem tak, myśląc o opcji nie. 3 ... Naprawdę, naprawdę, naprawdę powinien być krok 5 do tego ...
Florin Odagiu
@FlorinOdagiu Dobre połączenie. Dodano krok 5. Dzięki!
bgolson
W przypadku, gdy Xcode przywraca inną kartę schematu, opcja Uruchom znajduje się na karcie Informacje.
Nate Whittaker
3
Po ręcznym uruchomieniu aplikacji nie widzę żadnych danych wyjściowych w oknie debugera.
dvdblk
3

Nie pracuję z powiadomieniami push, więc nie znam dokładnego działania powiadomień push. Jednak spróbuję naśladować odbiór powiadomienia push, pozwalając głównej metodzie programu udawać, że powiadomienie zostało wysłane, jeśli to możliwe, lub wywołując aplikację: didFinishLaunchingWithOptions: UIApplicationDelegate z metody applicationDidFinishLaunching :.

HTH - Pozdrawiam, Daan

drvdijk
źródło
To także dobry pomysł, ale naśladowanie jest zawsze drugim najlepszym rozwiązaniem do debugowania prawdziwych rzeczy! Miłego kodowania!
Dutchie432
3

W Xcode 6:

  1. podłącz iPhone'a do Macbooka przez USB
  2. uruchom aplikację na iPhonie, dotykając ikony
  3. W menu Xcode, Debug> Attach to Process> Wybierz aplikację
Ali Saeed
źródło
1
Przy takim podejściu nie będzie można debugować krytycznej ścieżki uruchamiania.
Zorayr
2

W przypadku XCode 11 i 10 możesz wykonać następujące czynności:

  1. Wybierz opcję Schemat.
  2. Wybierz opcję Edytuj schemat.

  3. Wybierz opcję Uruchom z lewego panelu

  4. W części dotyczącej uruchamiania wybierz poczekaj na uruchomienie pliku wykonywalnego , a następnie zamknij okno dialogowe.

  5. Skompiluj i uruchom projekt. Możesz teraz uruchomić aplikację, dotykając ikony aplikacji lub dotykając powiadomienia.

Ramy Rizkalla
źródło