Jak mogę uzyskać dzienniki konsoli z symulatora iOS?

241

Chcę zobaczyć, co się stanie w symulatorze iOS, jeśli nie testuję aplikacji w Xcode.

Na przykład, jeśli otworzę łącze w symulatorze Safari, zobaczę, co się stanie w konsoli lub jeśli zainstaluję aplikację internetową, zobacz łącza, które naciskam w konsoli.

W jaki sposób mogę to zrobić?

Chcę zobaczyć to w Xcode lub Terminalu, ale to nie jest problem, jeśli muszę użyć innego oprogramowania.

użytkownik1335015
źródło
Zobacz także: stackoverflow.com/a/29310542/59087
Dave Jarvis

Odpowiedzi:

271

Symulator iOS> Pasek menu> Debugowanie> Otwórz dziennik systemu


Stare sposoby:

Symulator iOS drukuje swoje dzienniki bezpośrednio na standardowe wyjście, dzięki czemu możesz zobaczyć dzienniki pomieszane z dziennikami systemowymi.

Otwórz terminal i wpisz: tail -f /var/log/system.log

Następnie uruchom symulator.

EDYTOWAĆ:

To przestało działać na Mavericks / Xcode 5. Teraz możesz uzyskać dostęp do dzienników symulatora we własnym folderze: ~/Library/Logs/iOS Simulator/<sim-version>/system.log

Aby to zobaczyć, możesz użyć Console.app lub po prostu wykonać ogon (na przykład 64-bitowy system iOS 7.0.3):

tail -f ~/Library/Logs/iOS\ Simulator/7.0.3-64/system.log

EDYCJA 2:

Znajdują się teraz w ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log

tail -f ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log

Fbernardo
źródło
8
Czy to nadal jest dokładne? Nic nie widzę console.logw tych logach przy użyciu taillubConsole.app
Jeff
3
Nie otrzymuję żadnych wyników w OSX 10.10. te dzienniki są dostępne, ale mój symulator to wersja 8.1, a wszystkie dzienniki mają wersje 7.1 *
skift
65
Symulator iOS> Pasek menu> Debugowanie> Dziennik systemu otwartego
pkamb 16.04.15
4
Dzięki! Obecnie jest to ~ / Library / Logs / CoreSimulator / <simulator-hash> /system.log.
calimarkus
6
Odpowiedź BYossariana brzmi „poprawna”. „Menu rozwijania w safari na pulpicie, które pozwala zobaczyć konsolę symulatora iOS: Opracuj -> iPhone Simulator -> nazwa strony”
snobojohan
224

Możesz wyświetlić konsolę dla symulatora iOS za pomocą Safari na komputerze. Jest to podobne do sposobu, w jaki używasz Safari do przeglądania konsoli na fizycznych urządzeniach z iOS.

Za każdym razem, gdy symulator jest uruchomiony, a strona internetowa jest otwarta, pod menu rozwijanym w Safari na pulpicie pojawi się opcja, która pozwala zobaczyć konsolę symulatora iOS:

Rozwiń -> iPhone Simulator -> nazwa strony

Ben Jackson
źródło
31
To najlepsza odpowiedź, podobnie jak „prawdziwa” konsola przeglądarki i możesz wykonywać polecenia javascript w locie. Dziękuję Ci.
Jorge Fuentes González
4
Dlaczego nie widziałem tego nigdzie indziej? Znakomity.
Rzepa
4
Inspektor sieci (gdy jest uzyskiwany w ten sposób dostęp) jest dla mnie całkowicie pusty (Mavericks Macbook Pro - wszystkie zainstalowane aktualizacje - Safari 7.0.5)
jamis0n
5
Wygląda na to, że Safari wykrywa, że ​​symultanizm jest otwarty, ale stwierdza „Brak
możliwych do sprawdzenia
4
o czym ty mówisz ... to po prostu otwiera debuger sieciowy dla strony internetowej otwartej w dowolnym widoku webowym symulatora. Widoczne tam komunikaty konsoli są rejestrowane w kontekście javascript. To NIE są logi symulatora iOS. Czy coś brakuje? Być może jabłko coś zmieniło od 2013 roku, ale na dzień dzisiejszy ta odpowiedź ma absurdalnie wysoką ocenę za tytuł pytania
Radu Simionescu,
107

W Symulatorze jest opcja otwarcia console

Debug > Open System Log

lub użyj

keyboard shortcut: ⌘/

Zrzut ekranu menu symulatora

Mark Bridges
źródło
90

iOS 8 i iOS 9

W iOS 8 i iOS 9 ta lokalizacja to teraz:

~/Library/Logs/CoreSimulator/<DEVICE_CODE>

Tak więc będą działać:

tail -f ~/Library/Logs/CoreSimulator/<DEVICE_CODE>/system.log

DEVICE_CODEWartość można znaleźć za pomocą następującego polecenia konsoli:

instruments -s devices
viteinfinite
źródło
1
Aby znaleźć identyfikator urządzenia: w Xcode kliknij Windows> Urządzenia. Urządzenie i identyfikator zostaną wyświetlone w okienku po prawej stronie.
neilco,
3
Możesz wpisać instruments -s devicesw konsoli
viteinfinite
2
s / console / terminal window /
mharper
To mi nie zadziałało. xcrun simctl spawn booted log stream --level=debug | grep App_Debug_Stringpracował
rustyMagnet
29

Nie powinieneś polegać instruments -s. Oficjalnie obsługiwane narzędzie do pracy z Symulatorami z wiersza poleceń to xcrun simctl.

Katalog dziennika urządzenia można znaleźć za pomocą xcrun simctl getenv booted SIMULATOR_LOG_ROOT. To zawsze będzie poprawne, nawet jeśli zmieni się lokalizacja.

Teraz, gdy wszystko się zmienia os_log, łatwiej jest otworzyć Console.app na komputerze Mac. Uruchomione symulatory powinny pojawiać się jako źródło dziennika po lewej stronie, podobnie jak urządzenia fizyczne. Możesz także uruchomić polecenia dziennika w uruchomionym symulatorze:

# os_log equivalent of tail -f
xcrun simctl spawn booted log stream --level=debug

# filter log output
xcrun simctl spawn booted log stream --predicate 'processImagePath endswith "myapp"'
xcrun simctl spawn booted log stream --predicate 'eventMessage contains "error" and messageType == info'

# a log dump that Console.app can open
xcrun simctl spawn booted log collect

# open location where log collect will write the dump
cd `xcrun simctl getenv booted SIMULATOR_SHARED_RESOURCES_DIRECTORY`

Jeśli chcesz używać narzędzi Safari Developer (w tym konsoli JS) ze stroną internetową w Symulatorze : Uruchom jeden z symulatorów, otwórz Safari, a następnie przejdź do Safari na Macu i powinieneś zobaczyć Symulator w menu.

Możesz otworzyć adres URL w symulatorze, przeciągając go z paska adresu Safari i upuszczając w oknie symulatora. Możesz także użyć xcrun simctl openurl booted <url>.

Russbishop
źródło
To jest poprawna odpowiedź teraz od Xcode 9.3, iOS 11. Lokalizacje wymienione w innych odpowiedziach nie są już poprawne.
Michael McGuire
Działa to dla mnie na Xcode w wersji 10.1 (10B61), iOS 12.1 Simulator. Używanie go do wyświetlania danych wyjściowych konsoli aplikacji iOS w Emacsie. Inne odpowiedzi działały w przeszłości, ale już nie.
tboyce12
Dla mnie rzeczą, która zadziałała, była kolejność (miałem Safari otwarte przed Symulatorem, więc pozycja menu nie pojawiła się w Safari)!
Shmarkus
Gdzie znalazłeś dokumentację dotyczącą flagi „predicate”?
Hjulle
Nowość w symulatorach macOS 11 i iOS 14: log help predicateszapewni więcej informacji. Format predykatu jest zgodny z NSPredicate.
Russbishop
18

Jeśli używasz Swift , pamiętaj, że printlnzostanie wydrukowany tylko w dzienniku debugowania (który pojawia się w obszarze debugowania xCode). Jeśli chcesz drukować na system.log, musisz używać NSLogjak za dawnych czasów.

Następnie możesz wyświetlić dziennik symulatora za pomocą jego menu, Debuguj> Otwórz dziennik systemu ... (cmd + /)

cprcrack
źródło
12

tailing /var/log/system.lognie działało dla mnie. Znalazłem moje dzienniki za pomocą Console.app. Byli w

~/Library/Logs/iOS Simulator/{version}/system.log

dżibuti33
źródło
Jest to świetna metoda na przeglądanie dzienników, np. Kilka dni temu.
Troy
10

Możesz użyć Consoleaplikacji (wybierz urządzenie w Urządzenia) na komputerze Mac, aby zobaczyć komunikat dziennika, który został wysłany za pomocą NSLog(nie zobaczysz dzienników z printfunkcji).

wprowadź opis zdjęcia tutaj

Pamiętaj, że jeśli chcesz zobaczyć dziennik WebView, powinieneś użyćSafary -> Develop -> device

[Znajdź dziennik awarii]

yoAlex5
źródło
naciśnij cmd then space bar Wpisz „ Console” naciśnij enter. Btw. to powinna być poprawna odpowiedź dzisiaj.
Lonely
7

XCode> 6.0 AND iOS> 8.0 Poniższy skrypt działa, jeśli masz wersję XCode> 8.0

Używam poniższego małego skryptu, aby dopasować dzienniki symulatora do konsoli systemowej.

#!/bin/sh
sim_dir=`xcrun instruments -s | grep "iPhone 6 (8.2 Simulator)" | awk {'print $NF'} | tr -d '[]'`
tail -f ~/Library/Logs/CoreSimulator/$sim_dir/system.log

Jako argument możesz przekazać typ symulatora używany w Grep. Jak wspomniano w powyższych postach, istnieje polecenie simctl i instrumentów, aby wyświetlić typ dostępnych symulatorów w zależności od wersji Xcode. Aby wyświetlić listę dostępnych urządzeń / symulatorów.

xcrun instruments -s

LUB

xcrun simctl list

Teraz możesz podać kod urządzenia LUB typ symulatora jako argument skryptu i zastąpić „iPhone 6 (symulator 8.2)” w grep na 1 $

Gurubaran
źródło
0

Mogę otworzyć dziennik bezpośrednio za pomocą symulatora iOS: Debug -> Open System Log...Nie jestem pewien, kiedy został wprowadzony, więc może nie być dostępny we wcześniejszych wersjach.

bompf
źródło
0

Możesz wyświetlić okno konsoli symulatora, w tym Safari Web Inspector i wszystkie narzędzia programistyczne, korzystając z aplikacji Safari Technology Preview. Otwórz stronę w przeglądarce Safari na symulatorze, a następnie przejdź do Przegląd technologii Safari> Opracuj> Symulator.

Narzędzia programistyczne

Mau
źródło
0

Nie NSLogbądź printzawartość będzie pisać system.log, które mogą być otwarte przez Select Simulator -> Debug -> Open System logna Xcode 11.

Wymyślam sposób, piszę logi do pliku i otwieram za xx.logpomocą. Terminal.appNastępnie logi prezentują się w Terminal.appżywym tempie.

Używam CocoaLumberjack, aby to osiągnąć.

KROK 1:

Dodaj DDFileLogger DDOSLoggeri wydrukuj ścieżkę do dzienników. config()należy zadzwonić, gdy lunch App.

static func config() {
    #if DEBUG
    DDLog.add(DDOSLogger.sharedInstance) // Uses os_log
    let fileLogger: DDFileLogger = DDFileLogger() // File Logger
    fileLogger.rollingFrequency = 60 * 60 * 24 // 24 hours
    fileLogger.logFileManager.maximumNumberOfLogFiles = 7
    DDLog.add(fileLogger)
    DDLogInfo("DEBUG LOG PATH: " + (fileLogger.currentLogFileInfo?.filePath ?? ""))
    #endif
}

KROK 2:

Wymienić printlub NSLogz DDLogXXX.

KROK 3:

$ tail -f {path of log}

Tutaj wiadomość będzie prezentowana w Terminal.app na żywo.

Jeszcze jedno. Jeśli nie ma żadnych komunikatów, wyloguj się, upewnij się, że Environment Variables-> OS_ACTIVITY_MODENIE JEST wyłączony.

Jules
źródło