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.

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


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.


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.


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


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ę

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.