- (void)viewDidLoad
{
NSLog(@"%s", __func__);
// ...
}
w rozszerzeniuviewDidLoad
iOS 8 . wyjść nic w Xcode. działa jednak jak zwykle w aplikacji kontenera.NSLog
NSLog
Jak mogę uzyskać wyniki komunikatów debugowania z rozszerzenia?
ios
ios8
xcode6
ios-app-extension
ohho
źródło
źródło
Odpowiedzi:
Kroki, aby debugować rozszerzenie aplikacji:
Uruchom aplikację kontenera. W tym kroku Xcode przesyła aplikację kontenera i rozszerzenie aplikacji na urządzenie lub symulator.
Zatrzymaj aplikację kontenera. Ten krok jest ważny podczas debugowania w symulatorze. Jeśli tego nie zrobisz, Xcode poinformuje Cię, że symulator jest używany.
W Xcode naciśnij menu Debuguj -> Dołącz do procesu -> Według identyfikatora procesu (PID) lub nazwy ..., wprowadź identyfikator rozszerzenia aplikacji, np. Com.abc.ContainerApp.MyExtension, aby rozpocząć debugowanie. Nie zapomnij ustawić punktów przerwania. (Aktualizacja z 25 sierpnia 2014 r .: możesz bezpośrednio wprowadzić MyExtension (nazwę twojego rozszerzenia).)
Na urządzeniu lub w symulatorze otwórz rozszerzenie aplikacji.
Aktualizacje w dniu 23 sierpnia 2014 r .:
Zauważyłem, że powyższe kroki debugowania nie działają dobrze na Xcode 6 beta 6 z iOS 8 SDK beta 5 na symulatorze.
Rozwiązanie:
Punkty przerwania działają. Ale nie wiem, dlaczego dzienniki nie są wyświetlane w oknie danych wyjściowych.
źródło
Ja też mam ten problem. U mnie działa, jeśli przejdziesz do swojego symulatora w menu Debug -> Otwórz dziennik systemu ...
Stąd możesz zobaczyć wszystkie dzienniki iPhone Simulator (w tym dzienniki twojego rozszerzenia).
źródło
NSLog
działa idealnie .Po prostu nie widzisz, co jest rejestrowane w obszarze debugowania Xcode, ponieważ debuger Xcode nie jest dołączony do twojego rozszerzenia. Rozszerzenia są prawie całkowicie niezależne od ich aplikacji. Mają na przykład oddzielne identyfikatory pakietów, a także są oddzielnymi procesami w systemie operacyjnym.
Miałem różne sukcesy w dołączaniu Xcode do rozszerzeń. Podobno wygląda na to, że załączyłby się automatycznie i pojawia się w nawigatorze debugowania jako „Oczekiwanie na dołączenie”, ale nigdy nie jest dołączany.
Czasami mogę uruchomić mój cel rozszerzenia w Xcode:
A potem mam możliwość wyboru aplikacji, w której ma uruchamiać moje rozszerzenie. W tym przypadku wybrałbym jego rekomendację „dzisiaj”, czyli centrum powiadomień.
A potem czasami dołączał debugger do mojego rozszerzenia. Wydaje się, że ta metoda działa tylko na urządzeniach fizycznych.
Jeśli nie dołącza, możesz użyć ręcznej metody mocowania w odpowiedzi @ VinceYaun,
Odniosłem również różne sukcesy, używając innych metod przywiązania. Większość zakończyła się niepowodzeniem i wygląda na to, że są to tylko błędy, które zostaną naprawione w późniejszym terminie.
Aby wyświetlić komunikaty dziennika, przejdź do
Window
->Devices
na górnym pasku i wybierz swoje urządzenie. Możesz wywołać dziennik urządzenia z dołu tego okna. Jeśli testujesz na symulatorze, można użyć @ BalestraPatrick za odpowiedź .Niektóre błędy zostały naprawione w wersji Beta 2 i przypuszczam, że ostatecznie debugger będzie się automatycznie podłączał podczas uruchamiania rozszerzenia.
Aktualizacja: W iOS 8 Beta 4 informacjach o wydaniu :
źródło
Ja też mam ten problem. Xcode nigdy nie dołącza mojego debugera do rozszerzenia ani nie wyświetla komunikatów NSLog. Jeśli ręcznie dołączysz debuger Xcode do procesu rozszerzenia, przynajmniej punkty przerwania będą działać jak urok:
Debug->Attach to process->Your extension name (mine was "com.example.MyExtensionApp.MyExtension")
źródło
U mnie działa :)
źródło
NSLog
będzie działać tylko wtedy, gdy używasz aplikacji kontenera. To nie będzie działać, jeśli używasz App-rozszerzenie zamiast pojemnika.Xcode 8 może debugować rozszerzenia:
Wynik: punkty przerwania i dziennik działają normalnie.
źródło
Co ostatecznie pozwoliło mi zobaczyć dziennik w obszarze debugowania, oparty na sugestii Michaela i dokumentacji Apple , to:
Skompiluj i uruchom rozszerzenie aplikacji w symulatorze, a po wyświetleniu monitu o aplikację hosta wybierz konkretną aplikację, z której chcesz wywołać rozszerzenie . W moim przypadku uruchamiałem rozszerzenie Action z Safari, wyciągając arkusz udostępniania w pliku PDF.
To, co wcześniej nie działało, to podążanie za sugestiami innych osób, aby użyć Today jako gospodarza, ale potem opuściłem tę aplikację i przeszedłem do Safari, aby zadzwonić do mojego rozszerzenia. Nie muszę już nawet uruchamiać mojej aplikacji zawierającej przed uruchomieniem rozszerzenia.
Z dokumentacji Apple:
źródło
Właściwie uruchomiłem dzienniki po prostu w Xcode 6.3. Po pierwsze, skompiluj i uruchom aplikację zawierającą. Po uruchomieniu aplikacji zawierającej na urządzeniu skompiluj i uruchom rozszerzenie aplikacji, zmieniając schemat na rozszerzenie aplikacji.
Apple ma dokumentację bezpośrednio związaną z debugowaniem, profilowaniem i testowaniem rozszerzenia aplikacji.
źródło
Sztuczka, która działa na mnie (choć jest dość brzydka) polega na umieszczeniu manekina
UILabel
gdzieś w dolnym rogu mojego przedłużenia. Zwykle to nazywamlogLabel
. Możliwe jest wtedy zaktualizowanie tekstu tej etykiety o dowolną instrukcję dziennika, która ma być rejestrowana. Takie podejście nie jest zbyt dobre, jeśli musisz rejestrować instrukcje z instancji różnych klas. I oczywiście zaśmieca twój interfejs użytkownika.Jeśli jednak masz dość prosty widget i nie przeszkadza ci lekkie zaśmiecenie interfejsu użytkownika, to załatwia sprawę. Wypróbowałem wszystkie inne rozwiązania przedstawione w tej dyskusji i niestety żadne z nich nie zadziałało.
źródło
Jedynym sposobem, w jaki działa debugowanie, jest wybranie Debuguj-> Dołącz do procesu przez PID lub nazwę. Następnie wprowadź PID, a nie nazwę rozszerzenia. Możesz znaleźć PID, uruchamiając rozszerzenie na urządzeniu, przejdź do Okno-> Urządzenia. Znajdź swoje urządzenie i wyświetl konsolę. Gdy zobaczysz nazwę swojego numeru wewnętrznego, po niej następuje 5-cyfrowy numer. To jest PID
Umieściłem też kilka NSLog w rozszerzeniu, aby znaleźć również PID. To jest w xCode 7
źródło
Napotkaj ten sam problem dotyczący rozszerzenia dla
NSLog
i punktów przerwania. Walczyłem z tym przez wiele dni.Device log
można znaleźć jako poniższy obraz. Jest o godzXCode -> Window -> Devices and Simulators
.Po wpisaniu w
Open Console
prawym górnym rogu okna dialogowego pojawi się pole wyszukiwania. Mogę tam zastosować regułę filtru. Na przykład nazwa procesu zawieraNotification
słowo kluczowe lub nazwa procesu musi być równa nazwie celu rozszerzenia, np. RównaMyNotificationServiceExtension
nazwie procesu.źródło
Najwyraźniej coś jest zepsute w Xcode6-B5.
Jeśli spróbuję uruchomić rozszerzenie Photo w symulatorze, nie widzę aplikacji Photos.app jako opcji procesu dołączania rozszerzenia.
To samo, działając na prawdziwym urządzeniu, daj mi prawidłowe zachowanie.
W pierwszym przypadku żaden punkt przerwania nie jest honorowany. W tym drugim przypadku punkty przerwania działają jak urok.
źródło
Powinieneś wiedzieć, że aplikacja kontenera i rozszerzenie to całkowicie dwa różne procesy w iOS, podczas gdy LLVM debuguje tylko wątek na raz, więc podczas debugowania konsola nigdy nie rejestruje rozszerzenia i nigdy nie zatrzymuje się w punkcie przerwania.
Możesz rozwiązać większość problemów metodą @Vince Yuan.
Jednak moim problemem jest to, że debugger Xcode prawie nie podpina mojego rozszerzenia klawiatury zarówno na symulatorze iOS, jak i na urządzeniach, na przykład 1 raz na 7-8 uruchomień, to całkowicie kwestia prawdopodobieństwa. Metoda @Vince Yuan również czasami działa.
Moje małe doświadczenie polega na tym, że po uruchomieniu schematu debugowania, jeśli sesja debugowania w lewym panelu pokazuje `` Brak sesji debugowania '', nie ma potrzeby otwierania rozszerzenia i testowania go, debugger się nie włączył, po prostu uruchom znowu na szczęście.
ale kiedy zobaczysz com.xxx.xxx.xxx czeka na dołączenie, rozszerzenie może z pewnością zostać zdebugowane.
To mała sztuczka, dla której nie można debugować rozszerzenia iOS, zwłaszcza rozszerzenia klawiatury.
źródło
Począwszy od Xcode 6 Beta 5, mogłem używać rzeczywistego urządzenia z systemem iOS8 do debugowania mojego rozszerzenia. Spróbuj uruchomić go na urządzeniu i wybierz Safari, aby uruchomić
źródło
Aby przezwyciężyć wszystkie stany spowodowane ciągłymi zmianami IDE, używam konsoli iOS firmy lemonjar.com - wyświetla ona okno konsoli dla dowolnego podłączonego urządzenia z systemem iOS wyświetlającego komunikaty syslog niezależnie od identyfikatora procesu. W tym miejscu możesz zobaczyć jednocześnie komunikaty dziennika debugowania aplikacji i rozszerzenia.
źródło
Mogę debugować moje rozszerzenie w sposób opisany poniżej:
Debug
->Attach to process by PID or Name
. Nazwa Twojego schematu rozszerzenia.main app target
i biegnij.Mam nadzieję, że w was też działa.
źródło