Czy istnieje sposób na przechwycenie wyjścia NSLog na iPhonie, gdy nie jest podłączony do debuggera?

Rejestruję kilka danych za pomocą NSLog(). Czy istnieje sposób na przechwycenie danych dziennika, gdy mój iPhone nie jest podłączony do mojej maszyny programistycznej i działa pod debugerem?

Na przykład, Czy Mogę przekierować go do pliku, a następnie odczytać plik dziennika z powrotem przez Xcode w późniejszym czasie? Muszę to zrobić, aby przetestować moją aplikację, gdy WiFi jest słabe, co wymaga, że idę daleko od mojego biurka.

Author: Cœur, 2009-01-09

4 answers

Jestem prawie pewien, że połączenia NSLog() zostaną zapisane w dzienniku konsoli systemowej, więc jeśli podłączysz iPhone ' a do komputera po tym, jak będziesz offline, powinieneś być w stanie spojrzeć na log konsoli w Xcode Organizer. Jedynym zastrzeżeniem jest to, że dziennik konsoli ma ograniczony rozmiar, więc starsze wpisy mogą zostać odrzucone, jeśli zrobisz dużo logowania.

 17
Author: Marc Novakowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-09 19:09:55

Poniższa metoda utworzy nazwę pliku " console.log " w folderze Dokumenty aplikacji, dzięki czemu można go później przeczytać.

Wywołaj tę metodę na początku programu:

- (void) redirectConsoleLogToDocumentFolder
{
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
  freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
}

Dziennik nigdy nie zostanie usunięty, więc używaj ostrożnie.

Po przetestowaniu aplikacji w terenie, podłącz ponownie telefon do komputera Mac, w Xcode, otwórz Organizer. W panelu Podsumowanie znajduje się lista wszystkich aplikacji w telefonie. Rozwiń ten, który debugujesz, a będziesz zobacz pakiet o nazwie "Dane aplikacji".

Kliknij strzałkę po prawej stronie nazwy i zapisz to. Na końcu pojawi się folder z nazwą identyfikatora pakietu i datą.

Wewnątrz tego folderu znajdziesz Folder Dokumenty, który powinien zawierać konsolę.log

 28
Author: Stephan Burlot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-22 15:09:50

W App Store znajduje się również aplikacja Console, ale działa tylko na iOS 6 i wcześniejsze.

Kiedy pojawił się iOS 7, przestał działać. (Może teraz odczytywać tylko własne dzienniki konsoli, a nie cały system.)
 5
Author: Chris R. Donnelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:28

Marek Nowakowski ma rację. Wyjście konsoli jest rejestrowane w telefonie, a po podłączeniu komputera Mac do telefonu wyjście konsoli jest dostępne w oknie organizer.

Po prostu wybierz swój telefon w panelu urządzenia i wybierz kartę konsola. Najnowsze wyjście konsoli będzie tam. Bardzo fajne.

Właśnie to rozgryzłem. To będzie bardzo pomocne w sytuacjach, takich jak opisujesz, gdzie musisz być z dala od komputera.

BTW, mam rozwiązanie aby przetestować słabe sygnały WiFi. Wystarczy owinąć telefon folią aluminiową, a Kabel USB wystaje z folii. Jeśli używasz go na uwięzi, możesz przejść przez KOD w debugerze. Nie możesz manipulować interfejsem użytkownika, ale możesz degradować / eliminować sygnały radiowe, takie jak 3D, WiFi i GPS. Jeśli chcesz obniżyć siłę sygnału, ale nie anulować go całkowicie, być może będziesz musiał eksperymentować z częściowym zakryciem telefonu folią, wkładając małe otwory pokrycie itp.

Jedna uwaga: NIE zostawiaj telefonu zawiniętego w folię dłużej niż kilka minut na raz. Prawdopodobnie się przegrzeje.

 2
Author: Duncan C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-14 01:58:09