Как я могу получить журналы консоли с iOS Simulator?

241

Я хочу посмотреть, что происходит в iOS Simulator, если я не тестирую приложение в Xcode.

Например, если я открою ссылку в симуляторе Safari, посмотрим, что происходит в консоли, или, если я установлю веб-приложение, просмотрите ссылки, которые я нажимаю в консоли.

Как я могу это сделать?

Я хочу видеть это в Xcode или Terminal, но это не проблема, если мне нужно использовать другой бит программного обеспечения.

user1335015
источник
Смотрите также: stackoverflow.com/a/29310542/59087
Дейв Джарвис

Ответы:

271

Симулятор iOS> Строка меню> Отладка> Открыть системный журнал


Старые пути:

iOS Simulator печатает свои журналы прямо на стандартный вывод, поэтому вы можете увидеть, что журналы перепутаны с системными журналами.

Откройте Терминал и введите: tail -f /var/log/system.log

Затем запустите симулятор.

РЕДАКТИРОВАТЬ:

Это перестало работать на Mavericks / Xcode 5. Теперь вы можете получить доступ к журналам симулятора в его собственной папке: ~/Library/Logs/iOS Simulator/<sim-version>/system.log

Вы можете использовать Console.app, чтобы увидеть это, или просто сделать хвост (iOS 7.0.3, 64 бита, например):

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

РЕДАКТИРОВАТЬ 2:

Сейчас они находятся в ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log

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

fbernardo
источник
8
Это все еще точно? Я не вижу ничего console.logв этом журнале, используя tailилиConsole.app
Джефф
3
Я не получаю никаких результатов на OSX 10.10. эти журналы есть, но мой симулятор версии 8.1 и все журналы версий 7.1 *
skift
65
Симулятор iOS> Строка меню> Отладка> Открытый системный журнал
pkamb
4
Спасибо! В наши дни это ~ / Library / Logs / CoreSimulator / <simulator-hash> /system.log.
Калимаркус
6
Ответ от BYossarian - «правильный». «Разработайте меню в настольном сафари, которое позволит вам увидеть консоль симулятора iOS: Разработка -> Симулятор iPhone -> имя сайта»
snobojohan
225

Вы можете просмотреть консоль для симулятора iOS через настольный Safari. Это похоже на то, как вы используете настольный Safari для просмотра консоли для физических устройств iOS.

Всякий раз, когда симулятор работает и открыта веб-страница, в меню Safari для рабочего стола будет опция, позволяющая увидеть консоль симулятора iOS:

Разработка -> Симулятор iPhone -> название сайта

Бен Джексон
источник
31
Это лучший ответ, так как это «настоящая» консоль браузера, и вы можете выполнять команды javascript на лету. Спасибо.
Хорхе Фуэнтес Гонсалес
4
Почему я не видел это нигде больше? Brilliant.
репа
4
Веб-инспектор (при доступе таким образом) для меня совершенно пуст (Mavericks Macbook Pro - все обновления установлены - Safari 7.0.5)
jamis0n
5
Кажется, Safari обнаруживает, что simultor открыт, но в нем говорится: «Нет проверяемых приложений»
nickmorss
4
о чем вы говорите ... это просто открывает веб-отладчик для веб-сайта, открытого в любом веб-просмотре симулятора. Консольные сообщения, которые вы видите там, регистрируются в контексте javascript. Это НЕ логи симулятора ios. Я что-то упускаю? Может быть, яблоко изменило что-то с 2013 года, но на сегодняшний день этот ответ имеет смехотворно высокий балл за заголовок вопроса
Раду Симионеску
107

В симуляторе есть возможность открыть console

Debug > Open System Log

или используйте

keyboard shortcut: ⌘/

Скриншот меню симулятора

Марк Бриджес
источник
90

iOS 8 и iOS 9

Под iOS 8 и iOS 9 это местоположение теперь:

~/Library/Logs/CoreSimulator/<DEVICE_CODE>

Итак, будет работать следующее:

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

DEVICE_CODEЗначение может быть найдено с помощью следующей команды консоли:

instruments -s devices
viteinfinite
источник
1
Чтобы найти идентификатор устройства: в Xcode нажмите Windows> Устройства. Устройство и идентификатор будут отображены в правой панели.
neilco
3
Вы можете ввести instruments -s devicesв консоли
viteinfinite
2
s / консоль / окно терминала /
mharper
Это не сработало для меня. xcrun simctl spawn booted log stream --level=debug | grep App_Debug_Stringработал.
rustyMagnet
29

Вы не должны полагаться на instruments -s. Официально поддерживается инструмент для работы с симуляторами из командной строки xcrun simctl.

Каталог журналов для устройства можно найти с помощью xcrun simctl getenv booted SIMULATOR_LOG_ROOT. Это всегда будет правильно, даже если местоположение меняется.

Теперь, когда дела идут os_logдальше, проще открыть Console.app на хосте Mac. Загруженные симуляторы должны отображаться слева как источник журналов, как и физические устройства. Вы также можете запустить команды журнала в загруженном симуляторе:

# 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`

Если вы хотите использовать инструменты разработчика Safari (включая консоль JS) с веб-страницей в симуляторе : запустите один из симуляторов, откройте Safari, затем перейдите в Safari на своем Mac и в меню вы увидите Симулятор.

Вы можете открыть URL в симуляторе, перетащив его из адресной строки Safari и опустив в окне симулятора. Вы также можете использовать xcrun simctl openurl booted <url>.

russbishop
источник
Теперь это правильный ответ для Xcode 9.3, iOS 11. Места, упомянутые в других ответах, больше не являются правильными.
Майкл МакГуайр,
У меня это работало на Xcode Version 10.1 (10B61), iOS 12.1 Simulator. Использование его для просмотра вывода консоли приложения iOS в Emacs. Другие ответы работали в прошлом, но больше не.
tboyce12
Для меня то, что сработало, это порядок (у меня Safari был открыт до симулятора, поэтому пункт меню не появился в Safari)!
Шмаркус
Где вы нашли документацию для флага "предиката"?
Хюлле
Новое в симуляторах MacOS 11 и iOS 14: log help predicatesпредоставит вам больше информации. Формат предиката следует за NSPredicate.
русский епископ
18

Если вы используете Swift , помните, что он printlnбудет печататься только в журнал отладки (который отображается в области отладки xCode). Если вы хотите распечатать в system.log, вы должны использовать NSLogкак в старые времена.

Затем вы можете просмотреть журнал симулятора через меню «Отладка»> «Открыть системный журнал ...» (cmd + /).

cprcrack
источник
12

Хвост /var/log/system.logне работал для меня. Я нашел свои журналы с помощью Console.app. Они были в

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

djibouti33
источник
Это отличный метод для просмотра журналов, например, несколько дней назад.
Трой
10

Вы можете использовать Consoleприложение (выберите ваше устройство в разделе «Устройства») на своем Mac, чтобы просмотреть сообщение журнала, отправленное с помощью NSLog(вы не увидите журналы из printфункции).

введите описание изображения здесь

Обратите внимание, что если вы хотите увидеть журнал от WebViewвас следует использоватьSafary -> Develop -> device

[Найти журнал сбоев]

yoAlex5
источник
нажмите cmd then space bar Тип " Console" нажмите enter. Btw. это должен быть правильный ответ сегодня.
Одинокий
7

XCode> 6.0 И iOS> 8.0 Следующий скрипт работает, если у вас версия XCode> 8.0

Я использую приведенный ниже небольшой скрипт для привязки журналов симулятора к системной консоли.

#!/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

В качестве аргумента вы можете передать тип симулятора, используемый в Grep. Как упомянуто в вышеупомянутых должностях, есть команда simctl и instruments, чтобы просмотреть тип симуляторов, доступных для использования в зависимости от версии XCode. Посмотреть список доступных устройств / симуляторов.

xcrun instruments -s

ИЛИ

xcrun simctl list

Теперь вы можете передать код устройства ИЛИ тип симулятора в качестве аргумента сценария и заменить «iPhone 6 (8.2 Simulator)» внутри grep на $ 1.

Gurubaran
источник
0

Я могу открыть журнал напрямую с помощью симулятора iOS: Debug -> Open System Log...не уверен, когда это было введено, поэтому он может быть недоступен для более ранних версий.

bompf
источник
0

Вы можете увидеть окно консоли Simulator, включая Safari Web Inspector и все инструменты веб-разработки, с помощью приложения Safari Technology Preview. Откройте свою страницу в Safari на симуляторе, а затем перейдите к Safari Technology Preview> Разработка> Симулятор.

Инструменты веб-разработки

Мау
источник
0

Нет NSLogили printконтент будет писать в system.log, который может быть открыт с помощью Select Simulator -> Debug -> Open System logна Xcode 11.

Я выяснить способ, журналы и записи в файл и открыть xx.logс Terminal.app.then журналы будут представлены в Terminal.appживом.

Я использую CocoaLumberjack для достижения этой цели.

ШАГ 1:

Добавить DDFileLogger DDOSLoggerи распечатать путь журналов. config()должен быть вызван, когда приложение обедает.

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
}

ШАГ 2:

Заменить printили NSLogна DDLogXXX.

ШАГ 3:

$ tail -f {path of log}

Здесь сообщение будет представлено в Terminal.app в живую.

Еще одна вещь. Если нет сообщений о выходе, убедитесь, что Environment Variables-> OS_ACTIVITY_MODEISNOT отключен.

Жюль
источник